Sunteți pe pagina 1din 9

Matricea patratica

 Matricea care are numarul de linii egal cu numarul de coloane se


numeste o matrice patratica.

 Intrucat numarul de linii este egal cu numarul coloanelor in


matiricile patratice apar 2 notiuni importante: diagonala principala
si diagonala secundara.

 Diagonala principala este formata din elementele unei matrici


patratice aflate pe pozitiile in care indicele liniei este egal cu cel al
coloanei (i=j), adica a[i][i]. Spre exemplu in matricea patratica a[3]
[3], elementele aflate pe diagonala principala sunt a[1][1]; a[2][2] si
a[3][3].

 Diagonala secundara este formata din elementele unei matrici


patratice aflate pe pozitiile in care i+j=n+1, mai exact a[i][n-i+1].
Spre exemplu in matricea patratica a[3][3], elementele aflate pe
diagonala principala sunt a[1][3]; a[2][3] si a[3][1].
Informatii despre diagonala principala

 Diagonala principală este formată din elementele care


îndeplinesc relația
i = j – numărul liniei este egal cu numărul coloanei pe care
se află.

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.
Relaţia dintre coordonate comună tuturor elementelor din
această zonă este i < j .

Afisarea elementelor de pe diagonala


principala

for(i=1; i<=n; i++)


for(j=1; j<=n; j++)
if (i==j)  cout<<a[i] [j]<<"  "; // afisare elemente de
pe diagonala principala

cout<<endl;
Informatii despre diagonala secundara

 Diagonala secundară
Diagonala secundară conţine elementele a1n, a2 n-1 , a3
n-2,…,an1 caracterizate de relaţia
i+j = n+1.

Studierea matricei sub diagonala secundara

for ( i=2 ; i<=n; i++)


for ( j=n-i+2 ; j<=n; j++)
cout<<a[i][j]<<" ";

cout<<endl;

Afisarea elementelor de pe diagonala


secundara

for ( i=1; i<=n; i++)


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

cout<<endl;
Probleme rezolvate

1.Se consideră tabloul bidimensional cu n linii şi n coloane ce conţine numere


naturale cu cel mult patru cifre fiecare. Scrieţi programul care citeşte de la tastatură
numărul natural n (2≤n≤23) şi cele n*n elemente ale tabloului şi apoi afişează pe
ecran elementele primului pătrat concentric, separate prin câte un spaţiu. Pătratul
este parcurs în sensul acelor de ceasornic începând din colţul său stânga-sus, ca în
exemplu. Primul pătrat concentric este format din prima şi ultima linie, prima şi ultima
coloană a tabloului.
Exemplu: pentru n=5 şi tabloul alăturat, se va afişa: 1 2 3 4 5 1 6 2 7 6 5 4 3 7 2 6
12345
67891
23456
78912
34567

#include <iostream>

using namespace std;

int main()

int a[23][23],n,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];

for (j=1;j<n;j++) //se afiseaza elementele de pe prima linie (cu exceptia ultimului element de pe

prima linie)

cout<<a[1][j]<<‘ ‘;

for (i=1;i<n;i++) //se afiseaza elementele de pe ultima coloana (cu exceptia ultimului element de
pe ultima coloana)

cout<<a[i][n]<<‘ ‘;

for (j=n;j>1;j–) //se afiseaza elementele de pe ultima linie (cu exceptia primului element de pe

ultima linie)

cout<<a[n][j]<<‘ ‘;

for (i=n;i>1;i–) //se afiseaza elementele de pe prima coloana (cu exceptia primului element de pe

prima coloana)

cout<<a[i][1]<<‘ ‘;

return 0;

2. Scrieţi un program care citeşte de la tastatură două valori naturale


nenule m şi n (m≤10, n≤10) şi apoi m*n numere naturale nenule cu cel mult 4 cifre
fiecare, reprezentând elementele unei matrice cu m linii şi n coloane. Programul
determină apoi valorile minime de pe fiecare linie a matricei şi le afişează pe o linie a
ecranului separate prin câte un spaţiu.
Exemplu: pentru m=3, n=5 şi matricea
5 13 7 2 3
9 6 12 9 10
36547
se afişează pe ecran valorile: 2 6 3 (cea mai mică valoare de pe prima linie a matricei
este 2, cea mai mică valoare de pe linia a doua este 6, cea mai mică valoare de pe
linia a treia este 3).

#include <iostream>

using namespace std;

int main()

int a[10][10],m,n,i,j,min;

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];

for (i=1;i<=m;i++) //se parcurg liniile matricei

min=a[i][1]; //presupunem ca primul element de pe linia i este cel mai mic dintre elementele liniei

for (j=2;j<=n;j++) //se parcurg celelalte elemente ale liniei i

if (a[i][j]<min)

min=a[i][j];

cout<<min<<‘ ‘;

return 0;

3. Scrieţi un program care citeşte de la tastatură un număr


natural n (2<n<20), construieşte în memorie şi afişează pe ecran o
matrice cu n linii şi n coloane, în care fiecare element de pe diagonala
secundară are valoarea n, fiecare element aflat deasupra diagonalei
secundare este mai mic cu o unitate decât vecinul aflat pe aceeaşi linie
în dreapta lui şi fiecare element aflat sub diagonala secundară este mai
mare cu o unitate decât vecinul aflat pe aceeaşi linie în stânga lui.

Elementele matricei vor fi afişate pe ecran, câte o linie a matricei pe câte o linie a
ecranului cu câte un spaţiu între elementele fiecărei linii.

Exemplu: pentru n=5 se va afişa matricea alăturată.


12345
23456
34567
45678
56789

#include <iostream>
using namespace std;

int main()

int a[19][19],n,i,j;

cout<<„n=”;

cin>>n;

for (i=1;i<=n;i++) //se parcurg elementele de pe diagonala secundara

a[i][n+1-i]=n;

for (i=1;i<n;i++) //se parcurg elementele de deasupra diagonalei secundare

for (j=n-i;j>=1;j–)

a[i][j]=a[i][j+1]-1;

for (i=2;i<=n;i++) //se parcurg elementele de sub diagonala secundara

for (j=n-i+2;j<=n;j++)

a[i][j]=a[i][j-1]+1;

for (i=1;i<=n;i++)

{for (j=1;j<=n;j++)

cout<<a[i][j]<<‘ ‘;

cout<<endl;

return 0;

4.Scrieti un program C/C++ care citeste de la tastatura un numar natural


par n care apartine intervalului [2 , 50] si elementele unui tablou
bidimensional cu n linii si n coloane, numere reale, apoi transforma
tabloul in memorie, inserand o linie noua, la mijlocul sau, valoarea
fiecarui element al acesteia fiind egala cu media aritmetica a
elementelor aflate pe coloana corespunzatoare lui in tabloul citit.
Rezolvare:

#include <iostream>

using namespace std;

int main() {
int n,i,j;

float m[50][50];

cin>>n;

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

for (j = 0; j < n; j++)

cin>>m[i][j];

for (i = 0; i < n; i++) {

float suma = 0;

for (j = 0; j < n; j++)

suma += m[j][i];

for (j = n; j > n/2; j--)

m[j][i] = m[j - 1][i];

m[n/2][i] = suma/n; }

for (i = 0; i < n + 1; i++) {

for (j = 0; j < n; j++)

cout<<m[i][j]<<" ";

cout<<'n'; }

return 0; }

5.Scrieţi un program C/C++ care citeşte de la tastatură două numere


naturale din intervalul [3,50], n şi m, și elementele unui tablou
bidimensional cu n linii şi m coloane, numere naturale din intervalul
[0,104]. Programul modifică în memorie tabloul dat, atribuind valoarea
elementului aflat pe ultima linie și pe ultima coloană a tabloului fiecărui
element aflat pe conturul acestuia (pe prima linie, ultima linie, prima
coloană, ultima coloană), apoi afişează pe ecran tabloul modificat, câte
o linie a tabloului pe câte o linie a ecranului, elementele fiecărei linii fiind
separate prin câte un spaţiu.
Rezolvare:

int main(){
unsigned int n, m;

unsigned int matrice[50][50];

cin >> n >> m;

for(int i = 0; i < n; i++)

for(int j = 0; j < m; j++)

cin >> matrice[i][j];

unsigned int ultimulElement = matrice[n - 1][m - 1];

for(int i = 0; i < n; i++) {

matrice[0][i] = ultimulElement;

matrice[n - 1][i] = ultimulElement;

for(int i = 0; i < n; i++){

matrice[i][0] = ultimulElement;

matrice[i][m - 1] = ultimulElement; }

for(int i = 0; i < n; i++) {

for(int j = 0; j < m; j++) {

cout << matrice[i][j] << " "; }

cout << "n"; }

return 0; }

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