Sunteți pe pagina 1din 8

S8.

Probleme cu matrice în limbajul C


Cuprins

1. Probleme rezolvate și explicații


1. Problema 1
Să se determine suma de pe fiecare linie a unei matrice dreptunghiulare.

 a 11 a12 ... a 1 n 
Fie matricea  
 a 2 1 a 22 ... a 2n 
Amxn  
.......................
 
 ... 
 am1 am 2 a mn 

Rezultatul este un vector Sm, care conține suma de pe fiecare linie a matricei. Algoritmul
recursiv pentru determinarea elementului s(i), cu i=1,m este descris astfel:
- formula de start: s(i)=0;
- formula recursivă: s(i)=s(i)+a(i,j), cu j=1,n.
Program C:
#include <stdio.h>
void main()
{
int m,n,i,j;
float a[40][30],s[40];
printf("m="); scanf("%d", &m);
printf("n="); scanf("%d", &n);
for (i = 0; i < m;i++)
for (j = 0; j < n; j++)
{
printf("a[%d][%d]=",i,j);
scanf("%f",&a[i][j]);
}

for (i = 0; i < m; i++)


{
s[i] = 0;
for (j = 0; j < n; j++)
s[i] = s[i] + a[i][j];//s[i]+=a[i][j];
}
printf("Sumele pe linii sunt:\n");
for (i = 0; i < m; i++)
printf("%4.2f ", s[i]);
}
1. Problema 2
Să se determine maximul de pe fiecare coloană a unei matrice dreptunghiulare.

 a11 a12 ... a1n 


Fie matricea  
 a 21 a 22 ... a 2n 
Amxn 
.......................
 
 
 a m 1 a m 2 ... a mn 
Rezultatul este un vector max cu n elemente, care conține maximul de pe fiecare coloană a matricei. Algoritmul
recursiv pentru determinarea elementului max(j), cu j=1,n este descris astfel:
•formula de start: max(j)=a(1,j);
•formula recursivă: max(j)=maxim(max(j),a(i,j)), cu i=2,m.
Program C:
#include <stdio.h>
void main()
{
int m, n, i, j;
float a[40][30], max[30];
printf("m="); scanf("%d", &m);
printf("n="); scanf("%d", &n);
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
{
printf("a[%d][%d]=", i, j);
scanf("%f", &a[i][j]);
}
 
for (j = 0; j < n; j++)
{
max[j] = a[0][j];
for (i = 1; i < m; i++)
if (a[i][j]>max[j])
max[j] = a[i][j];
}
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
printf("%6.2f ", a[i][j]);
printf("\n");
}
printf("Maximul de pe fiecare coloana este:\n");
for (j = 0; j < n; j++)
printf("%4.2f ", max[j]);
}
1. Problema 3
Să se determine toate aparițiile unei valori date într-o matrice.

Matricea va fi parcursă lexicografic, element cu element.


Rezultatul va fi memorat în doi vectori de poziții (unul pentru linii, altul pentru coloane).
De fiecare dată când se găseşte valoarea căutată, se incrementează dimensiunea (k) a vectorilor și se
salvează poziţia acesteia (linia şi coloana elementului respec­tiv).
În final, dacă variabila k este egală cu 0, înseamnă că valoarea căutată nu a fost regăsită şi se
afişează un mesaj corespunzător. În caz contrar, se vor afișa toate pozițiile găsite.
Program C:
#include <stdio.h>
void main()
{
int m, n, i, j, k, lin[150], col[150];
float a[10][15],val;
printf("m="); scanf("%d", &m);
printf("n="); scanf("%d", &n);
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
{
printf("a[%d][%d]=", i, j);
scanf("%f", &a[i][j]);
}
printf("val="); scanf("%f", &val);
k=0;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
if(a[i][j]==val)
{
lin[k]=i;col[k]=j;
k++;
}
if (k!=0)
for(i=0;i<k;i++)
printf("(%d,%d);",lin[i],col[i]);
else
printf("Valoare neregasita!\n");
}

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