Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 9

Universitatea Tehnică a Moldovei

Facultatea Calculatoare Informatică și Microelectronică


Specialitatea Securitate Informațională

RAPORT
despre lucrarea de laborator nr. 1

la Structuri de Date și Algoritmi

A îndeplinit: st.gr.SI-181 Marcoci Maxim

A controlat: Victoria Lazu


Sarcina: Crează un program care va calcula suma elementelor ce se află deasupra
diagonalei secundare a unei matrici cu elemente random.
Programul în C:
Prin variabile globale
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int matrice[50][50];
int a[200];
int i, j, m, n, s;

int random_num (int min, int max)


{ return rand()%(max-min+1)+min; }

void atr_valori_matrix (int m, int n)


{
srand((unsigned int)time(NULL));
for(i=0; i<m; i++)
for(j=0; j<n; j++)
matrice[i][j]=random_num(0,99);
}

void afis_matrice (int m, int n)


{
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf(" %d ", matrice[i][j]);
printf("\n");
}
}

void suma_secundara()
{
int i,j;
//validare a matricei (trebuie sa fie patratica)
if(n!=m) printf("\n Matricea nu este patratica !");
else
{
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if((i+j)<(m-1)) s+=matrice[i][j];
//suma elementelor de deasupra diagonalei secundara
printf("\n Suma este: %d", s);
}
}

int main()
{
printf("Dati nr. de randuri ale matricei < 50: \t");
scanf("%d",&m);
printf("Dati nr. de coloane ale matricei < 50: \t");
scanf("%d",&n);
atr_valori_matrix(m, n);
printf("\n\n");

afis_matrice(m, n);

printf("\n\n");

suma_secundara();

getch();
return 0;
}

Prin adresă:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int random_num (int min, int max)


{ return rand()%(max-min+1)+min; }

void atr_valori_matrix (int m, int n)


{ int matrice[50][50];
int i,j;
srand((unsigned int)time(NULL));
for(i=0; i<m; i++)
for(j=0; j<n; j++)
matrice[i][j]=random_num(0,99);
}

void afis_matrice (int m, int n)


{ int matrice[50][50];
int i,j;
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf(" %d ", matrice[i][j]);
printf("\n");
}
}

void suma_secundara(int m, int n)


{
int matrice[50][50];
int i,j,s;
//validare a matricei (trebuie sa fie patratica)
if(n!=m) printf("\n Matricea nu este patratica !");
else
{
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if((i+j)<(n-1)) s+=matrice[i][j];
//suma elementelor de deasupra diagonalei secundara
printf("\n Suma este: %d", s);
}
}

int main()
{ int m,n;
printf("Dati nr. de randuri ale matricei < 50: \t");
scanf("%d",&m);
printf("Dati nr. de coloane ale matricei < 50: \t");
scanf("%d",&n);
atr_valori_matrix(m, n);

printf("\n\n");

afis_matrice(m, n);

printf("\n\n");

suma_secundara(m, n);

return 0;
}
Variabile dinamice(pointeri):
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int random_num (int min, int max)


{ return rand()%(max-min+1)+min; }

int **atr_valori_matrix (int m, int n)


{ int **matrice = (int**) malloc( m * sizeof(int*) ), i, j;
//Alocare de memorie
for(i=0; i<m; i++)
{
*(matrice+i) = (int*) malloc( n * sizeof(int) );
//Completarea matricii
for(j=0; j<n; j++)
*(*(matrice+i)+j)=random_num(0,90);
}
//Returnarea valorii
return matrice;
}

void afis_matrice (int ** matrice, int m, int n)


{ int i, j;
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
printf(" %d ", *(*(matrice+i)+j));
printf("\n");
}
}

int *suma_secundara (int** matrice, int m, int n)


{
int *s;
int i, j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if((i+j)<(m-1)) *s+=*(matrice[i][j]);

int main()
{ srand((unsigned int)time(NULL));
int i, m, n;
printf("Dati nr. de randuri ale matricei < 50: \t");
scanf("%i",&m);
printf("Dati nr. de coloane ale matricei < 50: \t");
scanf("%i",&n);

int **matrice = atr_valori_matrix(m, n);

printf("\n\n");

afis_matrice(matrice, m, n);
printf("\n\n");
suma_secundara (matrice, m, n);
return 0;
}

Concluzie: În această lucrare de laborator am aflat despre variabile dinamice, adrese și variabile
globale, atît teoretic cît și practic, fiind utilizate în program, suma calculată prin acest program mi-a
dezvoltat abilitatățile de programare și anume ce ține de matrice.

You might also like