Laborator 5
Obiectiv: Tablouri bidimensionale
Teorie:
Declaratia: tip nume[n][m];
n-dim pe linie
m-dim pe coloana
Referire la elem unui tablou: se precizeaza numele, in interiorul parantezelor se
precizeaza indicele corespunzator liniei si a [Link] a[2][3]...
Tablourile se pot initializa la declaratie: int m[][]={{1,2,3},{1,2,3},{1,2,3}};
int a[][4]={{1,4,2},{2,5}}; a are 2 linii si 4
coloane; doar 5 elemente sunt initializare. Valorile neinitializate au o valoare
imprevizibila. Daca tabloul este declarat static sau global atunci elem neinitializate se
initializeaza automat cu valoarea 0.
1. Program care citeste de la tastatura elementele intregi ale unei matrici patratice de
ordinul n, afiseaza matricea, calculeaza si afiseaza suma elem. de pe diag. principala,
produsul elementelor de pe diag. secundara si afiseaza numarul de elem impare de sub
diag. principala.
#include<stdio.h>
#include<conio.h>
void main()
{int a[20][20],n,i,j,nr=0;
long s=0,p=1;
printf("\Introduceti n: ");
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{printf("a[%d][%d]=",i,j);
scanf("%d",&a[i][j]);}
printf("\nMatricea este:\n");
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
printf("%d\t",a[i][j]);
printf("\n");}
for(i=0;i<n;i++)
for(j=0;j<n;j++)if(i==j)
s=s+a[i][j];
for(i=0;i<n;i++)
for(j=0;j<n;j++)if(j==n-1-i)
p=p*a[i][j];
for(i=1;i<n;i++)
for(j=0;j<i;j++)
if(a[i][j]%2!=0)nr++;
printf("\nSuma elem de pe diag princ este %ld",s);
printf("\nProdusul elem de pe diag sec este %ld",p);
printf("\nNr. elem impare de sub diag princ este %d",nr);
getch();
}
2. Se citesc de la tastatura notele celor n studenti dintr-o grupa la cele m materii. Sa
se afiseze notele studentilor, mediile studentilor si nr. de examene nepromovate
pentru fiecare student, media grupei, si sa se ordoneze crescator mediile
studentilor.
#include<stdio.h>
#include<conio.h>
void main()
{int note[20][10],n,m,i,j,nep[20],val,gasit,cod;
float med[20],medg,aux;
printf("\nIntroduceti nr stud ");
scanf("%d",&n);
printf("\nIntroduceti nr de materii ");
scanf("%d",&m);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{printf("\nIntroduceti notelele stud %d la materia %d ",i+1,j+1);
scanf("%d",¬e[i][j]);}
printf("\nNotele sunt\n");
for(i=0;i<n;i++)
{for(j=0;j<m;j++)
printf("%d\t",note[i][j]);
printf("\n");}
medg=0;
for(i=0;i<n;i++)
{med[i]=0;nep[i]=0;
for(j=0;j<m;j++)
{med[i]+=note[i][j];
if(note[i][j]<=4) nep[i]++;
}
med[i]=med[i]/m;
medg+=med[i];
}
medg=medg/n;
printf("\nMediile sunt:");
for(i=0;i<n;i++)
printf("%.2f\t",med[i]);
printf("\nNr. ex. nepromov. sunt:");
for(i=0;i<n;i++)
printf("%d\t",nep[i]);
printf("\nMediag este: %.2f", medg);
do{
cod=1;
for(i=0;i<n-1;i++)
if(med[i]<med[i+1])
{aux=med[i];
med[i]=med[i+1];
med[i+1]=aux;
cod=0;
}
}
while(cod==0);
printf("\nMediie ordonate sunt:");
for(i=0;i<n;i++)
printf("%.2f\t",med[i]);
getch();
}
Temă
1. Fie două matrici pătratice de ordinul n. Să se determine suma şi produsul celor
două matrici.
2. Să se afişeze numărul elementelor pozitive, numărul elementelor nule şi numărul
elementelor negative dintr-o matrice dată cu n linii şi m coloane.
3. Să se afişeze pentru o matrice citită de la tastatură, matricea transpusă.
4. Se consideră o matrice de ordin n cu elemente de tip întreg. Să se determine nr.
elem. pozitive de sub diagonala principală, suma elementelor pare de deasupra
diagonalei secundare, elementul maxim şi minim din matrice, produsul elem
impare de sub diagonala secundară şi nr. elem. negative de deasupra diagonalei
principale.
5. Se citesc de la tastatura notele celor n studenti dintr-o grupa la cele m materii. Sa
se afiseze notele studentilor şi mediile studenţilor care au toate notele (în
celelalte cazuri să afişeze 4)