Situatie
Sa se realizeze o aplicatie cu un tip abstract de date (o clasa) ce permite memorarea datelor într-un numar complex, caz în care partea reala şi cea imaginara se considera a fi protejate spre vizibilitate în afara clasei. Clasa va contine elementele de baza, adica, memorarea datelor într-un numar complex şi afişarea acestuia. Se vor realiza şi operatiile de suma, respectiv, produs între doua numere complexe.
Solutie
#include <iostream> #include <fstream> #include <math.h> using namespace std; class complex { private: //era implicit float a,b; //a - partea reala, b - partea imaginara public: void citire(char* s) //functie ptr. introducerea datelor intr-un numar complex /*acesta functie va fi dezvoltata in interiorul clasei, catalogata fiind ca si functie in-line*/ { cout<<"Introduceti datele nr. complex "<<s<<endl; /*in loc de endl ar fi mers si '\n' sau "\n"*/ cout<<"\tpartea reala: "; cin>>a; cout<<"\tpartea imaginara: "; cin>>b; } void afisare(char*); //functie pentru afisarea datelor intr-un numar complex /*functia de mai sus va fi dezvoltata in exteriorul clasei, catalogata find ca si functie off-line*/ //MAI MULTE VARIANTE DE CALCUL A SUMEI A DOUA NUMERE COMPLEXE //1. suma in varianta rezultat transmis prin tipul rezultat complex suma1(complex); /*functia returnea un nr. complex ca si rezultat al expresiei suma, iar ca participanti sunt expresii de tipul nr. complex: unul este obiectul curent ce va apela functia, iar, cel de-al doilea este parametrul inclus in lista de parametri ai functiei*/ //2. suma in varianta rezultat transmis prin linia de parametri - prin tipul referinta void suma2(complex, complex&); /*operatorul este binar, deci relatia trebuie sa aiba doi operanzi: primul operand participant la relatie este obiectul curent, iar cel de-al doilea este primul parametru al functiei. Rezultatul obtinut se transmite prin cel de-al doilea parametru al functiei, si anume, expresia de tip referinta*/ //3. suma in varianta rezultat transmis prin linia de parametri - prin adresa void suma3(complex, complex*); //PRODUSUL A DOUA NUMERE COMPLEXE complex produs(complex); }; void complex::afisare(char* s) { cout<<"Nr. complex "<<s<<" este: "<<a; cout.setf(ios::showpos); //se adauga un semn '+' valorilor pozitive cout<<b<<"*i"<<endl; cout.unsetf(ios::showpos); //anulam optiunea de afisare implicita cu semn } complex complex::suma1(complex z) { complex r; r.a=a+z.a; r.b=b+z.b; return r; } void complex::suma2(complex z, complex& r) { r.a=a+z.a; r.b=b+z.b; } void complex::suma3(complex z, complex* r) { r->a=a+z.a; r->b=b+z.b; } void main() { //declaram un obiect la clasa anterior definita complex z1; /*aplelam functia de citire pentru obiectul in caz (in situatia de fata el devine obiect curent)*/ z1.citire("z1"); z1.afisare("z1"); cout<<endl; /*in cazul de mai sus am facut o declaratie de obiect static. Ce se intampla in situatia in care obiectul declarat este unul dinamic?*/ complex* z2; z2=new complex; //am folosit operat. de alocare de memorie din C++, si anume <new> z2->citire("z2"); z2->afisare("z2"); cout<<endl; //se trece pe linie noua, dupa caz, lasându-se un rând liber complex z3; z3=z1.suma1(*z2); /*se va calcula suma intre nr. complexe z1 si z2, suma ce se va inscrie in z3*/ z3.afisare("z1+z2"); complex z4; z1.suma2(*z2,z4); //z4=z1+z2 z4.afisare("z1+z2"); complex z5; z1.suma3(*z2,&z5); //z5=z1+z2 z5.afisare("z1+z2"); int g; cin >>g; }
Leave A Comment?