Sunteți pe pagina 1din 19

Matrici in C++

Probleme rezolvate
O matrice este o forma de organizare tabelara a unor elemente care au acelsi tip,
componentele acesteia putand fi identificate printr-un nume urmat (intre paranteze
drepte) de pozitia acestora in cadrul vectorului. Identificarea pozitiei in cadrul
matricii se realizeaza prin specificarea liniei si coloanei pe care se afla
elementul matricii.

Declaratia unei matrici se realizeaza prin specificarea tipului componentelor


matricii, identificatorul matricii urmat apoi de dimensiunea acesteia intre
paranteze drepte (numarul de linii si de coloane ale matricii):

int M[5][6]; - declara o matrice de 5 de linii si 6 coloane continand


numere intregi
float F[10][15]; - declara o matrice de 10 linii si 15 coloane continand
numere reale
char C[20][50]; - declara o matrice de 20 de linii si 50 de coloane continand
caractere alfanumerice
Observatie: Liniile si coloanele matricii se numara incapand de la valoarea 0.
Astfel, prima line, respectiv prima coloana a matricii este linia/coloana 0, a doua
linie/coloana este 1, s.a.m.d.:

int M[5][6];

Un caz particular de matrice este matricea patratica, caz in care numarul de linii
este egal cu numarul de coloane:

int M[5][5];

Introducerea/afisarea componentelor unei matrici sunt de regula operatii realizate


cu ajutorul structurilor repetitive, in principal folosindu-se structura FOR. Avand
in vedere ca trebuie sa introducem/afisam niste valori aflate intr-o matrice, avand
deci 2 dimensiuni, vom folosi cate o structura repetitiva pentru fiecare
dimensiune: una reprezentand linia iar cealalta reprezentand coloana pe care se
afla elementul matricii:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include <iostream>
using namespace std;
int main()
{
int i, j, m, n, M[10][10];
cout<<"Introduceti numarul de linii: m=";
cin>>m;
cout<<"Introduceti numarul de coloane: n=";
cin>>n;
cout<<"Introduceti numerele:"<<endl;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
cout<<"M["<<i<<"]["<<j<<"]=";cin>>M[i][j];
}
}
Introduceti numarul de linii: m=2
Introduceti numarul de coloane: n=3
Introduceti numerele:
M[0][0]=6
M[0][1]=2
M[0][2]=9
M[1][0]=3
M[1][1]=4
M[1][2]=6

Atentie: In programul de mai sus variabila M, care reprezinta matricea, este


diferita de variabila m, care reprezinta numarul de linii ale matricii M. Vezi aici
declararea variabilelor.

Initializarea matricilor se mai poate face de asemenea fara introducerea de la


tastatura ci direct din faza declaratiei, astfel:

1
2
3
4
5
6
7
8
9
10
11
12
13 #include <iostream>
using namespace std;
int main()
{
int i, j;
int M[2][3]={6,2,9,3,4,6};
cout<<"Elementele sirului sunt urmatoarele:"<<endl;
for (i=0;i<2;i++)
for (j=0;j<3;j++)
{
cout<<"M["<<i<<"]["<<j<<"]="<<M[i][j]<<endl;
}
}
Elementele matricii sunt urmatoarele:
M[0][0]=6
M[0][1]=2
M[0][2]=9
M[1][0]=3
M[1][1]=4
M[1][2]=6

Exemplu: Sa se calculeze suma elementelor unei matrici de m linii si n coloane


continand numere naturale oarecare. Numarul de linii, coloare, respectiv elemntele
componente ale matricii vor fi introduse de la tastatura.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #include <iostream>
using namespace std;
int main()
{
int i, j, m, n, M[10][10], suma;
cout<<"Introduceti numarul de linii: m=";
cin>>m;
cout<<"Introduceti numarul de coloane: n=";
cin>>n;
suma=0;
cout<<"Introduceti numerele:"<<endl;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
cout<<"M["<<i<<"]["<<j<<"]=";cin>>M[i][j];
suma=suma+M[i][j];
}
cout<<"Suma elementelor matricii este: "<<suma<<endl;
}
Introduceti numarul de linii: m=2
Introduceti numarul de coloane: n=3
Introduceti numerele:
M[0][0]=6
M[0][1]=2
M[0][2]=9
M[1][0]=3
M[1][1]=4
M[1][2]=6
Suma elementelor matricii este: 30

Probleme rezolvate
1. Sa se calculeze media aritmetica a elementelor unei matrici su m linii si n
coloane. Solutie
2. Sa se calculeze suma elementelor de pe diagonala principala a unei matrici
patratice. Solutie
3. Sa se calculeze produsul elementelor de pe diagonala secunadara a unei
matrici patratice. Solutie
4. Sa se calculeze suma elemntelor de pe fiecare linie a unei matrici de
dimensiune m x n. Solutie
5. Sa se calculeze suma elemntelor de pe fiecare coloana a unei matrici de
dimensiune m x n. Solutie
6. Sa se afiseze transpusa unei matrici. Solutie
7. Sa se afizeze matricea obtinuta prin adunarea a doua matrici.
Solutie
8. Sa se afizeze matricea obtinuta din produsul a doua matrici.
Solutie
9. Sa se afiseze elementele aflate deasupra diagonalei principale a unei matrici
si sa se afiseze suma acestora. Solutie
10. Sa se afiseze elementele aflate sub diagonala principala a unei matrici si sa
se afiseze suma acestora. Solutie
11. Sa se afiseze cate numere sunt pozitive, negative, respectiv nule, intr-o
matrice bidimensionala. Solutie
12. Sa se afiseze matricea obtinuta in urma eliminarii penultimei linii,
respectiv coloane din matricea data. Solutie
Rezolvari
1. Sa se calculeze media aritmetica a elementelor unei matrici su m linii si n
coloane.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 #include <iostream>
using namespace std;
int main()
{
int n,m,i,j,a[20][20];
int nr,s=0;
cout<<"m=";cin>>m;
cout<<"n=";cin>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
cout<<"Matricea este:"<<endl;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
s=s+a[i][j];
nr=m*n;
cout<<"Matricea contine:"<<nr<<" elemente"<<endl;
cout<<"Suma elementelor matricii este:"<<s<<endl;
cout<<"Media aritmetica a acestora este: "<<(float)s/nr;
return 0;
}

2. Sa se calculeze suma elementelor de pe diagonala principala a unei matrici


patratice.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 #include <iostream>
using namespace std;
int main()
{
int n,i,j,a[20][20],s=0;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
cout<<"Matricea este:"<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
for(i=1;i<=n;i++)
s=s+a[i][i];
cout<<"Suma elementelor de pe diagonala principala a matricii este:"<<s<<endl;
return 0;
}

3. Sa se calculeze produsul elementelor de pe diagonala secunadara a unei


matrici patratice.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 #include <iostream>
using namespace std;
int main()
{
int n,i,j,a[20][20],p=1;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
cout<<"Matricea este:"<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
for(i=1;i<=n;i++)
p=p*a[i][n-i+1];
cout<<"Produsul elementelor de pe secundara a matricii este:"<<p<<endl;
return 0;
}

4. Sa se calculeze suma elementelor de pe fiecare linie a unei matrici de


dimensiune m x n.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include <iostream>
using namespace std;
int main()
{
int m,n,i,j,a[20][20],s;
cout<<"m=";cin>>m;
cout<<"n=";cin>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
cout<<"Matricea este:"<<endl;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
for(i=1;i<=m;i++)
{
s=0;
for(j=1;j<=n;j++)
s=s+a[i][j];
cout<<"Suma elementelor de pe linia "<<i<<" este: "<<s<<endl;
}
return 0;
}

5. Sa se calculeze suma elementelor de pe fiecare coloana a unei matrici de


dimensiune m x n.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include <iostream>
using namespace std;
int main()
{
int m,n,i,j,a[20][20],s;
cout<<"m=";cin>>m;
cout<<"n=";cin>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
cout<<"Matricea este:"<<endl;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
for(j=1;j<=n;j++)
{
s=0;
for(i=1;i<=m;i++)
s=s+a[i][j];
cout<<"Suma elementelor de pe coloana "<<j<<" este: "<<s<<endl;
}
return 0;
}

6. Sa se afiseze transpusa unei matrici.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 #include <iostream>
using namespace std;
int main()
{
int n,i,j,a[20][20],at[20][20];
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
cout<<"Matricea este:"<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<"Matricea transpusa este:"<<endl;
for(i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
{
at[i][j]=a[j][i];
cout<<at[i][j]<<" ";
}
cout<<endl;
}
return 0;
}

7. Sa se afizeze matricea obtinuta prin adunarea a doua matrici.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 #include <iostream>
using namespace std;
int main()
{
int m,n,i,j,a[20][20],b[20][20],s[20][20];
cout<<"Introduceti dimensiunile celor 2 matrici"<<endl;
cout<<"m=";cin>>m;
cout<<"n=";cin>>n;
cout<<"Introduceti prima matrice: "<<endl;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
cout<<"Introduceti a doua matrice: "<<endl; for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
cout<<"b["<<i<<"]["<<j<<"]=";
cin>>b[i][j];
s[i][j]=a[i][j]+b[i][j];
}
cout<<"Prima matrice este:"<<endl;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<"A doua matrice este:"<<endl;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<"Suma celor doua matrici este:"<<endl;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
cout<<s[i][j]<<" ";
cout<<endl;
}
return 0;
}

8. Sa se afizeze matricea obtinuta din produsul a doua matrici.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 #include <iostream>
using namespace std;
int p[20][20];
int main()
{
int m,n,o,i,j,k,a[20][20],b[20][20];
cout<<"Introduceti dimensiunile matricii a[mxn]:"<<endl;
cout<<"m=";cin>>m;
cout<<"n=";cin>>n;
cout<<"Introduceti dimensiunile matricii b[nxo]:"<<endl;
cout<<"n="<<n<<endl;
cout<<"o=";cin>>o;
cout<<"Introduceti prima matrice a[mxn]:"<<endl;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
cout<<"Introduceti a doua matrice b[nxo]:"<<endl;
for(j=1;j<=n;j++)
for(k=1;k<=o;k++)
{
cout<<"b["<<j<<"]["<<k<<"]=";
cin>>b[j][k];
}
cout<<"Prima matrice a[mxn] este:"<<endl;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<"A doua matrice b[nxo] este:"<<endl;
for(j=1;j<=n;j++)
{
for(k=1;k<=o;k++)
cout<<b[j][k]<<" ";
cout<<endl;
}
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
p[i][j]=p[i][j]+a[i][k]*b[k][j];
cout<<"Matricea produs - b[nxo] este:"<<endl;
for(i=1;i<=m;i++)
{
for(j=1;j<=o;j++)
cout<<p[i][j]<<" ";
cout<<endl;
}
return 0;
}
9. Sa se afiseze elementele aflate deasupra diagonalei principale a unei matrici
si sa se afiseze suma acestora.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 #include <iostream>
using namespace std;
int main()
{
int n,i,j,a[20][20],s=0;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
cout<<"Matricea este:"<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<"Elementele aflate deasupra diagonalei principale sunt:"<<endl;
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
if (j>=i)
{
cout<<a[i][j]<<" ";
s=s+a[i][j];
}
else
cout<<" ";
cout<<endl;
}
cout<<"Suma elementelor aflate deasupra diagonalei principale este s="<<s<<endl;
return 0;
}

10. Sa se afiseze elementele aflate sub diagonala principala a unei matrici si sa


se afiseze suma acestora.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 #include <iostream>
using namespace std;
int main()
{
int n,i,j,a[20][20],s=0;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
cout<<"Matricea este:"<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<"Elementele aflate sub diagonala principala sunt:"<<endl;
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
if (j<=i)
{
cout<<a[i][j]<<" ";
s=s+a[i][j];
}
else
cout<<" ";
cout<<endl;
}
cout<<"Suma elementelor aflate sub diagonala principala este s="<<s<<endl;
return 0;
}

11. Sa se afiseze cate numere sunt pozitive, negative, respectiv nule, intr-o
matrice bidimensionala.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 #include <iostream>
using namespace std;
int main()
{
int n,i,j,a[20][20],poz=0,neg=0,zero=0;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
cout<<"Matricea este:"<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
cout<<a[i][j]<<" ";
if (a[i][j]<0)
neg++;
else
if (a[i][j]>0)
poz++;
else
zero++;
}
cout<<endl;
}
cout<<"Matricea contine:"<<endl;
cout<<neg<<" elemente negative"<<endl;
cout<<poz<<" elemente pozitive"<<endl;
cout<<zero<<" elemente nule"<<endl;
return 0;
}

12. Sa se afiseze matricea obtinuta in urma eliminarii penultimei linii,


respectiv coloane din matricea data.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 #include<iostream>
using namespace std;
int a[10][10],i,j,n,x,y;
int main()
{
cout<<"Dimensiunea matricii: n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
} cout<<endl<<"Linia de sters: x=";
cin>>x;
for (i=x;i<n;i++)
for(j=1;j<=n;j++)
a[i][j]=a[i+1][j];
for(i=1;i<n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<endl<<"Coloana de sters: y=";
cin>>y;
for (i=1;i<n;i++)
for(j=y;j<n;j++)
a[i][j]=a[i][j+1];
for(i=1;i<n;i++)
{
for(j=1;j<n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}

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