Sunteți pe pagina 1din 6

LUCRARE DE LABORATOR NR.

1 LA DISCIPLINA PROGRAMAREA N LIMBAJUL C++ Tema: Structura mecanism de abstractizare Scopul lucrrii: Studierea programrii prin abstractizarea datelor; Studierea regulilor de definire i utilizare a structurilor de date; Crearea variabilelor de tip structur, accesarea componentelor unei structuri. Noiuni de baz Structura este o mulime de date grupate, conform unei ierarhii, de obicei de tipuri diferite. Structura poate fi comparat cu tabloul, ns tabloul conine date de un acelai tip, iar elementele tabloului se acceseaz cu ajutorul indicilor, pe cnd accesarea componentelor structurii are o form specific. Structura reprezint un tip abstract de date, un tip definit de utilizator prin utilizarea tipurilor deja existente. La stabilirea i implementarea conceptelor necesare rezolvrii unei probleme se realizeaz un proces de abstractizare care privete reprezentarea datelor i prelucrarea acestora. Aceasta justific termenul de programare prin abstractizarea datelor. Fie definiia de structur:
struct Book{ // definirea elementelor structurii char *author; char *title; int year; int pages; };

naintea cuvntului cheie struct uneori se adaug cuvntul cheie typedef. ns aceast sintax este proprie limbajului C, i nu C++. Elementele structurii pot fi de tip predefinit sau definit de utilizator, excepie fiind tipul structurii date. Pentru definirea variabilelor este suficient utilizarea numelui de structur la fel ca tipurile predefinite:
Book b1, b2, bs[10], *bptr;

n acest caz s-au definit dou variabile de tip carte, un tablou din 10 cri i un pointer spre carte. Referirea la componentele unei structuri se face utiliznd att numele structurii ct i a componentei respective. Aceasta se realizeaz printr-o construcie de forma:
b1.pages = 153; bs[i].pages = 24;

n cazul pointerilor:
bptr = new Book; bptr->pages = 176; // alocarea memoriei pentru o variabil nou

Dac structura conine componente de tip compus, referirea elementelor este urmtoarea:
Circle1.Center.x = 20; Circle1.Center.y = 10;

Fie definiia de structur:


struct Date{ int day, month, year; }; struct Student{ char *name; Date birthDay; float media; };

La definirea tipului de strutur este bine de a preciza funciile care definesc operaii cu datele de tipul structurii. n acest scop variabilele se transmit funciilor prin parametri. Pentru modificarea variabilei ea se transmite prin referin.
void setValues(Student* sptr, char* newN,float newM,Date d) { sptr->name = new char[strlen(newN)+1]; strcpy(sptr->name,newN); sptr->media = newM; sptr->birthDay = d; }

Funcia de mai sus are un neajuns legat de alocarea memoriei. Deoarece funcia este obinuit, ea poate fi apelat de cteva ori, ceea ce poate duce la pierderi de memorie. Pentru soluionarea acestei probleme, mai nti trebuie dezalocat memoria iniial (sau s se nregistreze posibilitatea unui singur apel al funciei, ceea ce se reflect n denumirea funciei).
void setValues(Student* sptr, char* newN,float newM,Date d) { delete[] sptr->name; sptr->name = new char[strlen(newN)+1]; ... }

Dar i aceast soluie are neajunsurile sale, posibil mai grave dect n primul caz. Pericolul const n ncercarea de a elimina memoria nealocat la primul apel al funciei. Pot fi cteva soluii. Una const n utilizarea unui parametru suplimentar, fie cu valoare implicit, care indic dac funcia se apeleaz pentru prima dat(pentru obiectul dat) sau nu. Aceast variant nu este tocmai reuit, este necesar de a urmri succesiunea apelurilor, sarcin realizat de ctre programator, n al doilea rnd, funcia trebuie s conin o condiie ceea ce ncetinete ndeplinirea funciei. Alt soluie ar fi n setarea valorii iniiale a pointerului. n acest scop, dup crearea obiectului, componentelor pointer li se atribuie valoarea NULL;
Book b; b.author = NULL; setAuthor(&b, Arthur Conan Doyle);

Pentru finisarea exemplului, este necesar de a elibera memoria alocat iniial. Pentru aceasta se creeaz nc o funcie:
void freeMem(Book* bp){

delete[] bp->author; bp->author = NULL; ... // analogic pentru restul componentelor pointer

NULL i se atribuie pointerului pentru asigurarea unei utilizri repetate reuite a variabilei. ntrebri de control:
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

Definii noiunea tip abstract de date. Cum se definete o structur? Prin ce se deosebete structura de alte tipuri de date? Cum se definete o variabil de tip structur? Cnd se utilizeaz punctul, cnd - sgeata? Care sunt deosebirile ntre structura din limbajul C i C++? O structur poate oare s conin alt structur? O structur poate oare s conin pointer spre ea nsi? Poate oare s fie creat dinamic o variabil de tip structur? Explicai cum are loc apelul prin referin.

Sarcina Varianta 1 ) S se creeze; utiliznd structura, tipul abstract de date pentru reprezentarea numerelor complexe. S se defineasc funciile de setare/citire a prii reale i imaginare a unui numr complex; de adunare, scdere, nmulire, mprire i de comparaie( mai mic, mai mare, etc.) a dou numere complexe. S se defineasc funcia ce calculeaz i returneaz modulul unui numr complex. S se defineasc toate funciile ca fiind globale. b) S se creeze tipul abstract de date (structura) vector, care se compune dintr-un pointer spre int i din numrul de elemente. S se defineasc funciile de iniializare, de eliminare a unui vector; de setare/ modificare a dimensiunii vectorului; de acces la elementele vectorului; de calcul a modulului unui vector. n funcia main s se realizeze adunarea a doi vectori. Varianta 2 ) S se creeze tipul abstract de date (structura) cine, care se compune din ras, nume i vrst. S se defineasc funciile de setare i modificare a datelor i de eliberare a memoriei alocate. Pentru iniializarea componentelor textuale s se utilizeze operatorul de alocare dinamic a memoriei new. S se defineasc funcia pentru sortarea tabloului de tip cine conform vrstei i numelui. Adic cinii de aceeai vrst se sorteaz n ordine alfabetic. b) S se creeze tipul abstract de date (structura) vector, care se compune dintr-un pointer spre float i din numrul de elemente. S se defineasc funciile: de iniializare, de eliminare a unui vector; de setare/ modificare a dimensiunii vectorului; de acces la elementele vectorului; de calcul a sumei elementelor unui vector. n funcia main s se exemplifice nmulirea a doi vectori. Varianta 3 ) S se creeze tipul abstract de date (structura) computer, care se compune din informaia despre firma productoare, procesor, frecvena de tact, etc. s se defineasc funciile de setare a datelor, de modificare a informaiei, de comparaie. Pentru iniializarea componentelor textuale s se utilizeze operatorul de alocare dinamic a memoriei new. S se elibereze memoria alocat. n funcia main s se exemplifice sortarea tabloului de tip calculator dup cmpurile frecvena de tact + procesor. b) S se creeze tipul abstract de date (structura) vector, care se compune dintr-un pointer spre double i din numrul de elemente. S se defineasc funciile: de iniializare, de eliminare a unui vector; de setare/ modificare a dimensiunii vectorului; de acces la elementele vectorului; de calcul a sumei elementelor pozitive ale unui vector. n funcia main s se exemplifice nmulirea unui vector cu un numr. Varianta 4 ) S se creeze tipul abstract de date (structura) ara, care are denumire, continentul pe care se afl i numrul de locuitori. S se defineasc funciile de setare a denumirii rii i a numrului de populaie, de modificare a datelor, de comparare a rilor i de eliberare a memoriei. S se utilizeze operatorul new pentru setarea denumirii rii. n main s se exemplifice cutarea rilor dup denumire i populaie. b) S se creeze tipul abstract de date (structura) vector, care are pointer spre int i numrul de elemente. S se defineasc funciile de iniializare, de eliminare a vectorului, de setare/modificare a dimensiunii, de acces la elementele vectorului, de calcul a mediei elementelor pozitive ale vectorului. Ca exemplu, n funcia main s se realizeze compararea a doi vectori.

Varianta 5 ) S se creeze tipul abstract de date (structura) colaborator, care are nume, specialitate, categorie i salariu. S se defineasc funciile de setare, modificare a datelor i de comparare a colaboratorilor. Pentru crearea cmpurilor textuale s se utilizeze operatorul new. S se elibereze memoria. n main s se exemplifice sortarea colaboratorilor dup diverse criterii. b) S se creeze tipul abstract de date (structura) vector, care are pointer spre long i numrul de elemente. S se defineasc funciile de iniializare, de eliminare a vectorului, de setare/modificare a dimensiunii, de acces la elementele vectorului, de calcul a sumei elementelor negative ale vectorului. Ca exemplu, n funcia main s se realizeze adunarea a doi vectori. Varianta 6 ) S se creeze tipul abstract de date (structura) cas, care are denumirea firmei de construcie, adresa, numrul etajelor i al apartamentelor. S se defineasc funciile de setare, de modificare a datelor, de comparare a caselor. Pentru crearea cmpurilor textuale s se utilizeze operatorul new. S se elibereze memoria. n main s se exemplifice sortarea caselor dup numrul de etaje+adresa n ordine alfabetic. b) S se creeze tipul abstract de date (structura) vector, care are pointer spre float i numrul de elemente. S se defineasc funciile de iniializare, de eliminare a vectorului, de setare/modificare a dimensiunii, de acces la elementele vectorului, de calcul a normei vectorului. Ca exemplu, n funcia main, s se realizeze adunarea elementelor vectorului cu un numr. Varianta 7 ) S se creeze tipul abstract de date (structura) monitor, care are denumirea firmei productoare, dimensiunea n inch, numrul de culori i rezoluie. S se defineasc funciile de setare, de modificare a datelor, de comparare a monitoarelor. Pentru crearea cmpurilor textuale s se utilizeze operatorul new. S se elibereze memoria. n main s se exemplifice cutarea monitorului potrivit dup dimensiune i alte caracteristici. b) S se creeze tipul abstract de date (structura) vector, care are pointer spre char i numrul de elemente. S se defineasc funciile de iniializare, de eliminare a vectorului, de setare/modificare a dimensiunii, de acces la elementele vectorului, de calcul a produsului elementelor negative ale vectorului. Ca exemplu, n funcia main, s se realizeze nmulirea a doi vectori. Varianta 8 ) S se creeze tipul abstract de date (structura) carte, care are denumire, autor, editura, volumul de pagini i anul ediiei. S se defineasc funciile de setare, de modificare a datelor, de comparare. Pentru crearea cmpurilor textuale s se utilizeze operatorul new. S se elibereze memoria. n main s se exemplifice cutarea crii necesare dup denumire i dup autor. b) S se creeze tipul abstract de date (structura) vector, care are pointer spre short i numrul de elemente. S se defineasc funciile de iniializare, de eliminare a vectorului, de setare/modificare a dimensiunii, de acces la elementele vectorului, de calcul a sumei elementelor pare ale vectorului. Ca exemplu, n funcia main, s se realizeze compararea a doi vectori.

Varianta 9 ) S se creeze tipul abstract de date (structura) student, care are nume, specialitate, anul de studii i balul mediu. S se defineasc funciile de setare, de modificare a datelor, de comparare. Pentru crearea cmpurilor textuale s se utilizeze operatorul new. S se elibereze memoria. n main s se exemplifice sortarea studenilor dup specialitate+reuit. b) S se creeze tipul abstract de date (structura) vector, care are pointer spre long i numrul de elemente. S se defineasc funciile de iniializare, de eliminare a vectorului, de setare/modificare a dimensiunii, de acces la elementele vectorului, de calcul a sumei elementelor pare ale vectorului. Ca exemplu, n funcia main, s se realizeze cutarea poziiei elementului maximal al vectorului. Varianta 10 ) S se creeze tipul abstract de date (structura) produs soft (software), care are denumire, firma de producere, anul editrii i versiunea. S se defineasc funciile de setare, de modificare a datelor, de comparare. Pentru crearea cmpurilor textuale s se utilizeze operatorul new. S se elibereze memoria. n main s se exemplifice cutarea produsului necesar dup cteva criterii. b) S se creeze tipul abstract de date (structura) vector, care are pointer spre double i numrul de elemente. S se defineasc funciile de iniializare, de eliminare a vectorului, de setare/modificare a dimensiunii, de acces la elementele vectorului, de calcul a sumei elementelor pare ale vectorului. Ca exemplu, n funcia main, s se realizeze adunarea unui vector cu un numr. Varianta 11 ) S se creeze tipul abstract de date (structura) firma, care are denumire, forma de organizare, adresa i anul fondrii. S se defineasc funciile de setare, de modificare a datelor, de comparare. Pentru crearea cmpurilor textuale s se utilizeze operatorul new. S se elibereze memoria. n main s se exemplifice cutarea dup cteva criterii a firmei necesare. b) S se creeze tipul abstract de date (structura) vector, care are pointer spre int i numrul de elemente. S se defineasc funciile de iniializare, de eliminare a vectorului, de setare/modificare a dimensiunii, de acces la elementele vectorului, de calcul a sumei elementelor pare ale vectorului. Ca exemplu, n funcia main, s se realizeze adunarea a doi vectori. Varianta 12 ) S se creeze tipul abstract de date (structura) fiier, care are denumire, data i timpul crerii i dimensiunea. S se defineasc funciile de setare, de modificare a datelor, de comparare. Pentru crearea cmpurilor textuale s se utilizeze operatorul new. S se elibereze memoria. n main s se exemplifice sortarea fiierelor dup cteva criterii. b) S se creeze tipul abstract de date (structura) vector, care are pointer spre float i numrul de elemente. S se defineasc funciile de iniializare, de eliminare a vectorului, de setare/modificare a dimensiunii, de acces la elementele vectorului, de calcul a sumei elementelor pare ale vectorului. Ca exemplu, n funcia main, s se realizeze cutarea poziiei elementului minimal al vectorului.