Sunteți pe pagina 1din 7

Introducere in C Instructiuni Pointeri si functii proprii Vectori Matrice bidimensionale Structuri

de date Siruri de caractere Recursivitate Lista: stiva si coada Fisiere Grafica in Dev-C++
Bibliografie

Introducere in C++ Clase-Obiecte Constructori-Destructori Functii prieten Operatii de intrare-


iesire Supraincarcarea op Mostenirea simpla Mostenirea multipla Fisiere Functii si clase generice
Bibliografie

Matrici rare

Aplicatii Java Applet aplicatii Aplicatii android Linkuri utile

Subiecte propuse Tutoriale Facultati de informatica Site-uri prietene

C++: Clase si Obiecte - aplicatii rezolvate


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...)

Rezolvari
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.
#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;
}

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.
#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;
}

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.
#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;
}

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.
#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;
}

Copyright © 2021 info64.ro

Acest site utilizeaza cookie-uri. Navigand in continuare va exprimati acordul asupra folosirii
cookie-urilor.

S-ar putea să vă placă și