Sunteți pe pagina 1din 9

Ministerul Educaţiei al Republicii Moldova

Universitatea Tehnică a Moldovei

Catedra FCIM

Raport
Lucrarea de laborator Nr.1
Programarea orientată pe obiecte

Varianta 1

A efectuat: Grosu Maxim

A verificat: Pasat Natalia

Chișinău 2021
Tema: Structura – mecanism de abstractizare

Scopul lucrării:
● Studierea programării prin abstractizarea datelor;
● Studierea regulilor de definire şi utilizare a structurilor de date;
● Crearea variabilelor de tip structură, accesarea componentelor unei structuri.

Noțiuni Teoretice :

-Definiţi noţiunea – tip abstract de date.


Tipul de date abstract este o entitate manipulata doar prin operatiile ce definesc acel tip.
Avantajele utilizarii tipurilor de date abstracte sunt:
1. Programele devin independente de modul de reprezentare a datelor. Modul de
reprezentare poate fi modificat, fara însa a afecta restul programului (de exemplu, o
multime poate fi implementata printr-un tablou sau printr-o lista ordonata, dar partea
de program ce foloseste operatorii tipului abstract ramâne neschimbata).
2. Se previne violarea accidentala a datelor. Utilizatorul tipului abstract este fortat sa
manipuleze datele doar prin intermediul operatorilor ce compun tipul abstract, astfel
reducându-se riscul unei distrugeri a datelor.

-Cum se defineşte o structură?

Structura – este o mulţime de date grupate, conform unei ierarhii, de obicei de tipuri diferite .

-Prin ce se deosebeşte structura de alte tipuri de date?

Structura poate fi comparată cu tabloul, însă tabloul conţine date de un acelaşi tip, iar
elementele tabloului se accesează cu ajutorul indicilor, pe cînd accesarea componentelor
structurii are o formă specifică.

-Cum se defineşte o variabilă de tip structură?

Pentru definirea variabilelor este suficientă utilizarea numelui de structură la fel ca tipurile
predefinite: Book b1, b2, bs[10], *bptr;
-Când se utilizează punctul, cînd - săgeata?

. (punctul) ca operator și -> (săgeata) ca operator sunt utilizate pentru a face referire la
membrii individuali ai claselor, structurilor și uniunilor . Operatorul punct este aplicat
obiectului real . Operatorul săgeată este utilizat cu un pointer către un obiect.

- Care sunt deosebirile între structura din limbajul C şi C++?

Diferenta majora dintre cele doua: C++ suporta OOP (Object Oriented Programming), in timp
ce in C nu este definit acest concept. C: - Implementari academice de algoritmi, etc. - Servere
de toate genurile; - Programare de sistem; - Compilatoare; - Masini virtuale; - Drivere; -
Aplicatii real-time; (Pe langa cele enumerate, exista si exceptii. Uneori C-ul e folosit in
industria jocurilor sau aplicatiilor desktop). C++ -> un spectru mai larg: - Aplicatii desktop; -
Jocuri; C este un limbaj procedural, cu o librarie standard minimalista. C++ suporta atat
programarea oop cat si procedurala. C++ e mult mai complex si are o librarie standard mai
dezvoltata. La ora actuala sub Linux poti folosi cu increde libraria GLib . E foarte buna, te
ajuta la programarea generica, ai structurile de date deja implementate, etc.

-O structură poate oare să conţină altă structură?

Atâta timp cât o structură o să aibă un nume și un tip atunci aceasta va putea conține o altă
structură.

-O structură poate oare să conţină pointer spre ea însăşi?

Da, astfel de structuri se numesc structuri auto-referențiale.

-Poate oare să fie creată dinamic o variabilă de tip structură?

Se poate crea dinamic o variabila de tip structura cu ajutorul alocarii dinamice, care in
limbajul C++ se utilizeaza ceva de genul:
Pointer->autor = new char[strlen(autor)]

-Explicaţi cum are loc apelul prin referinţă.

Se face o functie tip void cu denumirea spre ex freeMemory, in aceasta functie se indica ca
avem nevoie din main de pointerul carte, dupa aceea se foloseste delete[] (din biblioteca de
baza iostream) , cu aceasta noi stergem memoria unei variabile spre exemplu autor scriind in
modul urmator: delete[] pointer->autor; dupa zicem ca acest pointer care are variabila autor i
se atribuie NULL pentru a sterge definitiv din memoria calculatorului.

Sarcina

Varianta I
1. Să se creeze; utilizînd structura, tipul abstract de date pentru reprezentarea numerelor
complexe. Să se definească funcţiile de setare/citire a părţii reale şi imaginare a unui număr
complex; de adunare, scădere, înmulţire, împărţire şi de comparaţie( mai mic, mai mare, etc.)
a două numere complexe. Să se definească funcţia ce calculează şi returnează modulul unui
număr complex. Să se definească toate funcţiile ca fiind globale.
#include <iostream>
#include <cmath>
using namespace std;
struct Complex
{
float Re;
float Im;
}V[3];
void readComplex();
void show_Complex();
void adunarea_Complex();
void scaderea_Complex();
void inmultirea_Complex();
void impartire_Complex();
void modulul_Complex();
void comparare_Complex();
float z_re, z_im;

int main()
{
int optiune;
while(1)
{

cout << ""<< endl;


cout << "1 | Citirea numerelor complexe " << endl;
cout << "2 | Afisarea numerelor complexe "<< endl;
cout << "3 | Operatia de adunare " << endl;
cout << "4 | Operatia de scadere " << endl;
cout << "5 | Operatia de inmultire " << endl;
cout << "6 | Operatia de impartire " << endl;
cout << "7 | Modulul unuia dintre cele 2 numere complexe " << endl;
cout << "0 | Introduceti meniul dorit: "; cin >> optiune;
switch(optiune)
{
case 1:
readComplex();

break;
case 2:
show_Complex();

break;
case 3:
adunarea_Complex();

break;
case 4:
scaderea_Complex();

break;
case 5:
inmultirea_Complex();

break;
case 6:
impartire_Complex();

break;
case 7:
modulul_Complex();

break;
case 8:
comparare_Complex();

break;
case 0:
cout<<"\n\nAti iesit din program!!\n\n"; system("pause");
exit(1);
default:
cout<<"\nAti introdus un numar gresit!\n"; system("pause");
break;
}
}
return 0;
}
void readComplex()
{
int i;
for(i=0; i<2; i++)
{
cout<<"\n\nElementul "<<i+1<<""<<endl<<endl;
cout<<"Re: "; cin>>V[i].Re;
cout<<"Im :"; cin>>V[i].Im;
}
}
void show_Complex()
{
int i;
cout<<"\nElementele sunt: \n";
for(i=0; i<2; i++)
{
cout<<"\nZ"<<i+1<<" = "<<V[i].Re << " + "<<V[i].Im<<"*i";
}
}
void adunarea_Complex()
{
cout<<"\nAdunarea elementelor : \n";
z_re = V[0].Re + V[1].Re;
z_im = V[0].Im + V[1].Im;
if(z_im < 0)
{
cout<<"\nZ = "<<z_re<<" + ("<<z_im<<")*i"<<endl;
}
else
{
cout<<"\nZ = "<<z_re<<" + "<<z_im<<"*i"<<endl;
}
}
void scaderea_Complex()
{
cout<<"\nScaderea elementelor: "<<endl;
z_re = V[0].Re - V[1].Re;
z_im = V[0].Im - V[1].Im;
if(z_im < 0)
{
cout<<"\nZ = "<<z_re<<" + ("<<z_im<<")*i"<<endl;
}
else
{
cout<<"\nZ = "<<z_re<<" + "<<z_im<<"*i"<<endl;
}
}
void inmultirea_Complex()
{
cout<<"\nInmultirea elementelor: "<<endl;
z_re = V[0].Re*V[1].Re - V[0].Im*V[1].Im;
z_im = V[0].Re*V[1].Im + V[0].Im*V[1].Re;
if(z_im < 0)
{
cout<<"\nZ = "<<z_re<<" + ("<<z_im<<")*i"<<endl;
}
else
{
cout<<"\nZ = "<<z_re<<" + "<<z_im<<"*i"<<endl;
}
}
void impartire_Complex()
{
cout<<"\nImpartirea elementelor: "<<endl;
z_re = (V[0].Re*V[1].Re + V[0].Im*V[1].Im)/(V[1].Re*V[1].Re + V[1].Im*V[1].Im);
z_im = (V[1].Re*V[0].Im - V[0].Re*V[1].Im)/(V[1].Re*V[1].Re + V[1].Im*V[1].Im);
if(z_im < 0)
{
cout<<"\nZ = "<<z_re<<" + ("<<z_im<<")*i"<<endl;
}
else
{
cout<<"\nZ = "<<z_re<<" + "<<z_im<<"*i"<<endl;
}
}
void modulul_Complex()
{
int t;
float z;
cout<<"\nModulul elementelor: ;"<<endl;
cout<<"\nIntroduceti z1(1) sau z2(2) pentru a face modlulul acestuia:"; cin>>t;
if(t == 1)
{
z = sqrt(V[0].Re*V[0].Re + V[0].Im*V[0].Im); cout<<"\n|z1| = "<<z<<endl;
}
if(t == 2)
{
z = sqrt(V[1].Re*V[1].Re + V[1].Im*V[1].Im); cout<<"\n|z2| = "<<z<<endl;
}
}
void comparare_Complex()
{
if(z_im == 0)
{
if(V[0].Re < V[1].Re)
{
cout<<"\nZ1 este mai mic decat Z2\n";
}
else
{
cout<<"\nZ1 este mai mare decat Z2\n";
}
}
else
{
cout<<"\nEroare. Exista parte imaginara"<<endl<<"Compararea se efectuiaza doar in
cazul cand partea imaginara este zero"<<endl;
}
}

Rezultatul programului :
1 | Citirea numerelor complexe
2 | Afisarea numerelor complexe
3 | Operatia de adunare
4 | Operatia de scadere
5 | Operatia de inmultire
6 | Operatia de impartire
7 | Modulul unuia dintre cele 2 numere complexe
0 | Introduceti meniul dorit: 1
Elementul 1

Re: 3
Im :4
Elementul 2

Re: 2
Im :4
1 | Citirea numerelor complexe
2 | Afisarea numerelor complexe
3 | Operatia de adunare
4 | Operatia de scadere
5 | Operatia de inmultire
6 | Operatia de impartire
7 | Modulul unuia dintre cele 2 numere complexe
0 | Introduceti meniul dorit: 2
Elementele sunt:

Z1 = 3 + 4*i
Z2 = 2 + 4*i
1 | Citirea numerelor complexe
2 | Afisarea numerelor complexe
3 | Operatia de adunare
4 | Operatia de scadere
5 | Operatia de inmultire
6 | Operatia de impartire
7 | Modulul unuia dintre cele 2 numere complexe
0 | Introduceti meniul dorit: 3
Adunarea elementelor :

Z = 5 + 8*i

1 | Citirea numerelor complexe


2 | Afisarea numerelor complexe
3 | Operatia de adunare
4 | Operatia de scadere
5 | Operatia de inmultire
6 | Operatia de impartire
7 | Modulul unuia dintre cele 2 numere complexe
0 | Introduceti meniul dorit: 4
Scaderea elementelor:

Z = 1 + 0*i

1 | Citirea numerelor complexe


2 | Afisarea numerelor complexe
3 | Operatia de adunare
4 | Operatia de scadere
5 | Operatia de inmultire
6 | Operatia de impartire
7 | Modulul unuia dintre cele 2 numere complexe
0 | Introduceti meniul dorit: 5
Inmultirea elementelor:

Z = -10 + 20*i

1 | Citirea numerelor complexe


2 | Afisarea numerelor complexe
3 | Operatia de adunare
4 | Operatia de scadere
5 | Operatia de inmultire
6 | Operatia de impartire
7 | Modulul unuia dintre cele 2 numere complexe
0 | Introduceti meniul dorit: 6
Impartirea elementelor:

Z = 1.1 + (-0.2)*i

1 | Citirea numerelor complexe


2 | Afisarea numerelor complexe
3 | Operatia de adunare
4 | Operatia de scadere
5 | Operatia de inmultire
6 | Operatia de impartire
7 | Modulul unuia dintre cele 2 numere complexe
0 | Introduceti meniul dorit: 7
Modulul elementelor: ;

Selectati numarul complez dorit


1 | Z1
2 | Z2
2
|z2| = 4.47214

Concluzie :

În urma efectuării acestei lucrări de laborator am întărit cunoștințele obținute de la obiectele


precedente (PC și SDA), astfel utilizându-le în limbajul de programare C++.
Astfel noi am creat un program care efectuază calcule cu numere complexe și returnează
rezultatul dorit.

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