Documente Academic
Documente Profesional
Documente Cultură
Catedra FCIM
Raport
Lucrarea de laborator Nr.1
Programarea orientată pe obiecte
Varianta 1
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 :
Structura – este o mulţime de date grupate, conform unei ierarhii, de obicei de tipuri diferite .
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ă.
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.
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.
Atâta timp cât o structură o să aibă un nume și un tip atunci aceasta va putea conține o altă
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)]
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)
{
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
Z = 1 + 0*i
Z = -10 + 20*i
Z = 1.1 + (-0.2)*i
Concluzie :