1) Sa se descrie o clasa „complex” ce permite memorarea partii reale si a celei imaginare într-un numar complex şi calculeaza modulul acestuia. Datele nu vor suferi nici o protectie în interiorul clasei astfel încât se poate avea acces direct la acestea din afara.
Sa se realizeze un program care foloseşte aceasta clasa şi citeşte date într-un numar complex afişându-l împreuna cu modulul sau (rezolvare...)
2) Sa se descrie o clasa „complex” ce permite memorarea partii reale si a celei imaginare într-un numar complex şi calculeaza modulul acestuia. Datele nu vor suferi nici o protectie în interiorul clasei astfel încât se poate avea acces direct la acestea din afara.
Sa se realizeze un program care citeste un sir de numere complexe si afiseaza acele numere care au maximul si minimul dintre module împreuna cu modulele lor (rezolvare...)
3) 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 (rezolvare...)
4) 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 (rezolvare...)
C++: Clase si Obiecte - aplicatii rezolvate
Rezolvari
#include <iostream> #include <fstream> #include <math.h> using namespace std; class complex { public: float a,b; float modul() { return sqrt(pow(a,2)+pow(b,2)); } }; void main() { complex z; cout<<"Introduceti nr complex: \n"; cout<<"\tPartea reala: "; cin>>z.a; cout<<"\tPartea imaginara: "; cin>>z.b; cout<<"\nNumarul complex este: ("<<z.a<<","<<z.b<<")"; cout<<"\nModulul este: "<<z.modul()<<endl; int g; cin >>g; }
#include <iostream> #include <fstream> #include <math.h> using namespace std; class complex { public: float a,b; float modul() { return sqrt(pow(a,2)+pow(b,2)); } }; void main() { complex v[20]; //un sir de maxim 20 elemente reprezentand numere complexe float max,min; //modulele minim si maxim int n; //dimensiunea reala a sirului int m,M; //indicele elementului minim, respectiv, maxim cout<<"Introduceti n: "; cin>>n; for(int i=0;i<n;i++) { cout<<"Numarul complex "<<i+1<<" este: "<<endl; cout<<"\tpartea reala: "; cin>>v[i].a; cout<<"\tpartea imaginara: "; cin>>v[i].b; } max=v[0].modul(); min=v[0].modul(); m=0; M=0; for(int i=1;i<n;i++) if (v[i].modul()<min) { min=v[i].modul(); m=i; } else if (v[i].modul()>max) { max=v[i].modul(); M=i; } cout<<"\nNr complex cu modul maxim: ("<<v[M].a<<","<<v[M].b<<") - modul: "<<max; cout<<"\nNr complex cu modul minim: ("<<v[m].a<<","<<v[m].b<<") - modul: "<<min; int g; cin >>g; }
#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 <afisare> va fi dezvoltata in exteriorul clasei, catalogata find ca si functie off-line*/ }; 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); //se anuleaza semnul '+' ptr. valorile pozitive } void main() { //declaram un obiect la clasa anterior definita complex z1; /*apelam 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 operatorul de alocare de memorie din C++, si anume <new> z2->citire("z2"); z2->afisare("z2"); int g; cin >>g; }
#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; }