Minggu 07 – Class dan Objek Lanjutan

9 May 2011 at 18:38 (Algoritma & Metode OOP (C++))

Week 7 – Tugas Kelompok 4 – 0454T

Soal Algoritma dan MOOP

Pertemuan 7 (Tugas kelompok ke-4)

 

  1. Sebuah polynomial seperti :  F(x) = 7.4x5 + 3.1x2 – 10.2x + 15  Dapat direpresentasikan dengan sebuah array dengan setiap elemennya didefinisikan sebagai polynomial yang mempunyai data koefisien dan derajat (degree). Buatlah class polynomial dengan definisi ini dan juga class mempunyai operasi penambahan, pengurangan, perkalian polynomial sehingga hasilnya adalah polynomial baru. Disamping itu juga terdapat fungsi anggota untuk mencari nilai polynomial jika diinputkan harga x.
  1. Buatlah deklarasi kelas dan definisi fungsi dari suatu object Rational Number yang mempunyai data numerator dan denumerator. Buatlah fungsi dan operator yang sesuai agar program yang menggunakan class Rational di bawah dapat dieksekusi dengan benar.

void main() {

Rational A, B, C(2, 7);

cin >> A;    //operator untuk mengimputkan data object A

B = A + C;   //operator penjumlahan pada object Rational

A.Tampil();  //fungsi untuk menampilkan data object A

B.Tampil();

C.Tampil();

}

  1. Sebuah bilangan komplek k dapat ditulis dalam bentuk k = a + bi, dimana a dan b adalah bilangan real dan i adalah bilangan imajiner sehingga i*i = -1. Bilangan a biasanya disebut bagian real dan bilangan b merupakan bagian imajiner dari bilangan k. Buatlah kelas Komplek sehingga kelas tersebut dapat digunakan untuk bekerja dengan bilangan komplek, Diharapkan main program (program utama) dapat menggunakan kelas tersebut sebagai berikut:

void main(){

Complex A(2,3);

Complex B, C;

Cout << “inputkan bilangan komplek: “; Cin >> B;

C = B + A;     //operator penjumlahan

cout << “Bil komplek I: ” << C;  //friend operator <<

C = B – A;     //operator pengurangan

cout << “Bil komplek II: ” << C;

if (A == B)    //operator perbandingan

cout << “Bilangan komplek A dan B sama”;

C = A * B;     //operator perkalian bil komplek

C = A * 2.5;   //operator perkalian dengan bil real

}

Jawaban

 

  1. Sebuah polynomial seperti :  F(x) = 7.4x5 + 3.1x2 – 10.2x + 15  Dapat direpresentasikan dengan sebuah array dengan setiap elemennya didefinisikan sebagai polynomial yang mempunyai data koefisien dan derajat (degree). Buatlah class polynomial dengan definisi ini dan juga class mempunyai operasi penambahan, pengurangan, perkalian polynomial sehingga hasilnya adalah polynomial baru. Disamping itu juga terdapat fungsi anggota untuk mencari nilai polynomial jika diinputkan harga x.

Jawaban Programnya:

#include <iostream>

#include <iomanip>

using namespace std;

class Polynomial

{

public:

Polynomial ();

Polynomial (const Polynomial &);

Polynomial (short nTerms);

~Polynomial ();

const Polynomial & operator= (const Polynomial &);

const Polynomial operator+ (const Polynomial &) const;

const Polynomial operator+ (double) const;

friend const Polynomial operator+ (double, const Polynomial &);

const Polynomial operator- (const Polynomial &) const;

const Polynomial operator- (double) const;

friend const Polynomial operator- (double, const Polynomial &);

const Polynomial operator* (const Polynomial &) const;

const Polynomial operator* (double) const;

friend const Polynomial operator* (double, const Polynomial &);

double setTerm (short term, double coefficient);

double getTerm (short term) const;

double evaluate (double x) const;

friend ostream & operator<< (ostream &, const Polynomial &);

private:

short mnTerms;

double *mpCoefficients;

};

int main ()

{

Polynomial tmp1;

Polynomial tmp2;

tmp1.setTerm(1,1);

tmp1.setTerm(0,2);

tmp2.setTerm(5,2);

tmp2.setTerm(2,1);

tmp2.setTerm(1,2);

tmp2.setTerm(0,4);

cout << endl;

cout << tmp1 << ” + ” << tmp2 << endl;

cout << tmp1+tmp2 << endl;

cout << endl;

cout << tmp1 << ” + ” << 10 << endl;

cout << tmp1+10 << endl;

cout << endl;

cout << 10 << ” + ” << tmp1 << endl;

cout << 10+tmp1 << endl;

cout << endl;

cout << tmp1 << ” – ” << tmp2 << endl;

cout << tmp1-tmp2 << endl;

cout << endl;

cout << tmp1 << ” – ” << 10 << endl;

cout << tmp1-10 << endl;

cout << endl;

cout << 10 << ” – ” << tmp1 << endl;

cout << 10-tmp1 << endl;

cout << endl;

cout << tmp1 << ” X ” << tmp2 << endl;

cout << tmp1*tmp2 << endl;

cout << endl;

cout << tmp2 << ” X ” << -2 << endl;

cout << tmp2*-2 << endl;

cout << endl;

cout << 3 << ” X ” << tmp2 << endl;

cout << 3*tmp2 << endl;

cout << endl;

cout << tmp2 << ” Dimana x adalah ” << 2 << endl;

cout << tmp2.evaluate(2) << endl;

cout << endl;

return 0;

}

  1. Buatlah deklarasi kelas dan definisi fungsi dari suatu object Rational Number yang mempunyai data numerator dan denumerator. Buatlah fungsi dan operator yang sesuai agar program yang menggunakan class Rational di bawah dapat dieksekusi dengan benar.

void main() {

Rational A, B, C(2, 7);

cin >> A;    //operator untuk mengimputkan data object A

B = A + C;   //operator penjumlahan pada object Rational

A.Tampil();  //fungsi untuk menampilkan data object A

B.Tampil();

C.Tampil();

}

Jawaban Programnya:

#include<stdio.h>

#include<iostream>

#include<conio.h>

using namespace std;

class rational

{

int numer;

int denom;

public:

void getdata()

{

cout<<“\n Input numerator no rational: “;

cin>>numer;

cout<<“\n Input denumerator no rational: “;

cin>>denom;

}

void operator+(rational);

};

void rational ::operator+(rational c1)

{

rational temp;

temp.numer=(numer*c1.denom)+(c1.numer*denom);

temp.denom=denom*c1.denom;

cout<<“\nNo Rational Setelah di Add”;

cout<<“\n numerator=”<<temp.numer<<“\n denominator =”<<temp.denom;

}

int main()

{

system (“cls”);

rational c1, c2;

int n;

do

{

cout<<“\n 1.Input data untuk no rational  “;

cout<<“\n 2. Addition of rational no. “;

cout<<“\n 3. Quit”;

cout<<“\n Enter Pilihan Anda [1-3]: “;

cin>>n;

switch(n)

{

case 1:

cout<<endl<<“\n Input data untuk No Rational Pertama”;

c1.getdata();

//cout<<endl<<“\n Input data untuk No Rational Kedua “;

//c2.getdata ();

//system (“cls”);

break;

case 2:

c1+c2;

getch();

//system (“cls”);

break;

case 3:

exit(1);

break;

}

} while (n!=3);

getch();

}

Jawaban Hasil Programnya:

  1. Sebuah bilangan komplek k dapat ditulis dalam bentuk k = a + bi, dimana a dan b adalah bilangan real dan i adalah bilangan imajiner sehingga i*i = -1. Bilangan a biasanya disebut bagian real dan bilangan b merupakan bagian imajiner dari bilangan k. Buatlah kelas Komplek sehingga kelas tersebut dapat digunakan untuk bekerja dengan bilangan komplek, Diharapkan main program (program utama) dapat menggunakan kelas tersebut sebagai berikut:

void main(){

Complex A(2,3);

Complex B, C;

Cout << “inputkan bilangan komplek: “; Cin >> B;

C = B + A;     //operator penjumlahan

cout << “Bil komplek I: ” << C;  //friend operator <<

C = B – A;     //operator pengurangan

cout << “Bil komplek II: ” << C;

if (A == B)    //operator perbandingan

cout << “Bilangan komplek A dan B sama”;

C = A * B;     //operator perkalian bil komplek

C = A * 2.5;   //operator perkalian dengan bil real

}

Jawaban Programnya:

#include <cmath>

#include <iostream>

using namespace std;

class Complex {

public:

// Konstruktor

Complex (double x = 0.0, double y = 0.0) : re (x), im (y) {

}

Complex (const Complex &cn) : re (cn.re), im (cn.im) {

}

Complex &operator= (const Complex &cn) {

re = cn.re;

im = cn.im;

return *this;

}

static Complex fromPolar (double radius, double phase) {

double x = radius * cos((M_PI * phase) / 180.0);

double y = radius * sin((M_PI * phase) / 180.0);

return Complex(x, y);

}

// Penjumlahan dengan bilangan complex

Complex operator+ (const Complex &cn) const {

return Complex(re + cn.re, im + cn.im);

}

// Pengurangan dengan bilangan complex

Complex operator- (const Complex &cn) const {

return Complex(re – cn.re, im – cn.im);

}

// Perkalian complex

Complex operator* (const Complex &cn) const {

return Complex((re * cn.re) – (im * cn.im),

(im * cn.re) + (re * cn.im));

}

// Pembagian complex

Complex operator/ (const Complex &cn) const {

if (this->isNull() == false && cn.isNull() == false) {

double tmp = (cn.re * cn.re) + (cn.im * cn.im);

return Complex(((re * cn.re) + (im * cn.im)) / tmp,

((im * cn.re) – (re * cn.im)) / tmp);

}

return Complex();

}

bool isNull () const {

return re == 0.0 && im == 0.0;

}

// Mendapatkan complex conjugate

Complex getConjugate () const {

return Complex(re, -im);

}

// Mendapatkan r dari bilangan complex

double getRadius () const {

return sqrt((re * re) + (im * im));

}

// Mendapatkan sudut dari bilangan complex.

double getPhase (bool *ok = 0) const {

double result = 0.0;

if (isNull() == false) {

if (re != 0.0 && im != 0.0) {

result = (atan(im / re) * 180.0) / M_PI;

} else {

if (re == 0.0) {

result = (im > 0.0)? 90.0 : -90.0;

} else if (im == 0.0) {

result = (re > 0.0)? 0.0 : 180.0;

}

}

if (ok != 0) {

*ok = true;

}

} else {

if (ok != 0) {

*ok = false;

}

}

return result;

}

// Bagian real

double re;

// Bagian imajiner

double im;

};

int main(){

//int B;

Complex A(2,3);

Complex B, C;

cout << “inputkan bilangan komplek: “;

cin >> B;

C = B + A;     //operator penjumlahan

cout << “Bil komplek I: ” << C;  //friend operator <<

C = B – A;     //operator pengurangan

cout << “Bil komplek II: ” << C;

if (A == B)    //operator perbandingan

cout << “Bilangan komplek A dan B sama”;

C = A * B;     //operator perkalian bil komplek

C = A * 2.5;   //operator perkalian dengan bil real

}

Save to PDF

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: