RAPORT
Structuri de date și algoritmi
Lucrare de laborator nr. 7
Varianta: 5
Chișinău 2022
Scopul lucrării: Obținerea deprinderilor practice de implementare și de
utilizare a tipului abstract de date (TAD) “Tablou de structuri” în limbajul C.
Programul elaborat:
#include "marfah.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
}
void afisare(marfa * A, int n) {
int i;
printf("Lista de marfe este :\n");
for (i = 0; i < n; i++) {
printf(" Denumirea:%s \n Pretul(lei):%f \n Masa(kg):%f \n Cantitatea: %
d\ n\ n ",A[i].nume,A[i].pret,A[i].masa,A[i].cantitate);
}
}
void sortare(marfa * A, int n) {
int i, k;
marfa t;
for (i = 0; i < n; i++) {
for (k = 0; k < n - i - 1; k++) {
if (stricmp(A[k].nume, A[k + 1].nume) > 0) {
3
Structuri de date și algoritmi. Lucrare de laborator Nr.7
Tema: Implementarea tipului abstract de date „Tablou de structuri” în limbajul C
t = A[k];
A[k] = A[k + 1];
A[k + 1] = t;
}
}
}
}
int cautare(marfa * A, int n, char * nume) {
int i;
for (i = 0; i < n; i++) {
if (stricmp(A[i].nume, nume) == 0) {
return i;
return -1;
}
}
}
{
FILE * fp;
marfa * A;
5
Structuri de date și algoritmi. Lucrare de laborator Nr.7
Tema: Implementarea tipului abstract de date „Tablou de structuri” în limbajul C
int n = 3, i = 0;
fp = fopen(filename, "r");
if (!fp) {
printf("Fisierul nu exista!\n");
system("pause");
exit(1);
}
fscanf(fp, "%s%f%f%i", & A[i].nume, & A[i].pret, & A[i].masa, & A[i].cantitate);
fclose(fp);
printf("Denumirea: %s\n Pretul: %f\n Masa: %f\n Cantitatea: %i\n",
A[i].nume, A[i].pret, A[i].masa, A[i].cantitate);
}
}
#include "marfac.c"
#include "conio.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int main() {
int n, c, k;
marfa * A, * RN;
char filename[20];
char nume[20];
marfa a;
while (1) {
puts("\t\tMeniu");
puts("1. Alocarea memoriei");
puts("2. Introducerea informatiei");
puts("3. Afisarea datelor pe ecran");
puts("4. Cautarea elementului conform denumirei");
puts("5. Sortarea disciplinilor dupa denumire");
puts("6. Modificarea elementului");
puts("7. Adaugarea unui element");
puts("8. Stergerea unui element");
puts("9. Salvarea bazei in fisier");
puts("10. Citirea din fisier");
puts("0. Iesire");
printf("\nComanda <<< ");
scanf("%d", & c);
switch (c) {
case 0:
if (A) {
free(A);
A = NULL;
}
6
Structuri de date și algoritmi. Lucrare de laborator Nr.7
Tema: Implementarea tipului abstract de date „Tablou de structuri” în limbajul C
exit(1);
break;
case 1:
printf("Introduceti numarul de marfe: ");
scanf("%d", & n);
A = (marfa * ) malloc(n * sizeof( * A));
if (A == NULL) {
printf("Memoria nu a fost alocata\n");
return -1;
}
puts("\nTastati o tasta pentru continuare");
getch();
break;
case 2:
introduce(A, n);
puts("\nTastati o tasta pentru continuare");
getch();
break;
case 3:
afisare(A, n);
puts("\nTastati o tasta pentru continuare");
getch();
break;
case 4:
printf("Dati denumirea marfei: ");
fflush(stdin);
gets(nume);
k = cautare(A, n, nume);
system("pause");
if (k == -1) {
puts("Denumirea nu a fost gasita");
} else {
printf("Marfa este :\n Marfa %i \n", k + 1);
printf(" Denumirea:%s \n Pretul(lei):%f \n Masa(kg):%f \n
Cantitatea: % d\ n\ n ",A[k].nume,A[k].pret,A[k].masa,A[k].cantitate);
}
puts("\nTastati o tasta pentru continuare");
getch();
break;
case 5:
sortare(A, n);
puts("Sortarea a fost efectuata cu succes , pentru a vedea lista de
marfuri sortate tasteaza in meniu << 3 >> ");
puts("\nTastati o tasta pentru continuare"); getch();
break;
case 6:
puts("\n/t/t Alegeti marfa care o doriti sa o modificati:"); scanf("%i", & k);
modificare(A, n); puts("Modificarea a fost realizata cu succes"); puts("\nTastati o tasta pentru
continuare"); getch();
break;
case 7:
7
Structuri de date și algoritmi. Lucrare de laborator Nr.7
Tema: Implementarea tipului abstract de date „Tablou de structuri” în limbajul C
puts("Dati informatie despre marfa noua:"); printf("Denumirea: "); fflush(stdin);
gets(a.nume); printf("Pret: "); scanf("%f", & a.pret); printf("Masa: "); scanf("%f", & a.masa);
printf("Cantitate: "); scanf("%i", & a.cantitate); RN = appenddata(A, & n, a);
if (!RN) {
puts("Adaugarea nu a avut loc!");
puts("\nTastati o tasta pentru continuare");
getch();
break;
}
puts("Operatiunea afost efectuata cu succes!"); A = RN;
Rezultatele primite:
Meniul principal
8
Structuri de date și algoritmi. Lucrare de laborator Nr.7
Tema: Implementarea tipului abstract de date „Tablou de structuri” în limbajul C
Alocarea dinamică a memoriei
Introducere elemente
9
Structuri de date și algoritmi. Lucrare de laborator Nr.7
Tema: Implementarea tipului abstract de date „Tablou de structuri” în limbajul C
Sortarea mărfii după denumire
10
Structuri de date și algoritmi. Lucrare de laborator Nr.7
Tema: Implementarea tipului abstract de date „Tablou de structuri” în limbajul C
Adăugarea unui element nou
11
Structuri de date și algoritmi. Lucrare de laborator Nr.7
Tema: Implementarea tipului abstract de date „Tablou de structuri” în limbajul C
Salvarea în fișier
Fișierul creat
13
Structuri de date și algoritmi. Lucrare de laborator Nr.7
Tema: Implementarea tipului abstract de date „Tablou de structuri” în limbajul C