Sunteți pe pagina 1din 13

Ministerul Educaţiei ,Culturii si Cercetarii al Republicii Moldova

Universitatea Tehnica a Moldovei

Departamentul Informatica si Ingineria Sistemelor

RAPORT
Lucrare de laborator Nr.1
la Structuri de date si algoritmi

A efectuat:
st. gr. AI-181 A.Ciumac

A verificat:
S. Botnaru
Tema: Implementarea tipurilor abstracte de date. Tablouri de structuri în C.
Scopul lucrării: De alcatuit 3 fişiere în limbajul C pentru emplementarea şi
utilizarea tipului abstract de date.

Formularea problemei
De format:
1.Un fişier cu extensia “.h“ unde se afla descrierea structurii elementelor tabloului
şi prototipurile funcţiilor care utilizează operaţiuni asupra tabloului dat.
2.Un fisier cu extensia “.cpp” unde se afla codul funcţiilor declarate în fişierul 1.
3.Un fişier a utilizatorului cu extensia .cpp unde se afla funcţia main pentru
precesarea bazei de date în forma tabloului de structuri.

Tipul abstract de date reprezinta un model matematic al structurii de date studiate si operatiuni
asupra datelor. Etapele implementarii TDA in limbajul C:
1.Crearea fisierului cu extensia (.h) care contine:descrierea proprietatilor SD
2.prototipurile functiilor pentru operatiuni asupra datelor
3.Crearea fisierului cu extensia (.cpp) care contine main-ul.
Un TDA poate fi conceput ca un model matematic căruia i se asociază o colecţie de operatori
specifici. Vom realiza o paralelă cu conceptul de procedură. Procedura generalizează noţiunea de
operator. În loc de a fi limitat la utilizarea exclusivă a operatorilor definiţi în cadrul
limbajului de programare ("built-in" operators), folosind procedurile, programatorul este
liber să-şi definească proprii săi operatori, pe care ulterior să-i aplice asupra unor
operanzi care nu e necesar să aparţină tipurilor de bază (primitive) ale limbajului utilizat. Un
exemplu de procedură utilizată în această manieră este spre exemplu, rutina de înmulţire a
două matrici.Procedurile încapsulează anumite părţi ale unui algoritm prin "localizare" Aceasta
înseamnă plasarea într-o singură secţiune a programului a tuturor instrucţiunilor relevante.

Textul programului in limbajul „C”

automobil.h
typedef struct
{
char marca[40];
char model[40];
char origine[40];
int anu;
float pret;
}automobil;

automobil* din_realloc(automobil*a,int n);


automobil* intro_auto(char *fname,int *n);
automobil* intro_manual(automobil*a,int *n);
void afisare(automobil*a,int *n);
void afis_an(automobil*a, int *n,int an);
automobil * add_car(automobil*a,int *n,int nr);
automobil * add_car_everyw(automobil*a,int* n,int k);
automobil * add_car_prepend(automobil*a,int* n);
void del_car(automobil*a,int *n,int nd);
void save(automobil*a,int *n,char *fname);
void ord_cr(automobil*a,int *n);
void car_m(automobil*a,int nm);
Functii.cpp
#include <stdio.h> printf("Datele automobilului:
#include <conio.h> %d\n",i+1);
#include <stdlib.h> printf("Marca:
#include <string.h> %s\n",a[i].marca);
#include "automobil.h" printf("Model:
%s\n",a[i].model);
//ALOCARE SI REALOCARE DINAMICA printf("Originea:
automobil* din_realloc(automobil*a,int n) %s\n",a[i].origine);
{ printf("Anul de productie:
a=(automobil*)realloc(a,n*sizeof(automobil)); %d\n",a[i].anu);
if(!a) printf("Pretul:
{ %.2f\n\n",a[i].pret);
printf("\a\nNu sa alocat memorie!\n"); }
system("pause"); }
exit(1); //Afisare dupa anul introdus
} void afis_an(automobil*a, int *n,int an)
return a; {
} int i,j=0;
//CITIRE FISIER printf("Masini produse in anul :
automobil * intro_auto(char *fname,int *n) %d\n\n",an);
{ for(i=0;i<*n;i++){
int i=0,m=0; if(a[i].anu==an){
automobil*a=NULL; printf("*************************************
FILE *demo=fopen(fname,"r"); ***\n\n");
if(!demo) printf("Nr. de ordine:
{ %d\n",i+1);
printf("\aFisierul nu exista!\n"); printf("Marca:
} %s\n",a[i].marca);
while(!feof(demo)) printf("Model:
{ %s\n",a[i].model);
m++; printf("Originea:
a=din_realloc(a,m); %s\n",a[i].origine);
fscanf(demo,"%s%s%s%d printf("Anul de productie:
%f",&a[i].marca,&a[i].model,&a[i].origine,&a[ %d\n",a[i].anu);
i].anu,&a[i].pret); printf("Pretul:
i++; %.2f\n\n",a[i].pret);
} j++;
*n=m; }
fclose(demo); }
return a; if(j==0)
} {
system("cls");
//INTRODUCERE MANUALA printf("Nu s-au gasit nici un automobil din
automobil* intro_manual(automobil*a,int *n) anul %d\n\n",an);
{ }
int i; }
printf("Introdu numarul de automobili: "); automobil* add_car(automobil*a,int *n,int nr)
scanf("%d",n); {
a=din_realloc(a,*n); int i;
for(i=0;i<*n;i++) a=din_realloc(a,*n+nr);
{ for(i=*n;i<*n+nr;i++)
printf("\n*********************************** {
*****\n\n"); printf("\n***********************************
printf("Introdu datele automobilului *****\n\n");
%d\n",i+1); printf("Datele automobilului %d\n",i+1);
printf("Marca: "); printf("Marca: ");
scanf("%s",&a[i].marca); scanf("%s",&a[i].marca);
printf("Model: "); printf("Model: ");
scanf("%s",&a[i].model); scanf("%s",&a[i].model);
printf("Originea: "); printf("Originea: ");
scanf("%s",&a[i].origine); scanf("%s",&a[i].origine);
printf("Anul de productie: "); printf("Anul de productie: ");
scanf("%d",&a[i].anu); scanf("%d",&a[i].anu);
printf("Pretul($): "); printf("Pretul: ");
scanf("%f",&a[i].pret); scanf("%f",&a[i].pret);
} }
return a; *n=*n+nr;
} }
void afisare(automobil *a,int *n) automobil* add_car_everyw(automobil*a, int *n
{ ,int k)
int i; {
system("cls"); int i;
for(i=0;i<*n;i++){ automobil p;
printf("************************************* a=din_realloc(a,*n+1);
***\n\n");
printf("\n*********************************** void save(automobil *a,int *n,char *fname)
*****\n\n"); {
printf("Datele automobilului %d\n",k); int i;
printf("Marca: "); FILE *demo=fopen(fname,"wt");
scanf("%s",&p.marca); for(i=0;i<*n;i++)
printf("Model: "); {
scanf("%s",&p.model); fprintf(demo,"\n%s %s %s %d
printf("Originea: "); %.2f",a[i].marca,a[i].model,a[i].origine,a[i]
scanf("%s",&p.origine); .anu,a[i].pret);
printf("Anul de productie: "); }
scanf("%d",&p.anu); fclose(demo);
printf("Pretul: "); }
scanf("%f",&p.pret); void ord_cr(automobil *a,int *n)
for (i=k-1; i<*n; i++) {
{ int i,j,p;
a[i+1]=a[i]; float max;
} automobil t;
a[k-1]=p; for(i=0;i<*n;i++)
*n=*n+1; {
} max=a[i].pret;
p=i;
automobil* add_car_prepend(automobil*a, int for(j=i;j<*n;j++)
*n) {
{ if(max<a[j].pret)
int i; {
int k=1; max=a[j].pret;
automobil p; p=j;
a=din_realloc(a,*n+1); }
printf("\n*********************************** }
*****\n\n"); t=a[i];
printf("Datele automobilului %d\n",k); a[i]=a[p];
printf("Marca: "); a[p]=t;
scanf("%s",&p.marca); }
printf("Model: "); afisare(a,n);
scanf("%s",&p.model); }
printf("Originea: "); //modificarea datelor
scanf("%s",&p.origine); void car_m(automobil *a,int nm)
printf("Anul de productie: "); {
scanf("%d",&p.anu); printf("Nr. de ordine:
printf("Pretul: "); %d\n",nm);
scanf("%f",&p.pret); printf("Marca:
for (i=k-1; i<*n; i++) %s\n",a[nm-1].marca);
{ printf("Model:
a[i+1]=a[i]; %s\n",a[nm-1].model);
} printf("Originea:
a[0]=p; %s\n",a[nm-1].origine);
*n=*n+1; printf("Anul de productie:
} %d\n",a[nm-1].anu);
//functia pentru stergere printf("Pretul:
void del_car(automobil *a,int *n,int nd) %.2f\n\n",a[nm-1].pret);
{ printf("*************************************
int i; ***\n\n");
*n=*n-1; printf("Datele automobilului pentru
if(*n>0) modificare:\n");
{ printf("Marca: ");
for(i=nd-1;i<*n;i++) scanf("%s",&a[nm-1].marca);
a[i]=a[i+1]; printf("Model: ");
} scanf("%s",&a[nm-1].model);
else printf("Originea: ");
{ scanf("%s",&a[nm-1].origine);
system("cls"); printf("Anul de productie: ");
printf("\nNu mai sunt automobile!\a\n"); scanf("%d",&a[nm-1].anu);
} printf("Pretul: ");
a=din_realloc(a,*n); scanf("%f",&a[nm-1].pret);
} }
//functia de salvare
Main.cpp
#include "1functii.c" break;
int main() case 2:
{ if(a)
automobil *a=NULL; free(a);
int n=0,an,nr,nd,nm; exit(0);
int com,com0,com1,com2,com3,commenu,m,l,k; break;
char fname[20],fil_name[10]; default:
system("cls");
while(1) printf("\aAti introdus o comanda
{ gresita!\n");
while(m) l=1;
{ system("pause");
m=0; break;
system("cls"); }
printf("Alegeti tipul de introducere a break;
datelor\n"); case 1:
printf("\n[1] Manual\n[2] Fisier\n\n[0] system("cls");
Iesire\n\nComanda:"); printf("\n [1] Lista cu automobile.");
scanf("%d",&com); printf("\n [2] Lista cu automobile din anul
switch(com) dorit.");
{ printf("\n [3] Lista in ordine
case 0: descrescatoare dupa pret.");
if(a) printf("\n\n Comanda:");
free(a); scanf("%d",&com1);
exit(0); switch(com1)
break; {
case 1: case 1:
system("cls"); system("cls");
a=intro_manual(a,&n); afisare(a,&n);
printf("Introducerea datelor a avut loc cu l=1;
succes!\a"); system("pause");
break; break;
case 2: case 2:
system("cls"); system("cls");
printf("Introdu numele fisierului pentru printf("Introduceti anul dorit: ");
citire:\n"); scanf("%d",&an);
scanf("%s",&fname); if(an>=1984 && an<=2015)
strcat(fname,".txt"); {
a=intro_auto(fname,&n); system("cls");
system("cls"); afis_an(a,&n,an);
printf("Citirea din fisier a avut loc cu }
succes!\a\n"); else
system("pause"); {
break; system("cls");
default: printf("Anul introdus nu este corect!\a\n");
system("cls"); }
printf("\aAti introdus o comanda l=1;
gresita!\n"); system("pause");
m=1; break;
system("pause"); case 3:
break; system("cls");
} printf("Lista in ordine descrescatoare dupa
} pret: \n");
system("cls"); ord_cr(a,&n);
printf(" LISTA MENIURI\n"); l=1;
printf("\n\n [1] AFISARE.\n"); system("pause");
printf(" [2] MODIFICARE\n"); intro_auto(fname,&n);//dupa afisare in ordine
printf(" [3] SALVARE SI RESTAURARE\n"); desc. lista devine la starea initiala
printf(" [0] NAVIGARE\n"); break;
printf("\n\nComanda:"); default:
scanf("%d",&commenu); system("cls");
switch(commenu) printf("\aAti introdus o comanda
{ gresita!\n");
case 0: l=1;
system("cls"); system("pause");
printf("\n [1] Meniu precedent."); break;
printf("\n [2] Iesire.\n"); }
printf("\n\n Comanda:"); break;
scanf("%d",&com0); case 2:
switch(com0) system("cls");
{ printf("\n [1] Adauga automobil nou la
case 1: sfirsitul listei.");
if(a) printf("\n [2] Adauga automobil nou la
free(a); inceputul listei.");
m=1;
printf("\n [3] Adauga automobil nou la locul else
dorit in lista."); printf("\nNu exista automobil cu asa numar de
printf("\n [4] Sterge din lista de ordine\a\n");
automobili."); l=1;
printf("\n [5] Modifica datelor system("cls");
automobilelor."); printf("Modificarea a avut loc cu
printf("\n\n Comanda:"); succes!\a\n");
scanf("%d",&com2); system("pause");
switch(com2) break;
{ default:
case 1: system("cls");
system("cls"); printf("\aAti introdus o comanda
printf("Introdu numarul de automobile pentru gresita!\n");
implementare: "); l=1;
scanf("%d",&nr); system("pause");
add_car(a,&n,nr); break;
l=1; }
system("cls"); break;
printf("Implementarea a avut loc cu case 3:
succes!\a\n"); system("cls");
system("pause"); printf("\n [1] Salveaza schimbarile in
break; fisier.");
case 2: printf("\n [2] Starea initiala a datelor.");
system("cls"); printf("\n\n Comanda:");
add_car_prepend(a,&n); scanf("%d",&com3);
l=1; switch(com3)
system("cls"); {
printf("Inserarea a avut loc cu case 1:
succes!\a\n"); system("cls");
system("pause"); printf("Introdu numele fisierului pentru
break; salvare: ");
case 3: scanf("%s",&fname);
system("cls"); strcat(fname,".txt");
printf("Introdu spatiul pentru inregestrare a save(a,&n,fname);
automobilului: "); printf("\nSalvare a avut loc cu
scanf("%d",&k); succes!\a\n\n");
add_car_everyw(a,&n,k); l=1;
l=1; system("pause");
system("cls"); break;
printf("Adaugarea a avut loc cu case 2:
succes!\a\n"); system("cls");
system("pause"); if(a)
break; free(a);
case 4: intro_auto(fname,&n);
system("cls"); printf("Reinoirea datelor sa efectuat cu
afisare(a,&n); succes!\n");
printf("Introdu numarul de ordine a l=1;
automobilului pentru stergere: "); system("pause");
scanf("%d",&nd); break;
system("cls"); default:
del_car(a,&n,nd); system("cls");
system("cls"); printf("\aAti introdus o comanda
printf("Automobilul cu numarul de ordine %d a gresita!\n");
fost eliminata cu succes\n",nd); l=1;
l=1; system("pause");
system("pause"); break;
break; }
case 5: break;
system("cls"); default:
afisare(a,&n); system("cls");
printf("Introdu numarul de ordine a printf("\aAti introdus o comanda
automobilului: "); gresita!\n");
scanf("%d",&nm); l=1;
system("cls"); system("pause");
if(nm<=n && nm>=1) break;
{ };//end of switch commenu.
car_m(a,nm); }//end of infinite cicle
din_realloc(a,nm); return 0;
} }//end main.
Descrierea functiilor,parametri,valoarea returnabila.

automobil * din_realloc(automobil *a,int n);


{return a;}
 Destinatia:alocarea dinamica a tabloului unidimensional de structuri.
 Parametri:a(pointer la structura,tablou unidimensional de structura)
n(variabila de tip int,numarul de elemente din tabloul de structuri)
 Valoarea returnabila:a(tablou unidimensional de structuri)

automobil * intro_auto(char *fname,int *n);


{return a;}
 Destinatia:introducerea datelor din fisier.
 Parametri:fname(pointer la char,denumirea fisierului)
n(pointer la int,numarul de elemente)
 Valoarea returnabila:a(tablou unidimensional de structuri)

automobil * intro_manual(automobil*a,int *n);


{return a;}
 Destinatia:introducerea datelor manual in tablou unidimensional de structura.
 Parametri:a(pointer la strucura,tablou unidimensional de structura)
n(pointer la int,numarul de elemente din tablou)
 Valoarea returnabila:a(tablou unidimensional de structuri)

void afisare(automobil*a,int *n);


 Destinatia:Afisarea datelor.
 Parametri:a(pointer la strucura,tablou unidimensional de structura)
n(pointer la int,numarul de elemente din tablou)

void afis_an(automobil *a, int *n,int an);


 Destinatia:Afisarea datelor dupa un cimp al structurii(an).
 Parametri:a(pointer la strucura,tablou unidimensional de structura)
n(pointer la int,numarul de elemente din tablou)
an(variabila de tip int,anul cautata)

automobil * add_car(automobil *a,int *n,int nr);


 Destinatia:Adaugarea elementelor noi la sfirsit in tabloul unidimensinal de structuri.
 Parametri:a(pointer la strucura,tablou unidimensional de structura)
n(pointer la int,numarul de elemente din tablou)
nr(variabila de tip int,numarul de elemente pentru adaugare)
automobil* add_car_everyw(automobil*a,int* n,int k);
 Destinatia:Adaugarea unui noi elementent la locul dorit in tabloul unidimensional de
structuri.
 Parametri:a(pointer la strucura,tablou unidimensional de structura)
n(pointer la int,numarul de elemente din tablou)
k(variabila de tip int,indicile pentru plasrea elementului)

automobil * add_car_prepend(automobil* a,int* n);


 Destinatia:Adaugarea elementului noi la inceputul tabloului de structuri.
 Parametri:a(pointer la strucura,tablou unidimensional de structura)
n(pointer la int,numarul de elemente din tablou)

void del_car(automobil*a,int *n,int nd);


 Destinatia:Stergerea elementului dorit din tabloul de structuri.
 Parametri:a(pointer la strucura,tablou unidimensional de structura)
n(pointer la int,numarul de elemente din tablou)
nd(variabila de tip int,indicile elementului dorit pentru stergere)

void save(automobil*a,int *n,char *fname);


 Destinatia:Salvarea datelor in fisier.
 Parametri:a(pointer la strucura,tablou unidimensional de structura)
n(pointer la int,numarul de elemente din tablou)
fname(pointer la char,denumirea fisierului pentru salvare)

void ord_cr(automobil*a,int *n);


 Destinatia:Sortarea si afisarea tabloului de structuri in ordine descrescatoare dupa un
anumit cimp(pret).
 Parametri: a(pointer la strucura,tablou unidimensional de structura)
n(pointer la int,numarul de elemente din tablou)

void car_m(automobil *a,int nm);


 Destinatia:alocarea dinamica a tabloului unidimensional de structuri.
 Parametri: a(pointer la strucura,tablou unidimensional de structura)
nm(variabila de tip int,indicile elemtentului pentru modificare)
Rezultatele obtinute.
Introducere.

Meniu principal.

Afisare meniu.
Afisare tablou.

Meniu modificare.
Concluzii: În urma efectuării acestei lucrari de laborator am consolidat
cunostintele acumulate în urma studierii materialelor la tema “Structuri de date si
algoritm” .

Bibliografie:
1. Carcea L., Vlas S., Bobicev V. Informatica: Sarcini pentru lucrări de laborator. Chișinău:
UTM, 2005. - 19 p.
2. Conspectul prelegerilor al cursului Programarea Calculatoarelor pentru studenții gr. AI-181,
AI-182, CR-181, C-182 (lector: dr., conf. univ. M. Kulev). Chișinău, UTM, FCIM, 2018.
3. Tutorial in C language. http://devcentral.iftech.com/learning/tutorials/c-cpp/c/
4. http://andrei.clubcisco.ro/cursuri/anul-1/semestrul-1/programarea-calculatoarelor.html

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

  • Lab1 Poo
    Lab1 Poo
    Document15 pagini
    Lab1 Poo
    ciumac andrian
    100% (1)
  • Lab 3
    Lab 3
    Document9 pagini
    Lab 3
    ciumac andrian
    Încă nu există evaluări
  • Programare C++ Laborator 4 Indrumar UTM
    Programare C++ Laborator 4 Indrumar UTM
    Document7 pagini
    Programare C++ Laborator 4 Indrumar UTM
    UrsuOctavian
    Încă nu există evaluări
  • Labhh 7
    Labhh 7
    Document4 pagini
    Labhh 7
    Mihai Rusu
    Încă nu există evaluări
  • ASDNLab 1
    ASDNLab 1
    Document7 pagini
    ASDNLab 1
    ciumac andrian
    Încă nu există evaluări
  • Lab 3
    Lab 3
    Document13 pagini
    Lab 3
    Витёк Мужичёк
    100% (1)
  • Lab 3
    Lab 3
    Document13 pagini
    Lab 3
    Витёк Мужичёк
    100% (1)
  • Sarcina Lab2
    Sarcina Lab2
    Document10 pagini
    Sarcina Lab2
    Nickolae Enachi
    Încă nu există evaluări
  • Lab 2 Rom
    Lab 2 Rom
    Document8 pagini
    Lab 2 Rom
    ciumac andrian
    Încă nu există evaluări
  • Laborator 2 3 SDA
    Laborator 2 3 SDA
    Document18 pagini
    Laborator 2 3 SDA
    Andrian Ciumac
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document31 pagini
    Lab 1
    ciumac andrian
    Încă nu există evaluări
  • ASDN Indrumar
    ASDN Indrumar
    Document80 pagini
    ASDN Indrumar
    ciumac andrian
    Încă nu există evaluări
  • ASDN Indrumar
    ASDN Indrumar
    Document80 pagini
    ASDN Indrumar
    Ilie Rumega
    Încă nu există evaluări
  • Raport: Lucrare de Laborator nr.1
    Raport: Lucrare de Laborator nr.1
    Document6 pagini
    Raport: Lucrare de Laborator nr.1
    TI UTM
    Încă nu există evaluări