Sunteți pe pagina 1din 19

MINISTERUL EDUCAȚIEI, CULTURII ȘI CERCETĂRII

AL REPUBLICII MOLDOVA
Universitatea Tehnică a Moldovei
Facultatea Calculatoare, Informatică şi Microelectronică
Departamentul Informatică şi Ingineria Sistemelor

Raport
pentru lucrarea de laborator Nr.4

la cursul de “Structuri de date și algoritmi”

Verificat:
Guțu Maria lect. univ.
Departamentul Informatică şi IS,
Facultatea FCIM, UTM

Chișinău – 2021
Sarcina: Pentru fișierele binare cu elemente de tip structură (conform variantelor) să se
afișeze la ecran

următorul meniu de opțiuni:

1. Crearea unui fișier binar nou, introducerea câmpurilor structurilor de la tastatură și


înscrierea lor

în acest fișier.

2. Afișarea elementelor fișierului binar la ecran.

3. Adăugarea unei structuri noi la sfârșit de fișier.

4. Modificarea unei structuri a fișierului.

5. Căutarea după un câmp al structurii în fișier.

6. Sortarea structurilor fișierului după un careva câmp.

7. Eliminarea unei structuri din fișier.

8. Ștergerea fișierului de pe disc (la dorință)

0. Ieșire din program.

Să se elaboreze funcțiile pentru implementarea opțiunilor meniului.

4. Structura Cinematograf cu câmpurile: denumirea, adresa, telefonul, numărul de locuri,


prețul biletelor.

typedef struct

char denumire[50];

char adresa[50];

char telefon[10];

int nr_locuri;

float pret;
2
}cinematograf;

typedef struct

char denumirea[50];

char genul[25];

int durata;

}film;

void aloc_mem(cinematograf **arr, int n)

*arr=(cinematograf*)malloc(n*sizeof(cinematograf));

void scrie_cinematograf(cinematograf *arr,int n)

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

printf("Numarul cinematografului:%d\n",i+1);

printf("Denumirea:");

scanf("%s",arr[i].denumire);

fflush(stdin);

printf("Adresa:");

scanf("%s",arr[i].adresa);

fflush(stdin);

printf("Telefonul:");

scanf("%s",arr[i].telefon);

3
fflush(stdin);

printf("Numarul de locuri:");

scanf("%d",&arr[i].nr_locuri);

fflush(stdin);

printf("Pretul:");

scanf("%f",&arr[i].pret);

printf("\n");

fflush(stdin);

return;

void afisare_cinematograf(cinematograf *arr,int n)

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

printf("Numarul cinematografului:%d\n",i+1);

printf("Denumirea: %s\n",arr[i].denumire);

printf("Adresa:%s",arr[i].adresa);

printf("Numarul de telefon:%s",arr[i].telefon);

printf("Numarul de locuri:%d",arr[i].nr_locuri);

printf("Pretul:%.2f",arr[i].pret);

void add_muzeu(film *arr1,int n)

4
{

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

printf("Numarul filmului:%d\n",i+1);

printf("Denumirea:");

scanf("%s",arr1[i].denumirea);

fflush(stdin);

printf("Genul:");

scanf("%s",arr1[i].genul);

fflush(stdin);

printf("Durata:");

scanf("%d",&arr1[i].durata);

fflush(stdin);

printf("\n");

fflush(stdin);

return;

void sortare(cinematograf *arr,int n)

cinematograf aux;

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

if (strcmp(&arr[i].pret,&arr[i+1].pret)<0){

aux=arr[i];

5
arr[i]=arr[i+1];

arr[i+1]=aux;

void eliminare(cinematograf *arr,int n)

FILE *fp1;

FILE *fp2;

fp1=fopen("cinematograf.bin","rb");

fp2=fopen("cinematograf2.bin","wb");

int nr=0;

printf("Introduceti numarul cinematografului pe care doriti sa il eliminati: ");

fflush(stdin);

scanf("%d",&nr);

cinematograf mag;

for(int i=1;i<=n;i++){

fread(&mag,sizeof(mag),1,fp1);

if(i!=nr){

fwrite(&mag,sizeof(mag),1,fp2);

fclose(fp2);

6
fclose(fp1);

fp2=fopen("cinematograf2.bin","rb");

fp1=fopen("cinematograf.bin","wb");

while(fread(&mag,sizeof(mag),1,fp2)){

fwrite(&mag,sizeof(mag),1,fp1);

n--;

fclose(fp2);

fclose(fp1);

printf("\n***Eliminat cu succes***\n");

void meniu(cinematograf *arr,int n){

int aleg = 0, mem=0;

int complet=0;

printf("--------------------------\n");

printf(" Meniul \n");

printf("--------------------------\n");

do{

printf("\n1. Alocarea dinamica a memoriei pentru tabloul de structuri.");

printf("\n2. Introducerea elementelor de la tastatura.");

printf("\n3. Afisarea elementelor tabloului la ecran");

7
printf("\n4. Adaugarea unui element nou la sfarsit..");

printf("\n5. Modificarea elementelor tabloului.");

printf("\n6. Cautarea elementului tabloului");

printf("\n7. Sortarea tabloului.");

printf("\n8. Eliminarea elementului din tablou.");

printf("\n9. Eliberarea memoriei alocate.");

printf("\n0. Iesire din program.");

printf("\n\n\nAlgeti optiunea: ");

scanf("%d", &aleg);

printf("--------------------------\n");

switch(aleg){

case 1:

//alocarea dinamica a memoriei

printf("Introduceti numarul de cinematografice:");

scanf("%d",&n);

if(n <= 0) {

printf("Introduceti un numar mai mare ca 0.\nIntrodu numarul:");

scanf("%d",&n);

aloc_mem(&arr,n);

if (arr==NULL){

printf("Eroare de alocare a memoriei!\n");

8
else{

printf("Memoria sa alocat cu succes\n");

mem=1;

printf("\n\n--------------------------\n");

break;

//introducerea datelor in structura

case 2:

if(mem==1){

printf("Puteti introduce datele despre cinematograf:\n");

scrie_cinematograf(arr,n);

complet=1;

printf("--------------------------\n");

else{

system("cls");

printf("Nu ati alocat memorie pentru tablou\nAccesati punctul '1' pentru a efectua
introducerea in tablou\n\n");

printf("--------------------------\n");

break;

9
//afisarea datelor

case 3:

if(!mem){

system("cls");

printf("Nu ati alocat memorie pentru tablou\n");

else if(!complet){

system("cls");

printf("Nu ati introdus datele despre cinematograf\n");

printf("Te rugam sa accesezi punctul '1' din meniu apoi punctul '2'\n");

printf("--------------------------\n");

else{

afisare_cinematograf(arr,n);

printf("--------------------------\n");

break;

case 4:

add_muzeu(arr,n);

break;

10
case 5:

//modificarea

break;

case 6:

//cautarea

break;

case 7:

sortare(arr,n);

break;

case 8:

eliminare(arr,n);

break;

case 9:

// eliberarea memoriei

break;

case 0:

printf("\nProgramul a fost oprit.");

break;

default:

11
system("cls");

printf("\n\nError Nu avem asa optiune in meniu\n\n");

printf("--------------------------\n");

while(aleg!=0);

int main(void)

int n;

cinematograf* arr[2];

FILE *fp;

fp=fopen("cinematograf.bin","wb");

if(!fp){

return printf("Eroare!");

else{

meniu(arr,n);

fclose(fp);

return 0;

12
#include <stdio.h>

#include <stdlib.h>

int main()

int i,j,m,n,count=0;

int suma1=0,suma2=0,suma3=0,suma4=0;

int arr[4][j];

FILE *fp1;

FILE *fp2;

fp1 = fopen("BUGET.TXT","r");

13
fp2 = fopen("OUT.TXT","w");

if (!fp1)

return printf("Fisierul nu exista!");

else{

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

for (j=0; j<m; j++){

fscanf(fp1,"%d",&arr[i][j]);

fclose(fp1);

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

count = 0;

for (j=0; j<m; ++j){

if (arr[i][j]==1) {count++; suma1+=count;}

if (arr[i][j]==2) {count++; suma2+=count;}

if (arr[i][j]==3) {count++; suma3+=count;}

if (arr[i][j]==4) {count++; suma4+=count;}

fprintf(fp2,"Produse alimnetare %d", suma1);

fprintf(fp2,"Servicii comunale %d", suma1);

fprintf(fp2,"Produse nealimnetare %d", suma1);

14
fprintf(fp2,"Distractii %d", suma1);

fclose(fp2);

return 0;

#include <stdio.h>

#include <stdlib.h>

int main()

int n,k,i,j,maxim,indice;

int arr[8][10];

int v[8];

15
FILE *fp1;

FILE *fp2;

fp1=fopen("turistIN.txt","r");

if(!fp1)

return printf("Eroare!");

else{

fscanf(fp1," %d %d",&n,&k);

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

for(j=0; j<0; j++){

fscanf(fp1,"%d",&arr[i][j]);

fclose(fp1);

fp2=fopen("turistOUT.txt","w");

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

for (j = 0; j < k; ++j){

printf(" %d", arr[i][j]);

printf("\n");

16
maxim=v[0]; indice = 0;

for(i = 1; i < n; ++i) {

if (maxim < v[i]){

maxim = v[i];

indice = i;

fprintf(fp2,"%d",indice);

fclose(fp2);

return 0;

#include <stdio.h>

17
#include <stdlib.h>

int main()

int n,i,v[100],cantitate=0,sum=0;

FILE *fp;

fp=fopen("petrol.txt","r");

if(!fp){

return printf("Eroare!");

else{

fscanf(fp,"%d",&n);

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

fscanf(fp,"%d",&v[i]);

fclose(fp);

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

cantitate=v[i];

v[i]=cantitate;

sum+=cantitate;

printf("%d",sum);

if (sum<3000) {printf("\nNu");}

18
else if(sum>3000) {printf("\nDa");}

return 0;

19

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