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

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


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