Ministerul Educaţiei al Republicii Moldova Universitatea Tehnică a Moldovei Catedra Informatica Aplicata
Raport la disciplina „Structuri de date si aloritme! lucrare de laborator "r#$
A efectuat% st# r# SI&$'$
E#Cucu
A verificat% dr#( conf#univ#( conf#un iv#( catedra IA
M# )ulev
Chi*inău +,$'
Tema: Implementarea tipurilor abstracte de date# Tablouri de structuri -n C# Scopul lucrării: .e alcatuit / fi*iere -n limba0ul C pentru emplementarea *i
utili1area tipului abstract de date# Formularea problemei
.e format% $#Un fi*ier cu e2tensia 3#h3 unde se afla descrierea structurii elementelor tabloului *i prototipurile funcţiilor care utili1ea1ă operaţiuni asupra tabloului dat# +#Un fisier cu e2tensia 3#cpp! unde se afla codul funcţiilor declarate -n fi*ierul $# /#Un fi*ier a utili1atorului cu e2tensia #cpp unde se afla funcţia main pentru precesarea ba1ei de date -n forma tabloului de structuri# Tipul abstract de date repre1inta un model matematic al structurii de date studiate si operatiuni asupra datelor# Etapele implementarii T.A in limba0ul C%$#Crearea fisierului cu e2tensia 4#h5 care contine%descrierea proprietatilor S. +#prototipurile functiilor pentru operatiuni asupra datelor /#Crearea fisierului cu e2tensia 4#cpp5 care contine main&ul# Un T.A poate fi conceput ca un model matematic căruia i se asocia1ă o colecţie de operatori specifici# 6om reali1a o paralelă cu conceptul de procedură# 7rocedura enerali1ea1ă noţiunea de operator# 8n loc de a fi limitat la utili1area e2clusivă a operatorilor definiţi -n cadrul limba0ului de proramare 49built&in9 operators5( folosind procedurile( proramatorul este liber să&*i definească proprii săi operatori( pe care ulterior să&i aplice asupra unor operan1i care nu e necesar să aparţină tipurilor de ba1ă 4primitive5 ale limba0ului utili1at# Un e2emplu de procedură utili1ată -n această manieră este spre e2emplu( rutina de -nmulţire a două matrici#7rocedurile -ncapsulea1ă anumite părţi ale unui aloritm prin 9locali1are9 Aceasta -nseamnă plasarea -ntr&o sinură secţiune a proramului a tuturor instrucţiunilor relevante# Textul programului in limbajul „C” Masina.h typedef struct { char marca[40]; char model[40]; char origine[40]; int anu; float pret; }masina; masina* din_realloc(masina *a,int n); masina* intro_auto(char *fname,int *n); masina* intro_manual(masina *a,int *n); oid afisare(masina *a,int *n); oid afis_an(masina *a, int *n,int an); masina* add_car(masina *a,int *n,int nr); masina* add_car_eery!(masina *a,int* n,int "); masina* add_car_prepend(masina* a,int* n); oid del_car(masina *a,int *n,int nd); oid sae(masina *a,int *n,char *fname); oid ord_cr(masina *a,int *n); oid car_m(masina *a,int nm);
Functii.cpp #include $stdio%h& #include $conio%h& #include $stdli'%h& #include $string%h& #include masina%h +-.+/ 12 /+-.+/ 32+52.+ masina* din_realloc(masina *a,int n) { a6(masina*)realloc(a,n*si7eof(masina)); if(8a) { printf(9a9nu sa alocat memorie89n); system(pause); e:it(); } return a; } .22/ <212/ masina* intro_auto(char *fname,int *n) { int i60,m60; masina *a6=; <2 *demo6fopen(fname,r); if(8demo) { printf(9a>; a6din_realloc(a,m); fscanf(demo,?s?s?s?d ?f,@a[i]%marca,@a[i]%model,@a[i]%origine,@a[ i]%anu,@a[i]%pret); i>>; } *n6m; fclose(demo); return a; } 2/-3=./ 5+=++ masina* intro_manual(masina *a,int *n) { int i; printf(2ntrodu numarul de masiniA ); scanf(?d,n); a6din_realloc(a,*n); for(i60;i$*n;i>>) { printf(9n*********************************** *****9n9n); printf(2ntrodu datele masinii ?d9n,i>); printf(5arcaA ); scanf(?s,@a[i]%marca); printf(5odelA ); scanf(?s,@a[i]%model); printf(-rigineaA ); scanf(?s,@a[i]%origine); printf(+nul de productieA ); scanf(?d,@a[i]%anu); printf(Bretul(C)A ); scanf(?f,@a[i]%pret); } return a; } oid afisare(masina *a,int *n) {
int i; system(cls); for(i60;i$*n;i>>){ printf(************************************* ***9n9n); printf(3atele masiniiA ?d9n,i>); printf(5arcaA ?s9n,a[i]%marca); printf(5odelA ?s9n,a[i]%model); printf(-rigineaA ?s9n,a[i]%origine); printf(+nul de productieA ?d9n,a[i]%anu); printf(BretulA ?%Df9n9n,a[i]%pret); } } +fisare dupa anul introdus oid afis_an(masina *a, int *n,int an) { int i,E60; printf(5asini produse in anul A ?d9n9n,an); for(i60;i$*n;i>>){ if(a[i]%anu66an){ printf(************************************* ***9n9n); printf(r% de ordineA ?d9n,i>); printf(5arcaA ?s9n,a[i]%marca); printf(5odelA ?s9n,a[i]%model); printf(-rigineaA ?s9n,a[i]%origine); printf(+nul de productieA ?d9n,a[i]%anu); printf(BretulA ?%Df9n9n,a[i]%pret); E>>; } } if(E660) { system(cls); printf(u sFau gasit nici o masina din anul ?d9n9n,an); } } masina* add_car(masina *a,int *n,int nr) { int i; a6din_realloc(a,*n>nr); for(i6*n;i$*n>nr;i>>) { printf(9n*********************************** *****9n9n); printf(3atele masinii ?d9n,i>); printf(5arcaA ); scanf(?s,@a[i]%marca); printf(5odelA ); scanf(?s,@a[i]%model); printf(-rigineaA ); scanf(?s,@a[i]%origine); printf(+nul de productieA ); scanf(?d,@a[i]%anu); printf(BretulA ); scanf(?f,@a[i]%pret);
} *n6*n>nr; } masina* add_car_eery!(masina *a, int *n ,int ") { int i; masina p; a6din_realloc(a,*n>); printf(9n*********************************** *****9n9n); printf(3atele masinii ?d9n,"); printf(5arcaA ); scanf(?s,@p%marca); printf(5odelA ); scanf(?s,@p%model); printf(-rigineaA ); scanf(?s,@p%origine); printf(+nul de productieA ); scanf(?d,@p%anu); printf(BretulA ); scanf(?f,@p%pret); for (i6"F; i$*n; i>>) { a[i>]6a[i]; } a["F]6p; *n6*n>; } masina* add_car_prepend(masina *a, int *n) { int i; int "6; masina p; a6din_realloc(a,*n>); printf(9n*********************************** *****9n9n); printf(3atele masinii ?d9n,"); printf(5arcaA ); scanf(?s,@p%marca); printf(5odelA ); scanf(?s,@p%model); printf(-rigineaA ); scanf(?s,@p%origine); printf(+nul de productieA ); scanf(?d,@p%anu); printf(BretulA ); scanf(?f,@p%pret); for (i6"F; i$*n; i>>) { a[i>]6a[i]; } a[0]6p; *n6*n>; } functia pentru stergere oid del_car(masina *a,int *n,int nd) { int i; *n6*nF; if(*n&0) { for(i6ndF;i$*n;i>>) a[i]6a[i>]; } else { system(cls); printf(9nu mai sunt masini89a9n); }
a6din_realloc(a,*n); } functia de salare oid sae(masina *a,int *n,char *fname) { int i; <2 *demo6fopen(fname,!t); for(i60;i$*n;i>>) { fprintf(demo,9n?s ?s ?s ?d ?%Df,a[i]%marca,a[i]%model,a[i]%origine,a[i] %anu,a[i]%pret); } fclose(demo); } afisarea studentilor in ordine descrescatoare dupa medie oid ord_cr(masina *a,int *n) { int i,E,p; float ma:; masina t; for(i60;i$*n;i>>) { ma:6a[i]%pret; p6i; for(E6i;E$*n;E>>) { if(ma:$a[E]%pret) { ma:6a[E]%pret; p6E; } } t6a[i]; a[i]6a[p]; a[p]6t; } afisare(a,n); } modificarea datelor oid car_m(masina *a,int nm) { printf(r% de ordineA ?d9n,nm); printf(5arcaA ?s9n,a[nmF]%marca); printf(5odelA ?s9n,a[nmF]%model); printf(-rigineaA ?s9n,a[nmF]%origine); printf(+nul de productieA ?d9n,a[nmF]%anu); printf(BretulA ?%Df9n9n,a[nmF]%pret); printf(************************************* ***9n9n); printf(3atele masinii pentru modificareA9n); printf(5arcaA ); scanf(?s,@a[nmF]%marca); printf(5odelA ); scanf(?s,@a[nmF]%model); printf(-rigineaA ); scanf(?s,@a[nmF]%origine); printf(+nul de productieA ); scanf(?d,@a[nmF]%anu); printf(BretulA ); scanf(?f,@a[nmF]%pret); }
Main.cpp #include functii%c int main() { masina *a6=; int n60,an,nr,nd,nm; int com,com0,com,comD,comG,commenu,m,l,"; char fname[D0],fil_name[0]; !hile() { !hile(m) { m60; system(cls); printf(+legeti tipul de introducere a datelor9n); printf(9n[] 5anual9n[D]
printf(9n9n.omandaA); scanf(?d,@commenu); s!itch(commenu) { case 0A system(cls); printf(9n [] 5eniu precedent%); printf(9n [D] 2esire%9n); printf(9n9n .omandaA); scanf(?d,@com0); s!itch(com0) { case A if(a) free(a); m6; 'rea"; case DA if(a) free(a); e:it(0); 'rea"; defaultA system(cls); printf(9a+ti introdus o comanda gresita89n); l6; system(pause); 'rea"; } 'rea"; case A system(cls); printf(9n [] ista cu masini%); printf(9n [D] ista cu masini din anul dorit%); printf(9n [G] ista in ordine descrescatoare dupa pret%); printf(9n9n .omandaA); scanf(?d,@com); s!itch(com) { case A system(cls); afisare(a,@n); l6; system(pause); 'rea"; case DA system(cls); printf(2ntroduceti anul doritA ); scanf(?d,@an); if(an&6JK4 @@ an$6D0L) { system(cls); afis_an(a,@n,an); } else {
system(cls); printf(+nul introdus nu este corect89a9n); } l6; system(pause); 'rea"; case GA system(cls); printf(ista in ordine descrescatoare dupa pretA 9n); ord_cr(a,@n); l6; system(pause); intro_auto(fname,@n);dupa afisare in ordine desc% lista deine la starea initiala 'rea"; defaultA system(cls); printf(9a+ti introdus o comanda gresita89n); l6; system(pause); 'rea"; } 'rea"; case DA system(cls); printf(9n [] +dauga masini noi la sfirsit de lista%); printf(9n [D] +dauga masina noua la inceput de lista%); printf(9n [G] +dauga masina noua la locul dorit in lista%); printf(9n [4] 1terge din lista de masini%); printf(9n [L] 5odifica datele masinii%); printf(9n9n .omandaA); scanf(?d,@comD); s!itch(comD) { case A system(cls); printf(2ntrodu numarul de masini pentru adaugareA ); scanf(?d,@nr); add_car(a,@n,nr); l6; system(cls); printf(+daugarea a aut loc cu succes89a9n); system(pause); 'rea"; case DA system(cls); add_car_prepend(a,@n); l6; system(cls); printf(+daugarea a aut loc cu succes89a9n); system(pause); 'rea"; case GA system(cls); printf(2ntrodu locul pentru adaugare a masiniiA ); scanf(?d,@"); add_car_eery!(a,@n,"); l6; system(cls); printf(+daugarea a aut loc cu succes89a9n);
system(pause); 'rea"; case 4A system(cls); afisare(a,@n); printf(2ntrodu numarul de ordine a masinii pentru stergereA ); scanf(?d,@nd); system(cls); del_car(a,@n,nd); system(cls); printf(5asina cu numarul de ordine ?d a fost eliminata cu succes9n,nd); l6; system(pause); 'rea"; case LA system(cls); afisare(a,@n); printf(2ntrodu numarul de ordine a masiniiA ); scanf(?d,@nm); system(cls); if(nm$6n @@ nm&6) { car_m(a,nm); din_realloc(a,nm); } else printf(9nu e:ista masina cu asa numar de ordine9a9n); l6; system(cls); printf(5odificarea a aut loc cu succes89a9n); system(pause); 'rea"; defaultA system(cls); printf(9a+ti introdus o comanda gresita89n); l6; system(pause); 'rea"; } 'rea"; case GA system(cls); printf(9n [] 1alea7a schim'arile in fisier%); printf(9n [D] 1tarea initiala a datelor%); printf(9n9n .omandaA); scanf(?d,@comG); s!itch(comG) { case A system(cls); printf(2ntrodu numele fisierului pentru salareA ); scanf(?s,@fname); strcat(fname,%t:t); sae(a,@n,fname); printf(9n1alare a aut loc cu succes89a9n9n); l6; system(pause); 'rea"; case DA system(cls); if(a) free(a);
intro_auto(fname,@n); printf(/einoirea datelor sa efectuat cu succes89n); l6; system(pause); 'rea"; defaultA system(cls); printf(9a+ti introdus o comanda gresita89n); l6; system(pause); 'rea";
} 'rea"; defaultA system(cls); printf(9a+ti introdus o comanda gresita89n); l6; system(pause); 'rea"; };end of s!itch commenu% }end of infinite cicle return 0; }end main%
Descrierea functiilorparametri!aloarea returnabila.
masina* din_realloc(masina *a,int n); {return a;} • •
•
Destinatia%alocarea dinamica a tabloului unidimensional de structuri# Parametri %a4pointer la structura(tablou unidimensional de structura5
n4variabila de tip int(numarul de elemente din tabloul de structuri5 Valoarea returnabila:a4tablou unidimensional de structuri5
masina* intro_auto(char *fname,int *n); {return a;} • •
•
Destinatia%introducerea datelor din fisier# Parametri %fname4pointer la char(denumirea fisierului5
n4pointer la int(numarul de elemente5 Valoarea returnabila:a4tablou unidimensional de structuri5
masina* intro_manual(masina *a,int *n); {return a;} • •
•
Destinatia%introducerea datelor manual in tablou unidimensional de structura# Parametri %a4pointer la strucura(tablou unidimensional de structura5
n4pointer la int(numarul de elemente din tablou5 Valoarea returnabila:a4tablou unidimensional de structuri5
void afisare(masina *a,int *n); • •
Destinatia%Afisarea datelor# Parametri %a4pointer la strucura(tablou unidimensional de
structura5 n4pointer la int(numarul de elemente din tablou5
void afis_an(masina *a, int *n,int an);
• •
Destinatia%Afisarea datelor dupa un cimp al structurii4an5# Parametri %a4pointer la strucura(tablou unidimensional de structura5
n4pointer la int(numarul de elemente din tablou5 an4variabila de tip int(anul cautata5 masina* add_car(masina *a,int *n,int nr); • •
Destinatia%Adauarea elementelor noi la sfirsit in tabloul unidimensinal de structuri# Parametri %a4pointer la strucura(tablou unidimensional de structura5
n4pointer la int(numarul de elemente din tablou5 nr4variabila de tip int(numarul de elemente pentru adauare5 masina* add_car_everyw(masina *a,int* n,int ); •
Destinatia%Adauarea
unui noi elementent la locul dorit in tabloul unidimensional de
structuri# •
Parametri %a4pointer la
strucura(tablou unidimensional de structura5 n4pointer la int(numarul de elemente din tablou5 :4variabila de tip int(indicile pentru plasrea elementului5
masina* add_car_!re!end(masina* a,int* n); • •
Destinatia%Adauarea elementului noi la inceputul tabloului de structuri# Parametri %a4pointer la strucura(tablou unidimensional de structura5
n4pointer la int(numarul de elemente din tablou5 void del_car(masina *a,int *n,int nd); • •
Destinatia%Stererea elementului dorit din tabloul de structuri# Parametri %a4pointer la strucura(tablou unidimensional de structura5
n4pointer la int(numarul de elemente din tablou5 nd4variabila de tip int(indicile elementului dorit pentru sterere5 void save(masina *a,int *n,char *fname); • •
Destinatia%Salvarea datelor in fisier# Parametri %a4pointer la strucura(tablou unidimensional de
structura5 n4pointer la int(numarul de elemente din tablou5 fname4pointer la char(denumirea fisierului pentru salvare5
void ord_cr(masina *a,int *n); •
Destinatia%Sortarea
si afisarea tabloului de structuri in ordine descrescatoare dupa un
•
anumit cimp4pret5# Parametri % a4pointer la strucura(tablou unidimensional de structura5 n4pointer la int(numarul de elemente din tablou5
!oi" car#m$masina %aint nm&' • •
Destinatia%alocarea dinamica a tabloului unidimensional de structuri# Parametri % a4pointer la strucura(tablou unidimensional de structura5
nm4variabila de tip int(indicile elemtentului pentru modificare5
(e)ultatele obtinute.
Introducere#
Meniu principal#
Afisare meniu#
Afisare tablou#
Meniu modificare#
Conclu)ii: 8n urma efectuării acestei lucrari de laborator am consolidat
cunostintele acumulate -n urma studierii materialelor la tema 3Structuri de date si aloritm! # ;# # +# Conspectul preleirilor cursului 7roramarea Calculatoarelor# =ector dr#(conf# univ# M#)ulev# Chi șinău% UTM( +,$'#