Problema c++

Configurare noua (How To)

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

Tip solutie

Permanent

Voteaza

(12 din 27 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?