Sunteți pe pagina 1din 8

Ministerul Educației și Tineretului al Republicii Moldov

Universitatea Tehnică a Moldovei

Catedra: Calculatoare si Rețele

RAPORT
Lucrare de laborator Nr.4
Programarea Calculatoarelor

Efectuat: St.gr.CR-192
Lungu Sergiu

A verificat:
Munteanu Silvia

Chișinău 2019
Lucrare 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.

Formularea condiții problemei: 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. Să se sorteze a doua şi penultima linie ale tabloului în ordine descendentă cu ajutorul metodei
de sortare prin selecţie şi schimb.
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.

Textul programului in limbajul “C”:


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

void Input1(int** tab, int n, int m) {


printf("Intoducem tabloul: \n");
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
scanf("%d", &tab[i][j]);
printf("Tabloul a fost introdus\n");
}

void Input2(int** tab, int n, int m) {


for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
tab[i][j] = rand() % 100;

void Sort(int** tab, int n, int m)


{

int k = 1, temp;
int j;
int i;
for (i = 0; i < m - 1; i++)
for (j = i + 1; j < m; j++)
if (tab[k][j] > tab[k][i]) {
temp = tab[k][j];
tab[k][j] = tab[k][i];
tab[k][i] = temp;
}
k = n - 2;
for ( i = 0; i < m - 1; i++)
for (j = i + 1; j < m; j++)
if (tab[k][j] > tab[k][i]){
temp = tab[k][j];
tab[k][j] = tab[k][i];
tab[k][i] = temp;
}
}

void PrintMatr(int** tab, int n, int m) {


printf("Tabloul: \n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
printf("%d\t", tab[i][j]);
printf("\n");
}
}

int main() {
int** tab = NULL, n, m, p = 0;
while (p != 7) {

printf("Menu\n1 - Alocarea tabloului de n linii si m coloane\n2 - Introducerea datelor de la tastatura\n");


printf("3 - Introducerea unor date random in tablou\n4 - Sortarea tabloului\n");
printf("5 - Afisarea tabloului\n6 - Eliberarea memoriei\n7 - Iesire din program\n");
scanf("%d", &p);
switch (p) {
case 1:
printf("Rinduri: "); scanf("%d", &n);
printf("Coloane: "); scanf("%d", &m);
tab = (int**)malloc(n * sizeof(int*)); //
for (int i = 0; i < n; i++) {
tab[i] = (int*)malloc(m * sizeof(int));
for (int j = 0; j < m; j++)
tab[i][j] = 0;
}
printf("Tabloul din %d linii si %d coloane a fost creata\n", n, m);
_getch();
break;
case 2:
Input1(tab, n, m);
_getch();
break;
case 3:
Input2(tab, n, m);
printf("Tabloul a fost completata cu numere random\n");
_getch();
break;
case 4:
Sort(tab, n, m);
printf("Sortarea\n");
_getch();
break;
case 5:
PrintMatr(tab, n, m);
_getch();
break;
case 6:
for (int i = 0; i < n; i++)
free(tab[i]);
free(tab);
printf("Tabloul a fost stearsa\n");
_getch();
break;
case 7:
return 0;
break;
default:
printf("Try again\n");
_getch();
break;
}
}
_getch();
return 0;
}
Schema logica:
Concluzie:
În urma elaborării lucrării de laborator ne-am format deprinderi de lucru cu funcții
și putem observa cu ușurință utilitatea acestora atunci când avem nevoie de a
efectua anumite instrucțiuni in mod repetat.
Tot odată utilizând funcțiile obținem o claritate mai bună a codului și putem apela
o funcție de câte ori dorim și putem să o utilizăm și pentru parametri diferite.
De asemenea ne-am format deprinderi de lucru în ceea ce privește alocarea
dinamică a memoriei și a pointerilor.
Alocând dinamic memorie putem gestiona mai eficient memoria calculatorului și
acest fapt este ușor de observat atunci când calculatorul are puțină memorie la
dispoziție sau programele sunt voluminoase și necesită cantități mari de memorie.

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