Sunteți pe pagina 1din 7

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("\n1.Alocarea dinamica a memoriei pentru tablou bidimensional.\n");

printf("2.Introducerea elementelor tabloului.\n");

printf("3.Completarea tabloului cu elemente aleatorii.\n");

printf("4.Sortarea elementelor tabloului.\n");

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

printf("6.Eliberarea memoriei alocate pentru tablou.\n");

printf("0.Iesire 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:

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