Sunteți pe pagina 1din 21

Contents

Tablouri bidimensionale (matrici) ....................................................................................................................................1


Probleme propuse : TABLOURI BIDIMENSIONALE. ........................................................................................................4
Probleme rezolvate cu matrici ...................................................................................................................................... 12

Tablouri bidimensionale (matrici)


Definiie :
Numim tablou o colecie ( grup, mulime ordonat ) de date , de acelai tip , situate ntr-o zona de
memorie continu ( elementele tabloului se afl la adrese succesive).
Iata o matrice careia i-am atribuit cateva numere in mod aleator:

Iata cum facem atribuirea in C++:


for (i=0; i<n; i++)
for (j=0; j<m; j++)
cin>>x[i][j];
In aceasta mica aplicatie, vom citi de la tastatura o matrice, si o vom afisa pe ecran. Iata cum facem:
#include <iostream.h>
void main ()
{
int x[10][10], n, m, i, j;//m=matricea, n, m= nr actual de linii/coloane, i, j=linia, respectiv coloana
cout<<Dati numarul de linii: ; cin>>n; //citim nr de linii
cout<<Dati numarul de coloane: ; cin>>m;
//citim nr. de coloane
cout<<Introduceti elementele matricei: <<endl;
for (i=0; i<n; i++)
for (j=0; j<m; j++)
{
cout<<x["<<i<<"]["<<j<<"]=;
cin>>x[i][j];
//citim elementele matricei
}
cout<<Afisam matricea: <<endl;
for (i=0; i<n; i++)
for (j=0; j<m; j++)
1

{cout<<x[i][j]<< ; //si afisam fiecare linie, respectiv coloana, dar cu un mic spatiu intre elemente
cout<<endl; //dupa fiecare linie terminata, trebuie sa trecem la alt rand
}
}
Declararea matricei
Sintaxa generala:
tip nume [marime1][marime2], ( n C++ matricea fiind de fapt un vector de vectori ) , unde:
- tip tipul de baz al componentelor matricei;
- nume numele matricei;
- marime 1 numrul de linii al matricei;
- marime 2 numrul de coloane al matricei;
Exemplu:
int a[3][4];

//am declarat o matrice care are 7 linii si 8 coloane ,

MATRICEA PTRATIC

Este un caz particular de matrice pentru care numrul de linii este egal cu numrul de coloane.
Diagonala principal
Diagonala principal este format din elementele care ndeplinesc relaia i=j numrul liniei este egal cu
numrul coloanei pe care se afl.
Diagonala secundar
Diagonala secundar conine elementele a1n, a2 n-1 , a3 n-2,...,an1 caracterizate de relaia i+j=n+1.
Zona de deasupra diagonalei principale
Elementele de deasupra diagonalei principale sunt a12, a13, a14,...,a1n, a23, a24, a25,...,a2n, ...., an-1 n-1, an-1
n. Relaia dintre coordonate comun tuturor elementelor din aceast zon este i<j.
Zona de sub diagonala principal
Elementele a21, a31, a32,...,a41, a42, a43, .....,an1, an2, an n-1 se afl sub diagonala principal i au ntre
coordonate relaia i>j.
Elemente de baza: diagonala principala si diagonala secundara.

Exemplu:
Diagonala principala intr-o matrice patratica:
100
356
201
Diagonala secundara intr-o matrice patratica:
100
356
201
2

** Citirea si afisarea unei matrici bidimensionale


se citesc numarul de linii si de coloane ale matricei (m si n).
#include<iostream.h>
int main()
{
int m,n,i,j,a [50] [50];
cout<<"numarul de lini si coloane"; cin>>n;
for (i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cout <<"a["<<i<<','<<j<<"]=";
cin>>a[i] [j];
cout<<endl;
}
cout<<elementele matricei sunt: <<endl;
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++) cout<<a[i] [j]<<' ';
cout<<endl;
}
}

Se citeste o matrice patratica. Sa se afiseze elementele de pe diagonala secundara,elementele de pe diagonala


principala,elementele de sub/desupra diagonalei secundare/principala.
#include<iostream.h>
#include<stdio.h>
int main()
{
int i,j,n,a[20][20];
cout<<"\n numarul de linii si coloane= "; cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{ cout<<"\n a["<<i<<","<<j<<"]="; cin>>a[i][j]; }
cout<<"\n afisarea matricei:" <<endl;
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<"diagonala principala"<<endl;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
3

if(i==j) cout<<a[i][j]<<" ";


cout <<"\n diagonala secundara"<<endl;
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
if(i+j==n+1)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout <<"\n elementele de deasupra diagonalei principale"<<endl;
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
if(i<j)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout <<"\n elementele de sub diagonala principala"<<endl;
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
if(i>j)
cout<<a[i][j]<<" ";
cout<<endl;
}
Copierea unei matrici.Pentru a copia elementele unei matrici a ntr-o matrice b, se parcurge matricea a pe linii
si coloane i se copiaz pe rnd fiecare element n matricea b.
#include<iostream >
int main()
{ int a[10][10],b[10][10],i,j,m,n;
cout<<"nr de linii =";
cin>>m;
cout<<"nr de coloane=";
cin>>n;
cout<<"matricea a =";
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
b[i][j]=a[i][j];
cout<<"matricea obtinuta "<<endl;
for(i=1;i<=m;i++)
{ for(j=1;j<=n;j++)
cout<<b[i][j]<<" ";
cout<<endl;
}
}
Probleme propuse :

TABLOURI BIDIMENSIONALE.

1. Se consider o matrice neptratic (nxm) care conine elemente de tip real. S se determine cel mai mare,
respectiv cel mai mic element al su. S se afieze aceste elemente i indicii lor.
2. S se nlocuiasc elementul maxim de pe fiecare coloan a unei matrice cu suma elementelor de pe coloana
respectiv.
4

3. Fie A o matrice cu elemente numere reale. S se formeze un ir X definit n felul urmtor: x1 este maximul
elementelor de pe coloanele 1 i 2, x2 este maximul elementelor de pe coloanele 3 i 4, etc. Dac matricea are un
numr impar de coloane, atunci ultimul element al irului este maximul elementelor de pe ultima coloan a matricei.
4. Se d o matrice A. S se introduc indicii elementelor subunitare pozitive n liniile unei matrice B cu dou
coloane.
5. Se d o matrice ptratic A. S se nlocuiasc elementele sale situate pe diagonala principal i pe diagonala
secundar cu valoarea 0 (zero).
6. Se d o matrice ptratic A de dimensiune nxn. S se formeze o matrice ptratic simetric B de aceeai
dimensiune, ale crei elemente sunt definite prin relaia:
b[i, j] = (a[i, j] + a[j, i] ) / 2
7. Se d un tablou bidimensional A cu n linii i m coloane, de componente ntregi. Se cere s se elimine din
tablou linia p (1 p n).
8. Se d un tablou bidimensional B cu n linii i m coloane de componente ntregi. S se determine minimul
fiecrei coloane i minimul lui B.
9. Se consider o matrice ptratic cu n linii care conine date de tip integer. S se alctuiasc un program
C++care afieaz pe ecran, pe o singur linie, suma elementelor pare de pe fiecare coloan.
10. Se consider un tablou bidimensional (nxm) cu elemente ntregi. S se creeze un program care ordoneaz
cresctor elementele situate pe liniile cu numr de ordine par (linia a doua, linia a patra, .a.m.d.). La afiare, elementele
tabloului vor fi scrise sub forma unui tabel de n linii i m coloane.
11. Se consider un tablou bidimensional (nxm) cu elemente ntregi. S se creeze un program care ordoneaz
descresctor elementele situate pe liniile cu numr de ordine impar (prima linie, linia a treia, .a.m.d.). La afiare,
elementele tabloului vor fi scrise sub forma unui tabel de n linii i m coloane.
12. Se consider o matrice ptratic (nxn) ce conine numere ntregi. Realizai un program care inverseaz liniile
i coloanele matricei pentru ca elementele diagonalei principale s fie ordonate cresctor.
13. S se construiasc un tablou ptratic de dimensiune n2 (1 n 50) cu primele n numere pare ncepnd cu
2.
Exemplu:
Pentru n=4 se va afia:
2 4 6 8
10 12 14 16
18 20 22 24
26 28 30 32
**1
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100.
a) S se scrie un subprogram care s returneze elementul minim;
b) S se scrie un subprogram care s returneze irul ordonat cresctor.
Exemplu:
Date de intrare:
17 23 45 67 12 34 5 90 8 9
Date de ieire:
a) Elementul minim este: 5
b) irul ordonat cresctor este: 5 8 9 12 17 23 34 45 67 90
**2
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100.
5

a) S se scrie un subprogram care s returneze elementul maxim;


b) S se scrie un subprogram care s determine numrul elementelor prime.
Exemplu:
Date de intrare:
7 23 4 17 12 34 5 90 8 9
Date de ieire:
b) Elementul maxim este: 90
c) Sunt 4 numere prime
**3
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100.
a) S se scrie un subprogram care s returneze suma cifrelor elementelor pare;
b) S se scrie un subprogram care s returneze irul ordonat descresctor.
Exemplu:
Date de intrare :
37 23 4 77 12 34 5 90 18 19
Date de ieire :
a) Suma cifrelor elementelor pare este: 32
b) irul ordonat descresctor este: 90 77 37 34 23 19 18 12 5 4
**4
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100.
a) S se scrie un subprogram care s determine suma elementelor impare;
b) S se scrie un subprogram care s returneze irul ordonat descresctor.
Exemplu:
Date de intrare:
37 23 4 77 12 34 5 90 18 19
Date de ieire:
a) Suma elementelor impare este:161
b) irul ordonat descresctor este: 90 77 37 34 23 19 18 12 5 4
**5
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100.
a) S se scrie un subprogram care s returneze suma elementelor pare de pe pozitiile impare;
b) S se scrie un subprogram care s determine numrul elementelor prime din ir.
Exemplu:
Date de intrare :
7 23 4 17 12 34 5 90 8 9
Date de ieire:
a) Suma elementelor pare de pe pozitiile impare este: 24
b) n ir sunt 4 numere prime

**6
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100.
a) S se scrie un subprogram care s determine suma elementelor impare aflate pe poziiile pare;
b) S se scrie un subprogram care s returneze un mesaj prin care s se comunice dac un element x citit de la
tastatur exist sau nu n ir.
Exemplu:
Date de intrare:
6

17 23 45 67 12 34 5 90 8 9
Date de ieire :
b) Suma elementelor impare aflate pe poziiile pare este: 99
c) Pentru x = 99 se va afia: elementul nu este n ir
**7
Se citete de la tastatur un ir de 16 numere ntregi mai mici dect 100 care reprezint elementele unei matrice 4x4,
separate prin spaii.
a) S se afieze matricea;
b) S se scrie un subprogram care s returneze elementul maxim de pe diagonala principal.
Exemplu:
Date de intrare:
13 2 3 66 55 4 3 22 2 3 4 5 1 2 1 17
Date de ieire :
a) Matricea este:

13 2 3 66
55 4 3 22
2 3 4 5
1 2 1 17
b) Elementul maxim de pe diagonala principal a matricei este:17

**8
Se citete de la tastatur un ir de 16 numere ntregi mai mici dect 100 care reprezint elementele unei matrice 4x4,
separate prin spaii.
a) S se afieze matricea;
a)S se scrie un subprogram care s returneze elementele de pe linia a doua din matricea de mai sus, ordonate
cresctor.
Exemplu:
Date de intrare:
13 2 3 66 55 4 3 22 2 3 4 5 1 2 1 17
Date de ieire :
a) Matricea este:

13 2
55 4
2 3
1 2
b) Linia a doua ordonat cresctor este: 3 4 22 55

3 66
3 22
4 5
1 17

**9
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100.
a) S se scrie un subprogram care s returneze suma cifrelor elementului maxim din ir;
b) S se scrie un subprogram care s determine numrul elementelor prime coninute de ir.
Exemplu:
Date de intrare :
37 23 4 77 12 34 5 90 18 19
Date de ieire:
a) Suma cifrelor elementului maxim din fiierul date.in este: 9
b) Numrul elementelor prime coninute de ir: 4
**10
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100.
a) S se scrie un subprogram care s returneze numrul de elemente din ir care au ultima cifr egal cu 3;
b) S se scrie un subprogram care s returneze irul ordonat descresctor.
Exemplu:
Date de intrare :
7

17 23 45 67 12 34 3 90 8 9
Date de ieire:
a) Numrul de elemente din ir care au ultima cifr egal cu 3 este: 2
b) irul ordonat descresctor este: 90 67 45 34 23 17 12 9 8 3
**11
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100.
a) S se scrie un subprogram care s determine numrul elementelor prime de dou cifre coninute de ir;
b) S se scrie un subprogram care s returneze irul ordonat cresctor.
Exemplu:
Date de intrare :
7 23 4 17 12 34 5 90 8 9
Date de ieire :
a) n fiier sunt 2 numere prime de dou cifre
b) irul ordonat cresctor este: 4 5 7 8 9 12 17 23 34 90
**12
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100.
a) S se scrie un subprogram care s returneze elementele din ir care aparin intervalului [a,b] unde a i b sunt
numere ntregi mai mici dect 100 citite de la tastatur;
b) S se scrie un subprogram care s returneze irul ordonat descresctor.
Exemplu:
Date de intrare :
37 23 4 77 12 34 5 90 18 19
Date de ieire :
b) Pentru intervalul [36, 80] elementele din ir care aparin intervalului sunt: 37 77
d) irul ordonat descresctor este: 90 77 37 34 23 19 18 12 5 4
**13
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100.
a) S se scrie un subprogram care s returneze suma cifrelor impare ale numerelor din ir;
b) S se scrie un subprogram care s returneze irul ordonat cresctor.
Exemplu:
Date de intrare:
7 23 4 17 12 33 5 99 8 9
Date de ieire:
a) Suma cifrelor impare ale numerelor din ir este: 57
b) irul ordonat cresctor este: 4 5 7 8 9 12 17 33 34 99
**14
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100.
a) S se scrie un subprogram care s returneze suma elementelor pare de pe poziiile impare;
b) S se scrie un subprogram care s determine cel mai mare numr prim din ir.
Exemplu:
Date de intrare :
37 23 4 77 12 34 5 90 18 19
Date de ieire:
a) Suma elementelor pare de pe poziiile impare din ir este: 34
b) Cel mai mare numr prim din ir este: 37
**15
8

Se citete de la tastatur un ir de 16 numere ntregi mai mici dect 100 care reprezint elementele unei matrice 4x4,
separate prin spaii.
a) S se afieze matricea;
b) S se scrie un subprogram care s determine cel mai mare divizor comun al elementelor situate n colul stnga
sus i colul dreapta jos;
Exemplu:
Date de intrare:
9 2 3 6 5 4 3 2 2 3 4 5 1 2 1 2
Date de ieire :
a) Matricea este:

9 2 3 6
5 4 3 2
2 3 4 5
1 2 1 2
b) Cel mai mare divizor comun al elementelor situate n colul stnga sus i colul dreapta jos este: 1
**16
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100.
a) S se scrie un subprogram care s returneze cte dintre elementele din ir au trei divizori;
b) S se scrie un subprogram care s determine cel mai mare numr neprim din ir.
Exemplu:
Date de intrare:
7 23 4 17 12 49 5 81 8 91
Date de ieire :
a) Dou elemente din ir au trei divizori
b) Cel mai mare numr neprim este: 81
**17
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100.
a) S se scrie un subprogram care s returneze elementele din ir care sunt divizibile cu o valoare x citit de la
tastatur;
b) S se scrie un subprogram care s insereze ntre ultimul i penultimul element al tabloului media lor aritmetic i
s se afieze irul nou creat.
Exemplu:
Date de intrare :
7 23 4 17 12 49 5 81 8 9
Date de ieire:
a) Pentru x=4 elementele din ir divizibile cu x citit de la tastatur sunt: 4 12 8
b) Noul ir este: 7 23 4 17 12 49 5 81 8 8.5 9

#include <iostream>
using namespace std;
int n, i,a[20],x;
float m;
void creare()
{
cout<<"Cate elemente din vector citesti?: " ;cin>>n;
for (int i=1;i<=n;i++)
{
cout<<"Elementul "<<i<<endl;
cin>>a[i];
}
}
void scrie()
{
9

for( i=1;i<=n;i++)cout<<a[i]<<" ";


}
void divizibil()
{
cout<<"Dati o valoare pentru divizor ";cin>>x;
cout<<"\n Numerele din vector divizibile cu o valoare. "<<endl;
for( i=1;i<=n;i++)
if (a[i]%x==0)
{
cout<<a[i]<<" ";}
}
float medie(int a,int b)
{m=(a+b)/2;return m;}
void inserare()
{for( i=1;i<=n-1;i++)
cout<<a[i]<<" ";
cout<<medie(a[n-1],a[n])<<" ";
cout<<a[n];
}
int main()
{

cout<<"citim un vector :";


creare();
cout<<"\n vectorul citit este: ";
scrie();
divizibil();
cout<<"\n media intre penultimul si ultimul element:"<<endl;
inserare();
return 0;

}
**18
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100.
a) S se scrie un subprogram care s returneze cel mai mare divizor comun al elementelor din ir;
b) S se scrie un subprogram care s insereze ntre ultimul i penultimul element al tabloului o valoare x citit de la
tastatur i s se afieze irul nou creat.
Exemplu:
Date de intrare:
7 23 4 17 12 33 5 99 8 9
Date de ieire:
a) Cel mai mare divizor comun al elementelor din ir este 1
b) Pentru x=41 irul devine: 7 23 4 17 12 33 5 99 8 41 9
**19
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100.
a) S se scrie un subprogram care s returneze cte dintre elementele din ir sunt prime cu o valoare x citit de la
tastatur;
b) S se scrie un subprogram care s calculeze media aritmetic a numerelor din ir pe care s o insereze la
jumtatea irului i s se afieze irul nou creat.
Exemplu:
Date de intrare :
7 23 4 17 12 49 5 81 8 91
Date de ieire:
a) Pentru x=3 opt elemente din ir sunt prime cu 3
b) irul dup inserare: 7 23 4 17 12 29.7 49 5 81 8 91
10

**20
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100.
a) S se scrie un subprogram care s determine elementul minim din ir i poziia pe care o ocup n irul
numerelor date;
b) S se scrie un subprogram care s determine cte dintre elementele irului cuprinse ntr-un interval citit de la
tastatur sunt numere pare.
Exemplu:
Date de intrare :
7 24 4 17 12 33 5 99 8 9
Date de ieire:
a) Elementul minim: 4 i ocup poziia 3;
b) Pentru intervalul [10, 40] dou numere sunt pare
**21
Se citete de la tastatur un ir de 10 numere ntregi mai mici dect 100.
a) S se scrie un subprogram care s returneze cel mai mare divizor comun al elementelor din ir;
b) S se scrie un subprogram care s determine elementul maxim din ir i poziia pe care o ocup n irul
numerelor date.
Exemplu:
Date de intrare :
6 3 24 27 12 9 15 81 18 21
Date de ieire:
a) Cel mai mare divizor comun al elementelor din ir este 3
b) Elementul maxim: 81 i ocup poziia 8
**22
Se citete de la tastatur un ir de 16 numere ntregi mai mici dect 100 care reprezint elementele unei matrice 4x4,
separate prin spaii.
a) S se afieze matricea;
b) S se scrie un subprogram care s returneze elementul minim al matricei i numrul lui de apariii.
Exemplu:
Date de intrare :
1 2 33 6 5 4 3 2 22 3 44 5 1 2 1 2
Date de ieire:
a) Matricea este:

1 2 33 6
5 4 3 2
22 3 44 5
1 2 1 2
b) Elementul minim al matricei este 1 i numrul lui de apariii este 3

**23
Se citete de la tastatur un ir de 16 numere ntregi mai mici dect 100 care reprezint elementele unei matrice 4x4,
separate prin spaii.
a) S se afieze matricea;
b) S se scrie un subprogram care s determine cte dintre elementele matricei sunt numere perfecte (un numr
este perfect dac este egal cu suma divizorilor si fara el nsui).
Exemplu:
Date de intrare:
1 2 3 6 5 4 3 2 2 3 4 5 1 2 1 2
11

Date de ieire:
a) Matricea:

1 2 3 6
5 4 3 2
2 3 4 5
1 2 1 2
b) Exist un singur numr perfect (6=1+2+3)

**24
Se citete de la tastatur un ir de 16 numere ntregi mai mici dect 100 care reprezint elementele unei matrice 4x4,
separate prin spaii.
a) S se afieze matricea;
b) S se scrie un subprogram care s determine numrul elementelor matricei egale cu o valoare x dat de la
tastatur.
Exemplu:
Date de intrare:
1 2 3 6 5 4 3 2 2 3 4 5 1 2 1 2
Date de ieire:
a) Matricea:

1 2
5 4
2 3
1 2
b) Pentru x=5 se va afia: 2

3
3
4
1

6
2
5
2

**25
Se citete de la tastatur un ir de 16 numere ntregi mai mici dect 100 care reprezint elementele unei matrice 4x4,
separate prin spaii.
a) S se afieze matricea;
b) S se scrie un subprogram care s returneze suma elementelor de pe diagonala principal a matricei.
Exemplu:
Date de intrare:
1 2 3 6 5 4 3 2 2 3 4 5 1 2 1 2
Date de ieire:
a) Matricea:

1 2 3 6
5 4 3 2
2 3 4 5
1 2 1 2
b) Suma elementelor de pe diagonala principal a matricei este: 10

Probleme rezolvate cu matrici


Se introduce de la tastatur o matrice ptratica de ordin n. Se cere s se calculeze i s se afieze:
a) suma tuturor elementelor ;
b) suma elementelor de pe diagonala principal.
#include<iostream>
int x[30][30],n,m;
void citire()
{int i,j;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{cout<<"x["<<i<<"]["<<j<<"]=";
cin>>x[i][j];
12

}
}
void afisare()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<x[i][j]<<" ";
cout<<"\n";
}
}
void suma()
{ int s=0;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
s=s+x[i][j];
cout<<"suma elementelor din matrice="<<s<<endl;
}
void suma_diagonala_principala()
{
int s=0;
for(int i=1;i<=n;i++)
s=s+x[i][i];
cout<<"suma de pe diagonala principala="<<s<<endl;
}
int main()
{
citire();
cout<<"matricea este\n";
afisare();
suma();
suma_diagonala_principala();
}
Se introduce de la tastatur o matrice ptrat de ordin n cu elemente numere ntregi. Se cere s se calculeze i
afieze:
a) suma elementelor de deasupra diagonalei principale ;
b) suma elementelor de sub diagonala secundar.
#include <iostream>
using namespace std;
int x[30][30],n,m;
void citire()
{int i,j;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{cout<<"x["<<i<<"]["<<j<<"]=";
cin>>x[i][j];
}
}
void afisare()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<x[i][j]<<" ";
cout<<"\n";
}
}
void deasupra_dp()
13

{
int s=0;
for(int i=1;i<=n-1;i++)
{for(int j=i+1;j<=n;j++)
{cout<<x[i][j]<<" ";s=s+x[i][j];}
cout<<endl;
}
cout<<"suma elementelor de deasupra diagonalei principale="<<s<<endl;
}
void sub_ds()
{int s=0;
for(int i=2;i<=n;i++)
{for(int j=n-i+2;j<=n;j++ )
{cout<<x[i][j]<<" ";s=s+x[i][j];}
cout<<endl;
}
cout<<"suma elementelor de sub diagonala secundara="<<s<<endl;
}
int main()
{
citire();
cout<<"matricea este\n";
afisare();
cout<<"Elementele de deasupra diagonalei principale sunt:\n";
deasupra_dp();
cout<<"Elementele de sub diagonala secundara sunt :\n";
sub_ds();
}
** Se introduce de la tastatur o matrice cu m linii i n coloane cu elemente numere ntregi . Se cere s se
calculeze i s se afieze minimul pe o linie l a matricei (l numr natural citit de la tastatur l<=m).
#include<iostream>
using namespace std;
int x[30][30],n,m;
void citire()
{int i,j;
cout<<"Cate linii? ";cin>>n;
cout<<"Cate coloane? ";cin>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{cout<<"x["<<i<<"]["<<j<<"]=";
cin>>x[i][j];
}
}
void afisare()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<x[i][j]<<" ";
cout<<"\n";
}
}
void minim_l()
{
int l,min;
cout<<"Ce linie cauti? ";cin>>l;
if(l<1||l>n){cout<<"eroare";}
min=x[l][1];
for(int i=1;i<=m;i++)
14

if(x[l][i]<min)min=x[l][i];
cout<<"Valoarea minima este : "<<min;
}
int main()
{
citire();
cout<<"matricea este\n";
afisare();
minim_l();
}

** Se d o matrice x, cu n linii i n coloane, cu elemente ntregi. S se determine numrul elementelor din


matrice care sunt < 24 i se gsesc deasupra diagonalei principale pe linii pare.
#include<iostream>
int a[30][30],n,m;
void citire()
{int i,j;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{cout<<"a["<<i<<"]["<<j<<"]";
cin>>a[i][j];
}
}
void afisare()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}
}
void afis_deasupra_diagonala_principala()
{
for(int i=1;i<=n-1;i++)
{ for(int j=i+1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}
}
void contor()
{int c=0;
for(int i=1;i<=n-1;i++)
{ if(i%2==0)
for(int j=i+1;j<=n;j++)
if(a[i][j]<24)c++;
else cout <<s-au citit valori mai mici de 24 pentru linii pare
}
cout<<"Numarul elementelor <24 de pe liniile pare sunt :"<<c<<endl;}
int main()
{
citire();
cout<<"matricea este\n";
afisare();
cout<<"elementele de deasupra diagonalei principale\n";
afis_deasupra_diagonala_principala();
15

contor();
}

** Se citete o matrice cu n linii i m coloane i elemente numere ntregi. Se cere:


a) S se determine elementele minime de pe fiecare linie;
b) S se numere elementele pare de pe perimetrul matricei.
using namespace std;
#include<iostream>
int a[30][30],n,m;
void citire()
{int i,j;
cout<<"n=";cin>>n;
cout<<"m=";cin>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{cout<<"a["<<i<<"]["<<j<<"]";
cin>>a[i][j];
}
}
void minim_linie()
{int min;
for(int i=1;i<=n;i++)
{min=a[i][1];
for(int j=1;j<=m;j++)
if(min>a[i][j])min=a[i][j];
cout<<"min pe linia "<<i<<":"<<min<<endl;
}
}
void perimetru()
{
int nr=0;
cout<<"numerele pare din perimetrul matricei sunt : "
for(int j=1;j<=m;j++)
if(a[1][j]%2==0){cout<<a[1][j]<<" ";nr++;}
for(int i=2;i<=n;i++)
if(a[i][m]%2==0){cout<<a[i][m]<<" ";nr++;}
for(int j=1;j<=m-1;j++)
if(a[n][j]%2==0){cout<<a[n][j]<<" ";nr++;}
for(int i=2;i<=n-1;i++)
if(a[i][1]%2==0){cout<<a[i][1]<<" ";nr++;}
cout<<"Total nr pare :"<<nr;
}
void afisare()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}}
int main()
{
citire();
afisare();
minim_linie();
perimetru();
}
16

** Se citete o matrice ptrat de dimensiune nxn i elemente numere ntregi. Se cere:


a) S se afieze numerele prime de pe diagonala principal;
b) S se formeze un vector cu elementele matricei parcurse n ordine pe coloane.

using namespace std;


#include<iostream>
int a[30][30],n,m;
void citire()
{int i,j;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{cout<<"a["<<i<<"]["<<j<<"]";
cin>>a[i][j];
}
}
void afisare()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}
}
int prim(int n)
{
if(n<=1) return 0;
int i=2;
while(i<=n/2)
if(n%i==0) return 0;
else i++;
return 1;
}
void diagonala()
{
cout<<"elementele prime de pe diagonala principala\n";
for(int i=1;i<=n;i++)
if(prim(a[i][i]))cout<<a[i][i]<<" ";
else cout<<"nu s-au citit valori prime pe diagonala principala;"
cout<<endl;
}
void vector()
{int b[900],i,j;
cout<<"parcurgerea matricii pe coloane\n";
int nr=0;
for(j=1;j<=n;j++)
for (i=1;i<=n;i++)
b[++nr]=a[i][j];
for(i=1;i<=nr;i++)
cout<<b[i]<<" ";
cout<<"\n";}
int main()
{
citire();
afisare();
diagonala();
17

vector();
}
5. Se citete o matrice cu n linii i m coloane. Se cere:
a) S se formeze un vector n care se vor reine elementele maxime de pe fiecare coloan a matricei;
b) S se ordoneze vectorul format la punctul a.
using namespace std;
#include<iostream>
int a[30][30],n,m,b[30];
void citire()
{int i,j;
cout<<"n=";cin>>n;
cout<<"m=";cin>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{cout<<"a["<<i<<"]["<<j<<"]";
cin>>a[i][j];
}
}
void maxim_linie()
{int max;
for(int j=1;j<=m;j++)
{max=a[1][j];
for(int i=1;i<=m;i++)
if(max<a[i][j])max=a[i][j];
b[j]=max;
cout<<"max pe coloana "<<j<<" este :"<<max<<endl;
}
}
void sortare()
{int aux;
cout<<"elementele maxime sortate:\n";
for(int i=1;i<=m-1;i++)
for(int j=i+1;j<=m;j++)
if(b[i]>b[j])
{aux=b[i];b[i]=b[j];b[j]=aux;}
for(int i=1;i<=m;i++)cout<<b[i]<<" ";
cout<<endl;
}
void afisare()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}}
int main()
{
citire();
afisare();
maxim_linie();
sortare();
}
** Se d o matrice x, cu n linii i n coloane. S se determine maximul elementelor pare de pe coloana p.
#include<iostream>
int x[30][30],n,m;
void citire()
18

{int i,j;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{cout<<"x["<<i<<"]["<<j<<"]";
cin>>x[i][j];
}
}
void afisare()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<x[i][j]<<" ";
cout<<"\n";
}
}
void maxim_coloana_p()
{
int p;
cout<<"nr coloanei pentru a afisa valoarea maxima: "; cin>>p;
int max=-1;
for(int i=1;i<=n;i++)
if(x[i][p]%2==0)
if(x[i][p]>max) max=x[i][p];
if(max>-1)cout<<"max="<<max<<endl;
else cout<<"nu exista nr pare pe coloana p\n";
}
int main()
{
citire();
cout<<"matricea este\n";
afisare();
maxim_coloana_p();
}
7. Se consider o matrice cu m linii i n coloane, elementele matricei sunt numere ntregi. S se determine
elementul minim de pe o coloan c, dat de la tastatur.
#include<iostream>
int x[30][30],n,m;
void citire()
{int i,j;
cout<<"m=";cin>>m;
cout<<"n=";cin>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{cout<<"x["<<i<<"]["<<j<<"]";
cin>>x[i][j];
}
}
void afisare()
{
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
cout<<x[i][j]<<" ";
cout<<"\n";
}
}
void minim_coloana_p()
{
19

int c;
cout<<"nr coloanei c="; cin>>c;
int min=x[1][c];
for(int i=1;i<=m;i++)
if(x[i][c]%2==0)
if(x[i][c]<min) min=x[i][c];
cout<<"min="<<min<<endl;
}
int main()
{
citire();
cout<<"matricea este\n";
afisare();
minim_coloana_p();
}
8. e citete un numr natural n. S se creeze o matrice care conine:
- cifrele numrului pe diagonala principal;
- valoarea elementelor rmase n matrice, s conin valoarea 0.
using namespace std;
#include<iostream>
int a[30][30],n,lin;
int nr_cifre(int n)
{
int nr=0;
while(n!=0)
{nr++;n=n/10;}
return nr;
}
void matrice_cu_0()
{lin=nr_cifre(n);
for(int i=1;i<=lin;i++)
for(int j=1;j<=lin;j++)
a[i][j]=0;
}
void diagonala(int n)
{int nr=0;
while(n!=0)
{nr++;
a[nr][nr]=n%10;
n=n/10;
}
}
void afisare()
{
for (int i=1;i<=lin;i++)
{for(int j=1;j<=lin;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}
}
int main()
{cout<<"Dati un numar format din min 3 cifre:";cin>>n;
matrice_cu_0();
diagonala(n);
afisare();
}
9. Se citete o matrice cu m linii i n coloane, cu elemente numere ntregi. S se interschimbe dou linii l1 si l2
(date), ntre ele, folosind un subprogram.
20

#include<iostream>
int x[30][30],n,m;
void citire()
{int i,j;
cout<<"m=";cin>>m;
cout<<"n=";cin>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{cout<<"x["<<i<<"]["<<j<<"]";
cin>>x[i][j];
}
}
void afisare()
{
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
cout<<x[i][j]<<" ";
cout<<"\n";
}
}
void interschimbare_linii()
{
int l1,l2,aux;
cout<<"linia l1=";cin>>l1;
cout<<"linia l2=";cin>>l2;
for(int i=1;i<=n;i++)
{
aux=x[l1][i];
x[l1][i]=x[l2][i];
x[l2][i]=aux;}
}
int main()
{
citire();
cout<<"matricea este\n";
afisare();
interschimbare_linii();
afisare();
}

21