RAPORT
Lucrarea de laborator nr. 1 la
SDA
A efectuat:
st. gr. CR-203 Rîbac Alexandru
Chişinău -2021
Lucrarea de laborator nr. 1
Sarcină: 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
int cautare(Capitala *C, int n, char*d);
void sortare(Capitala *C, int n);
void redactare(Capitala *C, int k);
void interschimbarea(Capitala *C,int element_1, int element_2);
Capitala* adaugare_sfarsit(Capitala* C, int *pn,Capitala a);
Capitala* adaugare_inceput(Capitala* C, int *pn, Capitala a);
Capitala* sterge(Capitala* C, int *pn,int k);
Capitala* inserare_dupa(Capitala* C, int *pn,Capitala a,int k);
Capitala* inserare_inainte(Capitala*C,int *pn, Capitala a, int k);
void citirea(Capitala *C, int n);
int salvare(Capitala* C,int n, char* fname);
int executie(Capitala* C, int n, char* fname);
printf("\nTara:");
fflush(stdin);
gets(C[i].tara);
2
printf("\nPopulatia:");
fflush(stdin);
scanf("%f",&C[i].popl);
printf("\nSuprafata:");
fflush(stdin);
scanf("%f", &C[i].supr);
printf("\nPrimarul:");
scanf("%s",&C[i].primarul);
}
return;
}
int cautare(Capitala*C,int n,char*d)
{
int i;
for(i=0; i<n; i++)
{
if(strcmp(C[i].den, d)==0)
{
return i;
}
}
return -1;
}
void sortare(Capitala*C,int n)
{
int i,k;
Capitala t;
for(i=0; i<n; i++)
{
for(k=0; k<n-1-i; k++)
{
if(strcmp(C[k].den,C[k+1].den)>0)
{
t=C[k];
C[k]=C[k+1];
C[k+1]=t;
}
}
}
return;
}
void interschimbarea(Capitala*C,int element_1,int element_2)
{
Capitala tmp;
tmp=C[element_1];
C[element_1]=C[element_2];
C[element_2]=tmp;
3
return;
}
void redactare(Capitala*C,int k)
{
int f;
printf("De modificat numele capitalei? (1/0):");
scanf("%d",&f);
if(f!=0)
{
printf("Dati numele capitalei:");
fflush(stdin);
gets(C[k].den);
}
printf("De modificat tara? (1/0): ");
scanf("%d", &f);
if(f!=0)
{
printf("Dati tara:");
scanf("%s", &C[k].tara);
}
printf("De modificat populatia? (1/0): ");
scanf("%d", &f);
if(f!=0)
{
printf("Dati populatia:");
scanf("%f", &C[k].popl);
}
printf("De modificat suprafata? (1/0): ");
scanf("%d", &f);
if(f!=0)
{
printf("Dati suprafata:");
scanf("%f", &C[k].supr);
}
printf("De modificat primarul? (1/0): ");
scanf("%d", &f);
if(f!=0)
{
printf("Dati primarul:");
scanf("%s", &C[k].primarul);
}
return;
}
Capitala* adaugare_sfarsit(Capitala* C, int *pn,Capitala a)
{
Capitala*B;
B=(Capitala*)realloc(C,((*pn)+1)*sizeof(Capitala));
if(B==NULL)
4
{
B[*pn]= a;
*pn=*pn+1;
return B;
}
Capitala* adaugare_inceput(Capitala* C, int *pn, Capitala a)
{
Capitala*B;
B=(Capitala*)realloc(C,((*pn)+1)*sizeof(Capitala));
if(B==NULL)
{
printf("Memoria nu a fost alocata!!!\n");
return B;
}
for(int i=*pn;i>0;i--)
{
B[i]=B[i-1];
}
B[0]=a;
*pn=*pn+1;
return B;
}
Capitala* sterge(Capitala* C, int *pn,int k)
{
Capitala*B;
int i;
for(i=k; i<*pn-1; i++)
{
C[i]=C[i+1];
}
B=(Capitala*)realloc(C,((*pn)-1)*sizeof(Capitala));
if(B==NULL)
{
return B;
}
*pn=*pn-1;
return B;
}
Capitala* inserare_dupa(Capitala* C, int *pn,Capitala a,int k)
{
Capitala*B;
int i;
B=(Capitala*)realloc(C,((*pn)+1)*sizeof(Capitala));
printf("Dupa ce element doriti sa inserati noul element:");
5
scanf("%d",&k);
if(B==NULL)
{
return B;
}
for(i=*pn; i>k; i--)
{
B[i]=B[i-1];
}
B[k]=a;
*pn=*pn+1;
return B;
}
Capitala* inserare_inainte(Capitala*C,int *pn, Capitala a, int k)
{
int i;
Capitala*B;
B=(Capitala*)realloc(C,((*pn)+1)*sizeof(Capitala));
printf("Inaintea carui element doriti sa inserati elementul nou:");
scanf("%d",&k);
if(B==NULL)
{
return B;
}
for(i=*pn; i>=k; i--)
{
B[i]=B[i-1];
}
B[k-1]=a;
*pn=*pn+1;
return B;
}
void citirea(Capitala* C, int n)
{
for(int i=0; i<n; i++)
{
printf("\n%d.Capitala:%s Tara:%s Populatia:%.2f Suprafata:%.2f Primarul:%s",i+1,C[i].den
,C[i].tara, C[i].popl, C[i].supr, C[i].primarul);
}
return;
}
int salvare(Capitala* C,int n, char* fname)
{
FILE *fq;
int i;
fq=fopen(fname,"w");
if(fq==NULL)
{
return 0;
}
6
for(i=0; i<n; i++)
{
fprintf(fq, "%s %s %f %f %s\n",C[i].den, &C[i].tara,&C[i].popl,&C[i].supr,&C[i].primarul);
}
fclose(fq);
return 1;
}
int executie(Capitala* C, int n, char* fname)
{
FILE *fp;
int i;
fp=fopen(fname,"r");
if(fp==NULL)
{
return 0;
}
for(i=0; i<n; i++)
{
fscanf(fp, "%s %s %f %f %s", C[i].den, C[i].tara,C[i].popl,C[i].supr,C[i].primarul);
}
fclose(fp);
return 1;
}
Funcţia mаin():
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "Capitala.c"
int main()
{
Capitala *C,*B, a;
char d[40],fname[40];
int n,nm,f, k=1,element_1,element_2;
printf("Dati numarul de capitale:");
scanf("%d",&n);
do
{
system("cls");
meniu();
printf("\nAlegeti optiunea din meniu: ");
scanf("%d", &nm);
switch(nm)
{
case 1:
C=(Capitala*)malloc(n* sizeof(Capitala));
if(C==NULL)
{
printf("Memoria nu a fost alocata");
7
exit(1);
}
printf("Memoria a fost alocata cu succes!!!\n");
printf("Pentru a continua apasati tasta Enter\n");
getch();
break;
case 2:
introducere(C,n);
printf("\nPentru a continua apasati tasta Enter");
getch();
break;
case 3:
printf("Informatii despre elementele tabloului:\n");
citirea(C,n);
getch();
break;
case 4:
printf("Dati denumirea Capitalei cautate:");
fflush(stdin);
gets(d);
k=cautare(C,n,d);
if(k<0)
{
printf("\nCapitala cautata nu a fost gasita.");
}
else
{
printf("\nCapitala cautata este:");
printf("\nDenumire:%s Tara:%s Populatia:%.2f Suprafata:%.2f Primarul:
%s",C[k].den,C[k].tara,C[k].popl,C[k].supr,C[k].primarul);
}
getch();
break;
case 5:
printf("Dati denumirea capitalei:");
fflush(stdin);
gets(d);
k=cautare(C,n,d);
if(k<0)
{
printf("\nCapitala cautata nu a fost gasita");
}
else
{
printf("Capitala cautata este:\n");
printf("Denumire:%s Tara:%s Populatia:%f Suprafata:%f Primarul:
%s\n",C[k].den,C[k].tara,C[k].popl,C[k].supr,C[k].primarul);
redactare(C,k);
}
8
printf("\nPentru a continua apasati tasta Enter");
getch();
break;
case 6:
printf("Alegeti elementele care trebuie de interschimbat:");
scanf("%d%d", &element_1,&element_2);
interschimbarea(C,element_1-1,element_2-1);
printf("Interschimbarea a avut loc\n");
printf("Pentru a continua apasati tasta Enter\n");
getch();
break;
case 7:
sortare(C,n);
printf("\nSortarea s-a efectuat cu succes!\n");
printf("Pentru a continua apasati tasta Enter");
getch();
break;
case 8:
printf("Introduceti informatiile despre noua capitala:\n");
printf("Denumirea capitalei:");
fflush(stdin);
gets(a.den);
printf("\nTara:");
fflush(stdin);
gets(a.tara);
printf("\nPopulatia:");
fflush(stdin);
scanf("%f", &a.popl);
printf("\nSuprafata:");
fflush(stdin);
scanf("%f", &a.supr);
printf("\nPrimarul:");
scanf("%s", &a.primarul );
B=adaugare_sfarsit(C, &n, a);
if(B==NULL)
{
printf("\nAdaugarea elementului la sfirsit nu a avut loc");
}
else
{
printf("\nAdaugarea elementului la sfirsit s-a efectuat cu succes");
C=B;
}
9
fflush(stdin);
gets(a.den);
printf("\nTara:");
fflush(stdin);
gets(a.tara);
printf("\nPopulatia:");
fflush(stdin);
scanf("%f", &a.popl);
printf("\nSuprafata:");
fflush(stdin);
scanf("%f", &a.supr);
printf("\nPrimarul:");
scanf("%s", &a.primarul );
B=adaugare_inceput(C, &n, a);
if(B==NULL)
{
printf("\nAdaugarea elementului la inceput nu a avut loc");
}
else
{
printf("\nAdaugarea elementului la inceput s-a efectuat cu succes");
C=B;
}
10
C=B;
}
11
}
else
{
printf("\nStergerea elementului s-a efectuat cu succes");
C=B;
}
}
printf("\nPentru a continua apasati tasta Enter");
getch();
break;
case 13:
printf("Dati numele fisierului:");
fflush(stdin);
gets(fname);
f=salvare(C,n,fname);
if(f==1)
printf("\nFisierul a fost salvat cu succes");
else
12
printf("\nAlegeti optiunea corecta din menu! ");
printf("\nPentru a continua apasati tasta Enter");
getch();
}
}
while(nm=!0);
}
13
14
15
16
17
Concluzie:
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 on-line al cursului Programarea Calculatoarelor pentru studenții gr.
CR201, CR-202, CR-203, RM-201, AI-201 (lector: dr., conf. univ. M. Kulev). Chișinău,
UTM, FCIM, 2020.
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 5.
https://www.wolframalpha.com/
18