Ministerul Educaţiei, Culturii și Cercetării al Republicii
Moldova
Universitatea Tehnică a Moldovei
RAPORT
Lucrarea de laborator nr. 4
la Programarea Calculatoarelor
A efectuat:
st. gr. RM-201 Ghirea Gabriel
A verificat:
dr., conf. univ. S. Stefan
Chişinău -2020
Lucrarea de laborator nr. 4
Tema: Alocarea dinamică a memoriei pentru tablourile
bidimensionale. Utilizarea funcţiilor şi a pointerilor
Scopul lucrării: Programarea algoritmilor de prelucrare a tablourilor bidimensionale prin
utilizarea funcţiilor, pointerilor şi alocarea dinamică a memoriei pentru tablou.
Sarcina (cоnform variantelor):
Pentru tabloul bidimensional dat din n linii şi m coloane să se afişeze la ecran următorul
meniu de opţiuni:
1. Alocarea dinamică a memoriei pentru tablourile bidimensionale
2. Introducerea elementelor tabloului de la tastatură
3. Completarea tabloului cu valori aleatorii
4. Sortarea elementelor tabloului (cоnform variantelor)
5. Afișarea elementelor tabloului la ecran
6. Eliberarea memoriei alocate pentru tablou
0. Ieșire din program
Să se elaboreze funcţiile pentru realizarea opţiunilor meniului.
Varianta 6.
Să se sorteze coloanele tabloului în ordine descendentă cu ajutorul metodei de sortare prin
selecţie şi schimb.
Codul programului în limbajul C:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
float **addmem(int n,int m);
void addnum(float **a,int n,int m);
void randnum(float **a,int n,int m);
void sortline(float **a,int n,int m);
void show(float **a,int n,int m);
void freemem (float **a,int n);
int main(void)
int n,m,nr;
float **a;
srand(time(NULL));
printf("Prelucrarea tablourilor bidimensionale\n");
printf("Numarul de linii:\n");
scanf("%d",&n);
printf("Numarul de coloane:\n");
scanf("%d",&m);
while(1)
printf("\[Link] dinamica a memoriei pentru tablou bidimensional.\n");
printf("[Link] elementelor tabloului.\n");
printf("[Link] tabloului cu elemente aleatorii.\n");
printf("[Link] elementelor tabloului.\n");
printf("[Link] elementelor tabloului la ecran.\n");
printf("[Link] memoriei alocate pentru tablou.\n");
printf("[Link] din program.\n");
scanf("%d",&nr);
switch(nr)
case 1:
a = addmem(n,m);
break;
case 2:
addnum(a,n,m);
break;
case 3:
randnum(a, n, m);
break;
case 4:
sortline (a, n, m);
case 5:
show(a, n, m);
break;
case 6:
freemem(a,n);
break;
case 0:
printf("\nExit\n");
return 0;
default :
printf("Error\n\n");
float **addmem(int n,int m)
int i;
float **a;
a=(float**)malloc(n*sizeof(float*));
for(i=0; i<n; i++)
a[i]=(float*)malloc(m*sizeof(float));
if (a==NULL)
printf("Error\n\n");
else
printf("Succes\n\n");
return a;
void addnum(float **a,int n,int m)
int i,j;
for(i=0; i<n; i++)
for(j=0; j<m; j++)
scanf("%f",&a[i][j]);
void randnum(float **a,int n,int m)
srand(time(NULL));
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
a[i][j]=rand()%100-rand()%100;
}
void sortline(float **a,int n,int m)
int i,j,x;
float temp;
for(x=0; x<n; x++){
for(i=0; i<n-1; i++){
for(j=0; j<m; j++){
if(a[i][j]<a[i+1][j]){
temp=a[i][j];
a[i][j]=a[i+1][j];
a[i+1][j]=temp;}}}}
void show(float **a,int n,int m)
int i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("%.2f\t",a[i][j]);}
printf("\n");}
void freemem (float **a,int n)
int i;
for (i=0; i<n; i++)
free(a[i]);
free(a);
return;
Rezultatele testării și funcţionării programului: