16.10.2018 2018-2019 Güz Object-Oriented Programming Lab 03 Ön Çalışma - Bir kompleks sayının genliğini ve açısını hesaplamak için gerekli C/C++ fonksiyonları bulun, kütüphanelerini ve prototiplerini yazın, argümanlarını ve return edilen değeri kısaca açıklayın. Uygulama 1. complex adında bir class oluşturun. Bu class ın üye değişkenleri: - r : reel kısım. - i : sanal kısım. Bu class ın üye fonksiyonları: - getr : objenin reel kısmının değerini döner. - geti : objenin sanal kısmının değerini döner. - setr : argüman değerini, reel kısma atar. - seti : argüman değerini, sanal kısma atar. - print : objeyi r+j*i formatında konsola yazar. - scan : kullanıcıdan objeye değer girişi alır. Tanımladığınız bu class ı bir programda test edin: Girilen complex objenin reel ve sanal değerleri sıfırdan farklı olduğu sürece, sonsuz döngü içerisinde, kullanıcıdan obje girişi alın ve girilen objeyi konsola yazdırın. #ifndef COMPLEX_H #define COMPLEX_H class complex private: double r; double i; public: double getr(void); double geti(void); void setr(double rval); void seti(double ival); void print(void); void scan(void); ; #endif // COMPLEX_H using std::cin; double complex::getr(void)
return r; double complex::geti(void) return i; void complex::setr(double rval) r = rval; void complex::seti(double ival) i = ival; void complex::print(void) cout << r; if(i<0) cout << "-j*" << -i; else cout << "+j*" << i; void complex::scan(void) cout << "enter real part:"; cin >> r; cout << "enter imaginary part:"; cin >> i; int main(void) complex z; do
z.scan(); cout << "girilen kompleks sayi: "; z.print(); cout << endl; while(z.getr()!=0 && z.geti()!=0); return 0; 2. Oluşturduğunuz complex class ı için constructor ve destructor üye fonksiyonları yazın. - <<constructor>> : Argümanların değerlerini, reel ve sanal kısımlara ilk değer olarak atar. Varsayılan olarak reel kısma 0, sanal kısma 0 değeri atanır. Konsola r+j*i değerinde bir complex objesi oluşturuldu yazar. - <<destructor>> : Konsola r+j*i değerinde bir complex objesi kaldırıldı. yazar. Aşağıdaki kod parçasında yer alan yorumlarda söylenenleri tamamlayın, yazdığınız constructor ve destructor üye fonksiyonlarını test edin. Programın konsol çıktısını bakarak constructor ve destructor fonksiyonlarının ne zaman çalıştırıldığını inceleyin. // buraya gerekli kutuphaneleri ekleyin int main(void) // burada bir complex objesi tanimlayin // burada 1+j*2 ilk degerinde bir complex objesi tanimlayin cout << "alt scope baslangici" << endl; // burada 3+j*4 ilk degerinde bir complex objesi tanimlayin cout << "alt scope bitisi" << endl; return 0; #ifndef COMPLEX_H #define COMPLEX_H class complex private: double r; double i; public: complex(double rval=0, double ival=0); ~complex(void); double getr(void); double geti(void); void setr(double rval); void seti(double ival); void print(void); void scan(void); ;
#endif // COMPLEX_H using std::cin; complex::complex(double rval, double ival) setr(rval); seti(ival); print(); cout << " degerinde bir complex objesi olusturuldu." << endl; complex::~complex(void) print(); cout << " degerinde bir complex objesi kaldirildi." << endl; double complex::getr(void) return r; double complex::geti(void) return i; void complex::setr(double rval) r = rval; void complex::seti(double ival) i = ival; void complex::print(void) cout << r; if(i<0) cout << "-j*" << -i;
else cout << "+j*" << i; void complex::scan(void) cout << "enter real part:"; cin >> r; cout << "enter imaginary part:"; cin >> i; // buraya gerekli kutuphaneleri ekleyin using std::cin; int main(void) // burada bir complex objesi tanimlayin complex z1; // burada 1+j*2 ilk degerinde bir complex objesi tanimlayin complex z2(1, 2); cout << "alt scope baslangici" << endl; // burada 3+j*4 ilk degerinde bir complex objesi tanimlayin complex z3(3, 4); cout << "alt scope bitisi" << endl; return 0; 3. Oluşturduğunuz complex class ına genlik ve açı hesaplamak için aşağıdaki üye fonksiyonları ekleyin. - magnitude : complex objenin genliğini hesaplar ve döner. - angle : complex objenin açısını derece birimde hesaplar ve döner. Eklediğiniz üye fonksiyonları bir programda test edin: Girilen complex objenin reel ve sanal değerleri sıfırdan farklı olduğu sürece, sonsuz döngü içerisinde, kullanıcıdan obje girişi alın ve girilen objeyi, genliğini ve açısını konsola yazdırın. #ifndef COMPLEX_H #define COMPLEX_H #define PI 3.14159
class complex private: double r; double i; public: complex(double rval=0, double ival=0); ~complex(void); double getr(void); double geti(void); void setr(double rval); void seti(double ival); void print(void); void scan(void); double magnitude(void); double angle(void); ; #endif // COMPLEX_H using std::cin; #include <cmath> complex::complex(double rval, double ival) setr(rval); seti(ival); print(); complex::~complex(void) double complex::getr(void) return r; double complex::geti(void) return i;
void complex::setr(double rval) r = rval; void complex::seti(double ival) i = ival; void complex::print(void) cout << r; if(i<0) cout << "-j*" << -i; else cout << "+j*" << i; void complex::scan(void) cout << "enter real part:"; cin >> r; cout << "enter imaginary part:"; cin >> i; double complex::magnitude(void) return sqrt(pow(getr(), 2) + pow(geti(), 2)); double complex::angle(void) return atan2(geti(), getr()) / PI * 180; int main(void) complex z; do
z.scan(); cout << "girilen kompleks sayi: "; z.print(); cout << endl << "genligi: " << z.magnitude() << endl << "acisi: " << z.angle() << endl; while(z.getr()!=0 && z.geti()!=0); return 0;