Sunteți pe pagina 1din 5

Lucrare de laborator –

Tablouri bidimensionale (matrici) (Partea 2)

AplicaŃia 1: Să se citească de la tastatură şi apoi să se afişeze pe ecran o matrice


pătratică de numere întregi, de dimensiune n x n.
Programul pentru rezolvarea acestei probleme este următorul:

#include<stdio.h>

int main(void) {
int n,x[20][20],i,j;
printf("n=");
scanf("%i",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("x[%i][%i]=",i,j);
scanf("%i",&x[i][j]);
}
printf("Matricea este:\n”);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4i",x[i][j]);
printf("\n");
}
return 0;
}

AplicaŃia 2: Fie x o matrice pătratică de numere întregi, de dimensiune nxn. Să se


calculeze suma elementelor situate pe diagonala principală a matricei (urma matricei x).
Programul pentru rezolvarea acestei probleme este următorul:

#include<stdio.h>

int main(void) {
int n,x[20][20],i,j,S;
printf("n=");
scanf("%i",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("x[%i][%i]=",i,j);
scanf("%i",&x[i][j]);
}
printf("Matricea este:\n”);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
Lucrare de laborator

printf("%4i",x[i][j]);
printf("\n");
}
S=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i==j)
S+=x[i][j];
printf("\nSuma elementelor de pe diagonala principala=%i",S);
return 0;
}

ObservaŃie: Mai eficient, suma se poate determina astfel:

#include<stdio.h>

int main(void) {
int n,x[20][20],i,j,S;
printf("n=");
scanf("%i",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("x[%i][%i]=",i,j);
scanf("%i",&x[i][j]);
}
printf("Matricea este:\n”);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4i",x[i][j]);
printf("\n");
}
S=0;
for(i=0;i<n;i++)
S+=x[i][i];
printf("\nSuma elementelor de pe diagonala principala=%i",S);
return 0;
}

ObservaŃie:
- Pe diagonala principală: i=j
- Deasupra diagonalei principale: i<j
- Dedesubtul diagonalei principale: i>j
- Pe diagonala secundară: j=n-i-1
- Deasupra diagonalei secundare: j<n-i-1
- Dedesubtul diagonalei secundare: j>n-i-1

AplicaŃia 3: Fie x o matrice de numere întregi, de dimensiune nxn. Să se afişeze şi să


se numere elementele pare situate deasupra diagonalei secundare în matrice.
Programul pentru rezolvarea acestei probleme este următorul:

2
Tablouri bidimensionale (matrici) (2)

#include<stdio.h>

int main(void) {
int n,x[20][20],i,j,nr;
printf("n=");
scanf("%i",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("x[%i][%i]=",i,j);
scanf("%i",&x[i][j]);
}
printf("Matricea este:\n”);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4i",x[i][j]);
printf("\n");
}
nr=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(j<n-i-1 && x[i][j]%2==0)
{
printf("\n%i",x[i][j]);
nr++;
}
}
printf("\nNumarul elementelor pare situate deasupra diagonalei secundare=%i",nr);
return 0;
}

ObservaŃie: Mai eficient, se poate rezolva astfel:

.
.
.
nr=0;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(x[i][j]%2==0)
{
printf("\n%i",x[i][j]);
nr++;
}
}
.
.
.

3
Lucrare de laborator

AplicaŃia 4: Fie x o matrice pătratică de numere întregi, de dimensiune nxn. Să se


calculeze media aritmetică a numerelor divizibile cu 5 situate pe diagonala secundară în
matrice.
Programul pentru rezolvarea acestei probleme este următorul:

#include<stdio.h>

int main(void) {
int n,x[20][20],i,j,nr,S;
float ma;
printf("n=");
scanf("%i",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("x[%i][%i]=",i,j);
scanf("%i",&x[i][j]);
}
printf("Matricea este:\n”);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4i",x[i][j]);
printf("\n");
}
S=0;nr=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(j==n-i-1 && x[i][j]%5==0)
{
S+=x[i][j];
nr++;
}
if(nr!=0)
{
ma=(float)S/nr;
printf("\nMedia arit. a nr. divizibile cu 5 de pe diagonala secundara este %f”,ma);
}
else printf("\nNu exista numere divizibile cu 5 pe diagonala secundara”);
return 0;
}

ObservaŃie: Mai eficient, se poate rezolva astfel:

....
for(i=0;i<n;i++)
if(x[i][n-i-1]%5==0)
{
S+=x[i][n-i-1];
nr++;
}
....

4
Tablouri bidimensionale (matrici) (2)

AplicaŃia 5: Fie x o matrice pătratică de numere reale, de dimensiune nxn. Să se


determine elementul minim dintre elementele situate atât deasupra diagonalei principale, cât
şi dedesubtul diagonalei secundare în matrice.
Programul pentru rezolvarea acestei probleme este următorul:

#include<stdio.h>
#include<values.h>

int main(void) {
int n,i,j;
float x[20][20],min;
printf("n=");
scanf("%i",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("x[%i][%i]=",i,j);
scanf("%f",&x[i][j]);
}
printf("Matricea este:\n”);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5.2f",x[i][j]);
printf("\n");
}
min=MAXINT;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(x[i][j]<min && i<j && j>n-i-1)
min=x[i][j];
printf("\nMinimul este %f”,min);
return 0;
}

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