Documente Academic
Documente Profesional
Documente Cultură
al Republicii Moldova
RAPORT
despre lucrarea de laborator Nr. 7
la Structuri de date şi algoritmi
A efectuat:
st. gr. CR-191 Axenti Alina
A verificat:
Lector univ. Munteanu Silvia
Chişinău – 2021
Scopul lucrării:
Obținerea deprinderilor practice de implementare și de utilizare a tipului abstract de date (TAD)
“Tablou de structuri” în limbajul C
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:
Varianta 2. Structura Film cu câmpurile: denumirea, ţara, regizorul, genul filmului, anul.
Mersul lucrării:
Noțiuni teoretice:
•Biblioteca stdio.h conține funcții speciale pentru citirea și afișarea datelor – prin urmare instrucțiunea
de includere a acesteia va fi practic prezentă în orice program. #include <stdio.h>;
•Int-variabila simpla de tip integer(intreg);
•While-execută un bloc de instrucţiuni atâta timp cât o anumită condiţie este adevărată;
•Printf-pentru afișarea datelor;
•Scanf-pentru citirea datelor;
•If,-instrucțiune;
•Malloc-funcție de alocare are ca rezultat adresa zonei de memorie alocate (de tip void*);
Codul programului în C
Main.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include "film.h"
int main (void)
{
int n, a = 1, asort = 1, is, dt = 0;
while (a)
{
printf ("\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 ("\n13.Interschimbarea a doua elemente indicate din tablou");
printf ("\n14.Adaugarea unui element nou la inceputul tabloului");
printf ("\n15.Inserarea unui element nou inainte elementului indicat al tabloului");
printf ("\n 0.Ierie din program\n");
switch (a)
{
//alocarea
case 1:
printf ("Introduceti numarul de filme:\n");
fflush(stdin);
scanf ("%d", &n);
c = alocMemory(n);
printf ("\nMemoria a fost alocata\n");
break;
//introducerea
case 2:
break;
//cautarea
case 3:
break;
//sortarea
case 4:
printf("\t\tMENIU de sortare");
printf("\n\t1.Sortarea dupa anul crescator");
printf("\n\t2.Sortarea dupa anul descrescator");
fflush(stdin);
scanf("%d", &asort);
if (!asort) printf("\nAti esit dim meniu de sortare\n");
switch(asort)
{
//sortarea crescator
case 1:
sortByYearCresc(c, n);
printf("\nSortarea a fost cu succes\n");
break;
//sortarea descrescator
case 2:
sortByYearDesc(c, n);
printf("\nSortarea a fost cu succes\n");
break;
default:
printf("\nAti esit dim meniu de sortare\n");
break;
}
break;
case 5:
printf("\nIntroduceti nr-l a elementului pe care doriti sa redactati\n");
fflush(stdin);
scanf("%d", &is);
fflush(stdin);
redact(c, is);
break;
break;
break;
break;
else printf("\nError\n");
break;
if (!readStructFromFile(&n))
{
printf("\n\n\t***Error***\n");
break;
}
else
{
c = readStructFromFile(&n);
printf("\nCitirea a elemetelor a fost cu succes\n");
}
break;
//afisarea
case 11:
printf ("\n\n\nElementele structurei :\n");
showB(c, n);
printf ("\n\n");
break;
//eliberarea memoriei
case 12:
c = NULL;
if (!c)
printf("\nMemoria a fost eliberata\n");
else
printf("\n\n\t***Error***\n");
break;
case 13:
break;
case 14:
c = addFirstElement(c, &n);
printf("\nElementul a fost adaugat la inceput\n");
break;
case 15:
printf("\nIntroduceti nr.filmului inaintea carui va fi inserarea\n" );
fflush(stdin);
scanf("%d", &is);
is--;
c = inser(c,is,&n);
printf("\nFilmul a fost inserat\n");
break;
default:
printf("\n\n\t***Ati esit din program***\n");
a = 0;
break;
}
}
getch();
return 0;
}
Film.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include "film.h"
film * alocMemory(int n)
{
film * A = NULL;
A = (film *) malloc (n * sizeof(film));
if (A == NULL)
{
printf ("\n\tMEMORIA NU A FOST ALOCATA\n");
return NULL;
}
return A;
}
printf("\t\tMENIU de redactare");
printf("\n\t1.Redactarea denumirei");
printf("\n\t2.Redactarea tarii");
printf("\n\t3.Redactarea regizorului");
printf("\n\t4.Redactarea genului");
printf("\n\t5.Redactarea anului");
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 denumirea:\t");
fflush(stdin);
gets (c[i].name);
printf("\tDenumirea a fost modificata\n");
break;
case 2:
printf("\tIntroduceti tara:\t");
fflush(stdin);
gets (c[i].country);
printf("\tTara a fost modificata\n");
break;
case 3:
printf("\tIntroduceti regizorul:\t");
fflush(stdin);
gets (c[i].regizor);
printf("\tRegizorul a fost modificat\n");
break;
case 4:
printf("\tIntroduceti genul:\t");
fflush(stdin);
gets (c[i].gen);
printf("\tGenul a fost modificat\n");
break;
case 5:
printf("\tIntroduceti anul:\t");
fflush(stdin);
scanf ("%d", &c[i].year);
printf("\tAnul a fost modificat\n");
break;
default:
printf("\n\t\tAti iesit din submeniul de redactre\n");
a = 0;
return;
break;
}
}
return;
}
return b;
}
return b;
}
b[el-1] = temp;
*n = *n + 1;
return b;
}
int writeStructInFile (film *c, int n)
{
FILE * f;
int i;
f = fopen ("film.txt", "w");
if (!f)
return 0;
fclose (f);
return 1;
}
i = 0;
while (fread(&temp, sizeof(film), 1, f))
{
b[i] = temp;
i++;
}
fclose (f);
*n = pn;
return b;
}
//lucr 7
void swap(film * c, int a, int b)
{
film t;
t = c [a-1];
c[a-1] = c [b-1];
c [b-1] = t;
return;
}
b[0] = temp;
*n = *n + 1;
return b;
}
Film.h
typedef struct Film
{
char name[30];
char country[30];
char regizor[30];
char gen[30];
int year;
}film;
//lucr 7
void swap(film *c, int a1, int a2);
film * addFirstElement(film *c, int *pn);
Rezultate :
Concluzie:
În lucrarea de laborator nr.7 am alcatuit un fişier antet cu extensia .c, care conține specificarea structurii
de date a elementului tabloului(casa)şi prototipurile funcţiilor de prelucrare a tabloului de structure,alt
fişier cu extensia .c, care conține implementările (codurile) funcţiilor, declarate în fişierul antet și 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: alocarea dinamica a informației,implementarea
informatiei,sortarea,adaugarea altui element,inserarea unui element nou,salvarea,citirea si ieșire.Acest
program permite de a afla detalii unui lucru.