Sunteți pe pagina 1din 16

Ministerul Educaţiei

al Republicii Moldova

Universitatea Tehnică a Moldovei


Catedra Calculatoare și rețele

RAPORT
despre lucrarea de laborator Nr. 6-7
la Programarea calculatoarelor

Tema: Implementarea tipului abstract de date


,,Tablou de structure”

Varianta 23

A efectuat:
st. gr. CR-191 Trifan Petru

A verificat:
Lector univ. Munteanu Silvia
Chişinău – 2020
Lucrare de laborator nr.5
Tema: Prelucrarea caracterelor și a șirurilor de caractere

Scopul lucrării: Obținerea deprinderilor practice de implementare și de utilizare a tipului


abstract de date (TAD) “Tablou de structuri” în limbajul C.

Sarcina (conform variantelor) : Să se scrie trei fișiere-text în limbajul C pentru


implementarea și utilizarea TAD “Tablou de structuri”:
1. Fişier antet cu extensia .h, care conține specificarea structurii de date a elementului
tabloului (conform variantelor) şi prototipurile funcţiilor de prelucrare a tabloului de
structuri. 2. Fişier cu extensia .cpp sau .c, care conține implementările (codurile) funcţiilor,
declarate în fişierul antet.
3. Fişier al utilizatorului, funcţia mаin() pentru prelucrarea tabloului de structuri cu afişarea
la ecran a următorului meniu de opţiuni:

1. Alocarea dinamică a memoriei pentru tablou.


2. Introducerea informației despre elementele tabloului de la tastatură .
3. Afişarea informației despre elementele tabloului la ecran.
4. Că utarea elementului în tablou.
5. Modificarea câmpurilor a unui element din tablou.
6. Înterschimbarea a două elemente indicate din tablou.
7. Sortarea tabloului.
8. Adă ugarea unui element nou la sfârșitul tabloului.
9. Adă ugarea unui element nou la înciputul tabloului. 26
10. Inserarea unui element nou după elementul indicat al tabloului.
11. Inserarea unui element nou înainte elementul indicat al tabloului.
12. Ştergerea elementului indicat al tabloului.
13. Salvarea informației despre elementele tabloului în fişier.
14. Citirea informației despre elementele tabloului din fişier.
15. Eliberarea memoriei alocate pentru tablou. 0. Ieşire din program.

Varianta 23 . Structura Computer cu câmpurile: modelul, procesorul, memoria, camera, preţul.

Codul :
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include "structure.h"
int main (void)
{
int n, a = 1, asort = 1, is, t = 4, dt = 0;

int a1, a2;


tel * c;
char smodel[30];

printf ("Introduceti numarul de telefoane mobile:\n");


fflush(stdin);
scanf ("%d", &n);

while (a)
{
if (t > 3)
{
printf ("\n\tMENIU");
printf ("\n1.Alocarea dinamica a memoriei");
printf ("\n2.Introducerea elementelor de la tastatura ");
printf ("\n3.Cautarea elemantului tabloului");
printf ("\n4.Sortarea tabloului");
printf ("\n5.Redactarea elementului a tabloului");
printf ("\n6.Adaugarea unui element nou la sfarsit");
printf ("\n7.Eliminarea elementului indicat din tablou");
printf ("\n8.Inserarea unui element nou");
printf ("\n9.Salvarea elementelor tabloului in fisier");
printf ("\n10.Citirea elementelor tabloului din fisier");
printf ("\n11.Extragerea elementelor tabloului la ecran");
printf ("\n12.Eliberarea memoriei alocate pentru tablou ");
printf ("\n*13.Interschimbarea a doua elemente indicate din tablou");
printf ("\n*14.Adaugarea unui element nou la inceputul tabloului");
printf ("\n*15.Inserarea unui element nou inainte elementului indicat al tabloului");
printf ("\n 0.Ierie din program\n");
t = 0;
}
printf ("\nAlegeti un punct din meniu\n\t");
fflush(stdin);
scanf ("%d", &a);
if (a == 0)
printf("\n\n\tAti esit din program!\n");

switch (a)
{
//alocarea
case 1:

c = alocMemory(n);
printf ("\nMemoria a fost alocata\n");
t++;
break;

//introducerea
case 2:
printf ("\nIntroduceti elementele de la tastatura ");
readtel(c, n);
printf ("\n\t\t***Introducerea elementelor este finisata***\n");
t++;
break;

//cautarea
case 3:

printf ("\nIntroduceti modelul telefonului pe care il cautati: ");


fflush(stdin);
scanf("%s", &smodel);
is = 0;
is = searchtel(c, n, smodel);
if (is >= 0)
{
printf ("\n\tTelefon mobil nr.%d", is + 1);
printf ("\nModelul: %s\tProcesorul: %s\tMemoria: %d\tCamera:
%.0f\tPretul: %.0f\n", c[is].model, c[is].procesor, c[is].memory, c[is].camera, c[is].price);
}
else
printf ("\nModelul introdus nu a fost gasit");
t++;
break;

//sortarea
case 4:

printf("\t\tMENIU de sortare");
printf("\n\t1.Sortarea dupa memoria");
printf("\n\t2.Sortarea dupa camera");
printf("\n\t3.Sortarea dupa pretul");
printf("\n\t0.Iesirea din MENIU de sortare\n\n\t");

fflush(stdin);
scanf("%d", &asort);
if (!asort) printf("\nAti esit dim meniu de sortare\n");

switch(asort)
{
//sortarea dupa memorie
case 1:
sortByMemory(c, n);
printf("\nSortarea a fost cu succes\n");
break;

//sortarea dupa viteza


case 2:
sortByCamera(c, n);
printf("\nSortarea a fost cu succes\n");
break;

//sortrea dupa pret


case 3:
sortByPrice(c, n);
printf("\nSortarea a fost cu succes\n");
break;

default:
printf("\nAti esit dim meniu de sortare\n");
break;
}
t++;
break;

// redactarea a elementelor a tabloului

case 5:
printf("\nIntroduceti nr-l a elementului pe care doriti sa redactati\n");
fflush(stdin);
scanf("%d", &is);
fflush(stdin);
redact(c, is);
t++;
break;

//adaugarea unui element la sfarsit


case 6:
c = appElement(c,&n);
t++;
break;

//Eliminarea elementului indicat din tablou


case 7:
printf("\nIntroduceti nr. telefonului mobil pe care doriti sa eliminati\n" );
fflush(stdin);
scanf("%d", &is);
fflush(stdin);
c = elim(c,is,&n);
printf("\nTelefonul mobil a fost eliminat\n");
t++;
break;

//Inserarea unui element


case 8:
printf("\nIntroduceti nr. telefonului mobil de inserare\n" );
fflush(stdin);
scanf("%d", &is);
c = inser(c,is,&n);
printf("\nCalculatorul a fost inserat\n");
t++;
break;

//write struct in file


case 9:
if (writeStructInFile (c, n) == 1)
printf("\nSalvarea a elemetelor a fost cu succes\n");

else printf("\nError\n");
t++;
break;

// salvarea in forma frumoasa


case 90:
if (writeStructInFile0 (c,n) == 1)
printf("\nSalvarea a elemetelor a fost cu succes\n");

else printf("\nError\n");
t++;
break;

//read struct in file


case 10:

if (!readStructFromFile(&n))
{
printf("\n\n\t***Error***\n");
break;
}
else
{
c = readStructFromFile(&n);
printf("\nCitirea a elemetelor a fost cu succes\n");
}
t++;
break;

//afisarea
case 11:
printf ("\n\n\nElementele structurei :\n");
showtel(c, n);
printf ("\n\n");
t++;
break;

//eliberarea memoriei
case 12:
c = NULL;

if (!c)
printf("\nMemoria a fost eliberata\n");
else
printf("\n\n\t***Error***\n");

t++;
break;

case 13:

printf("\nIntroduceti nr. elementului unu : ");


fflush(stdin);
scanf("%d", &a1);
printf("\nIntroduceti nr. elementului doi : ");
fflush(stdin);
scanf("%d", &a2);

swap (c, a1, a2);


printf("\nInterschimbul a fost cu succes!");
t++;

break;
case 14:

c = addFirstElement(c, &n);
printf("\nElementul a fost adaugat la inceput\n");
t++;
break;

case 15:
printf("\nIntroduceti nr. telefonului mobil inaintea carui va fi inserarea\n" );
fflush(stdin);
scanf("%d", &is);
is--;
c = inser(c,is,&n);
printf("\nTelefonul mobil a fost inserat\n");
t++;

break;

default:
dt++;
if (dt < 3)
{
printf("\n\n***Mai incearca***\n");
t = 4;
}
if (dt >= 3){
printf("\n\n\t***Ati esit din program***\n");
a = 0;
}

break;
}

}
getch();
return 0;
}

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"structure.h"

tel * alocMemory(int n)
{
tel * A = NULL;
A = (tel *) malloc (n * sizeof(tel));
if (A == NULL)
{
printf ("\n\tMEMORIA NU A FOST ALOCATA\n");
return NULL;
}
return A;
}

void readtel(tel * c, int n)


{
int i;
for (i = 0; i < n; i++)
{
fflush(stdin);
printf ("\n\tTelefonul mobil nr.%d", i+1);
printf ("\nModelul: ");
gets (c[i].model);
printf ("Procesorul: ");
gets (c[i].procesor);
printf ("Memoria: ");
scanf ("%d", &c[i].memory);
printf ("Camera: ");
scanf ("%f", &c[i].camera);
printf ("Price: ");
scanf ("%f", &c[i].price);
}
return;
}

void showtel (tel * c, int n)


{
int i;
for (i = 0; i < n; i++)
{
printf ("\n\tTelefon mobil nr.%d", i + 1);
printf ("\nModelul: %s\tProcesorul: %s\tMemoria: %d\tCamera: %.0f\tPretul: %.0f\n",
c[i].model, c[i].procesor, c[i].memory, c[i].camera, c[i].price);
}
return;
}

int searchtel (tel * c, int n, char * smodel)


{
int i;
for (i = 0; i < n; i++)
{
if (stricmp(c[i].model, smodel) == 0)
return i;
}
return -1;
}

void sortByMemory(tel *c, int n)


{
int i, k;
tel t;

for (i = 0; i < n-1; i++)


{
for (k = 0; k < n-1-i; k++ )
{
if (c[k].memory > c[k+1].memory)
{
t = c[k+1];
c[k+1] = c[k];
c[k] = t;
}
}
}
return;
}
void sortByCamera(tel *c, int n)
{
int i, k;
tel t;

for (i = 0; i < n-1; i++)


{
for (k = 0; k < n-1-i; k++ )
{
if (c[k].camera > c[k+1].camera)
{
t = c[k+1];
c[k+1] = c[k];
c[k] = t;
}
}
}
return;
}

void sortByPrice(tel *c, int n)


{
int i, k;
tel t;

for (i = 0; i < n-1; i++)


{
for (k = 0; k < n-1-i; k++ )
{
if (c[k].price > c[k+1].price)
{
t = c[k+1];
c[k+1] = c[k];
c[k] = t;
}
}
}
return;
}

void redact(tel *c, int i)


{
int a = 1;
i--;

printf("\t\tMENIU de redactare");
printf("\n\t1.Redactarea modelului");
printf("\n\t2.Redactarea procesorului");
printf("\n\t3.Redactarea memoriei");
printf("\n\t4.Redactarea Camera");
printf("\n\t5.Redactarea pretului");
printf("\n\t0.Iesirea din MENIU de redactare\n\n\t");

while(a)
{
printf("\n\tAlegeti un punct din submeniu\n\t");
fflush(stdin);
scanf("%d",&a);
switch(a)
{
case 1:
printf("\tIntroduceti modelul:\t");
fflush(stdin);
gets (c[i].model);
printf("\tModelul a fost modificat\n");
break;

case 2:
printf("\tIntroduceti procesorul:\t");
fflush(stdin);
gets (c[i].procesor);
printf("\tProcesorul a fost modificat\n");
break;

case 3:
printf("\tIntroduceti memoria:\t");
fflush(stdin);
scanf ("%d", &c[i].memory);
printf("\tMemoria a fost modificata\n");
break;

case 4:
printf("\tIntroduceti Camera:\t");
fflush(stdin);
scanf ("%f", &c[i].camera);
printf("\tCamera a fost modificata\n");
break;

case 5:
printf("\tIntroduceti pretul:\t");
fflush(stdin);
scanf ("%f", &c[i].price);
printf("\tPretul a fost modificat\n");
break;

default:
printf("\n\t\t***Ati iesit din submeniul de redactre***\n");
a = 0;
return;
break;
}
}
return;
}

tel * appElement(tel *c, int *pn)


{
tel temp;
tel *b;

b = (tel*) realloc (c,(*pn+1)*sizeof(*b));


if (b == NULL) {return b;}
b[*pn] = temp;
*pn = *pn +1;

return b;
}

tel * elim(tel *c, int el, int *n)


{
int i;
tel *b;
tel t;
for (i = el - 1; i < *n -1; i++)
{
t = c[i];
c[i] = c[i+1];
c[i+1] = t;
}

b = (tel*) realloc (c,(*n-1)*sizeof(*b));


if (b == NULL) {return b;}
*n = *n - 1;

return b;
}

tel * inser(tel *c, int el, int * n)


{
int i;
tel *b;
tel temp;

printf("\nIntroduceti un element nou:\n");


fflush(stdin);
printf ("\n\tTelefonul mobil nr.%d", el);
printf ("\nModelul: ");
gets (temp.model);
printf ("Procesorul: ");
gets (temp.procesor);
printf ("Memoria: ");
scanf ("%d", &temp.memory);
printf ("Camera: ");
scanf ("%f", &temp.camera);
printf ("Pretul: ");
scanf ("%f", &temp.price);

b = (tel*) realloc (c,(*n+1)*sizeof(*b));


if (b == NULL) {return b;}

for (i = *n; i > el - 1; --i)


b[i] = b[i - 1];

b[el-1] = temp;

*n = *n + 1;

return b;
}

int writeStructInFile (tel *c, int n)


{
FILE * f;
int i;
f = fopen ("telefon mobil.txt", "w");
if (!f){return 0;}

fwrite (&n, sizeof(int), 1, f);

for (i = 0; i < n; i++)


fwrite (&c[i], sizeof(tel), 1, f);

fclose (f);

return 1;
}

int writeStructInFile0 (tel *c, int n)


{
FILE * f;
int i;
f = fopen ("tel.txt", "w");
if (!f){return 0;}
fprintf(f,"Numarul de telefoane mobile : %d\n", n);

for (i = 0; i < n; i++)


{
fprintf(f,"\nTelefonul mobil nr.%d",i+1);
fprintf (f,"\nModelul: %s\tProcesorul: %s\tMemoria: %d\tCamera: %.0f\tPretul: %.0f\n",
c[i].model, c[i].procesor, c[i].memory, c[i].camera, c[i].price);
}

fclose (f);

return 1;
}

tel * readStructFromFile(int *n)


{
FILE * f;
int i = 0, pn;
tel temp;
tel * b = NULL;

f = fopen ("telefon mobil.txt", "r");


if (!f){return NULL;}

fread(&pn, sizeof(int), 1, f);

b = (tel *) malloc ((pn)* sizeof(tel));


if (b == NULL)
return NULL;

i = 0;
while (fread(&temp, sizeof(tel), 1, f))
{
b[i] = temp;
i++;
}

fclose (f);
*n = pn;
return b;
}

//lucr 7

void swap(tel * c, int a, int b)


{
tel t;
t = c [a-1];
c[a-1] = c [b-1];
c [b-1] = t;

return;
}

tel * addFirstElement(tel *c, int *n)


{
int i;
tel *b;
tel temp;

printf("\nIntroduceti un element nou:\n");


fflush(stdin);
printf ("\n\tTelefon mobil nr.%d", 1);
printf ("\nModelul: ");
gets (temp.model);
printf ("Procesorul: ");
gets (temp.procesor);
printf ("Memoria: ");
scanf ("%d", &temp.memory);
printf ("Camera: ");
scanf ("%f", &temp.camera);
printf ("Pretul: ");
scanf ("%f", &temp.price);

b = (tel*) realloc (c,(*n+1)*sizeof(*b));


if (b == NULL) {return b;}

for (i = *n; i > 0; --i)


b[i] = b[i - 1];

b[0] = temp;

*n = *n + 1;

return b;
}

typedef struct Telefon


{
char model[30];
char procesor[15];
int memory;
float camera;
float price;
}tel;

tel * alocMemory(int n);


void readCMP(tel * c, int n);
void showCMP (tel * c, int n);
int searchCMP (tel * c, int n, char * smodel);
void sortByMemory(tel *c, int n);
void sortByCamera(tel *c, int n);
void sortByPrice(tel *c, int n);
void redact(tel *c, int i);
tel * appElement(tel *c, int *pn);
tel * elim(tel *c, int el, int *n);
tel * inser(tel *c, int el, int * n);
int writeStructInFile (tel *c, int n);
int writeStructInFile0 (tel *c, int n);
tel * readStructFromFile(int *n);

void swap(tel *c, int a1, int a2);


tel * addFirstElement(tel *c, int *pn);

Concluzie: În urma acestei lucrări de laborator am învățat implemetarea si


utilizarea tipului abstract de date (TAD) „Tablou de structuri”in limbajul C.

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