Sunteți pe pagina 1din 4

Ministerul Educației, Culturii și Cercetării

al Republicii Moldova

Universitatea Tehnică a Moldovei

Departamentul Mecanica Teoretică

Raport
Despre lucrările de laborator
la Programarea Calculatoarelor
Varianta 19

A îndeplinit st.gr.TI-207 Posmag Gheorghe

A controlat ast.univ.,Ignatov Maxim

Chișinău 2020
Tema: Alocarea dinamică a memoriei pentru tablourile bidimensionale. Utilizarea funcțiilor și a pointerilor

Varianta 19

Scopul lucrării:

Programarea algoritmilor de prelucrare a tablourilor bidimensionale prin utilizarea funcțiilor, pointerilor și alocarea
dinamică a memoriei pentru tablou
Sarcina (conform variantelor):

Scrieți un program care citește de la tastatură numărul n>1 de rânduri și numărul m>1 de coloane ale tabloului
bidimensional (mnatricei), apoi citește de la tastatură aceste n X m elemente ale tabloului, efectuează calculele
indicate în variantă și afișează pe ecran rezultatul:

1. Listingul programului

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int** alloc_memory(int);
void rand_matrix(int** a, int n);
void input_for_board(int **a,int n);
void print_matrix(int** a , int n);
void neg_poz_elements(int** a ,int n,float med);
float med_artim(int** a,int n);
void destroy (int ** a,int n);
int main(void) {
srand(time(0));
int **matrix;
int n;
float med = 0;
int a;
printf("Marimia matricii patratice = ");
scanf("%d",&n);
if(n > 1 ){
printf("Tasteaza 1 pentru a umple matricia cu rendom cifre sau 2 pentru a o
umple de la claviatura: ");
scanf("%d",&a);
if(a == 1) {
matrix = alloc_memory(n);
rand_matrix(matrix,n);
print_matrix(matrix,n);
med = med_artim(matrix,n);
printf("Media diagonalei:%0.2f",med);
neg_poz_elements(matrix,n,med);
destroy(matrix,n);
}
if(a == 2) {
matrix = alloc_memory(n);
input_for_board(matrix,n);
print_matrix(matrix,n);
med = med_artim(matrix,n);
printf("Media diagonalei:%0.2f",med);
neg_poz_elements(matrix,n,med);
destroy(matrix,n);

}
}
else
printf("Error");
return 0;
}

int** alloc_memory(int n) {
int **a;
a = (int**) calloc (n,sizeof(int*));
for(int i = 0; i < n; i++) {
a[i] = (int*) calloc (n,sizeof(int));
}
return a;
}
void rand_matrix(int** a, int n) {
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
a[i][j] = rand() % 20 - 10;
}
}
}
void input_for_board(int **a,int n) {
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++){
printf("matrix[%d][%d] = ",i,j);
scanf("%d",&a[i][j]);
}
}
}
void print_matrix(int** a , int n) {
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
printf("%4d",a[i][j]);

}
printf("\n");
}
}
void neg_poz_elements(int** a ,int n,float med) {
int sum_neg = 0;
int prod = 1;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(a[i][j] < 0 && j % 2 == 1){
sum_neg += a[i][j];
}
if(a[i][j] > 0 && (float)a[i][j] > med) {
prod *= a[i][j];
}
}
}
printf("\nSuma elementelor neg din coloanele impare este:%d",sum_neg);
printf("\nProdusul elementelor poz mai mari ca media artimetica a diagonalei este:
%d",prod);
}
float med_artim(int** a,int n) {
float med = 0;
int sum = 0;
int nr = 0;
for(int i = 0; i < n;i++) {
for(int j = 0; j < n; j++) {
if(i == j){
sum += a[i][j];
nr++;
}
}
}
med = sum / (float) nr;
return med;
}
void destroy (int ** a,int n) {
for(int i = 0 ; i < n; i++) {
free(a[i]);
}
free(a);
}

2. Rezulatul programului

Concluzie
În această lucrare de laborator am determinat suma elementelor negative din coloanele
impare și produsul elementelor pozitive mai mari ca media aritmetica a elementelor
situate pe diagonala principală.

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