Sunteți pe pagina 1din 5

1

3.06.2020

Clasa 9A ‒Informatică
Matrici pătratice. Operații de prelucrare

B. Matrici pătratice
Sunt matricile pentru care numărul de linii=numărul de coloane=n, iar numărul de elemente= n2
Vom nota matricea cu Anxn iar elementele sale sunt:

a11 a12 a13 . . . . . . . . . . . . . . . . . . a1n


a21 a22 a23 . . . . . . . . . . . . . . . . . . a2n
a31 a32 a33 . . . . . . . . . . . . . . . . . a3n
......................................
an1 an2 an3 . . . . . . . . . . . . . . . . . . ann
Se observă că primul element se notează cu a11, iar ultimul element cu ann.

a11 a12 a13 a14 a15


a21 a22 a23 a24 a25
a31 a32 a33 a34 a35
a41 a42 a43 a44 a45
a51 a52 a53 a54 a55
Diagonala principală
Diagonala secundară
Figura 1 Matrice pătratică pentru care n=5

După cum se observă în Figura 1, o matrice pătratică are 2 diagonale:


Diagonala principală care unește primul element al matricei cu ultimul element
Diagonala secundară care unește ultimul element de pe prima linie a matricei cu primul element de pe
ultima linie a matricei
Ca urmare vor apărea operații de prelucrare specifice.

Operațiile de prelucrare ale unei matrici pătratice sunt:


1. Citirea matricei
2. Afișarea matricei
3. Afișarea elementelor de pe diagonala principală
4. Afișarea elementelor de pe diagonala secundară
5. Prelucrarea elementelor:
2

a. de deasupra diagonalei principale


b. de sub diagonala principală
6. Prelucrarea elementelor:
a. de deasupra diagonalei secundare
b. de sub diagonala secundară
7. Prelucrarea elementelor din cele 4 zone delimitate de diagonale

Fie matricea pătratică a cu n linii și n coloane, declarată mai jos:


int a[21][21],n,i,j;
Se consideră că, pentru citire și afișare se vor utiliza fișiere.
1. Citirea matricei
Se vor citi de pe prima linie a fișierului dimensiunea n, iar de pe următoarele n linii valorile pentru
elementele matricei, linie cu linie, începând cu primul element:

fin>>n; //se citesc numarul de linii si numarul de coloane


for(i=1;i<=n;i++) //pentru fiecare linie de la 1 la n
for(j=1;j<=n;j++) //pentru fiecare coloana de la 1 la n
fin>>a[i][j]; // se citeste elementul de pe linia i si coloana j

2. Afișarea matricei
Se va realiza afișarea elementelor matricei, linie cu linie:
for(i=1;i<=n;i++) //pentru fiecare linie de la 1 la n
{
for(j=1;j<=n;j++) //pentru fiecare coloana de la 1 la n
fout<<a[i][j]<<” ”; // afisam elementul de pe linia i si coloana j
fout<<”\n”; // Afisam o linie noua, astfel cele n linii se vor afla pe linii separate
}

3. Afișarea elementelor de pe diagonala principală


Pentru matricea din Figura 1 elementele de pe diagonala principală sunt: a11 a22 a33 a44 a55
Deci, indicele de linie i=indicele de coloană j pentru elementele de pe diagonala principală
Pentru afișarea elementelor de pe diagonala principală avem 2 variante și anume:

Varianta 1
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i==j)
fout<<a[i][j]<<” ”;

Varianta 2
for(i=1;i<=n;i++)
fout<<a[i][i]<<” ”;

4. Afișarea elementelor de pe diagonala secundară


În cazul matricei din Figura 1 elementele de pe diagonala secundară sunt: a15 a24 a33 a42 a51
După cum se observă indicii i și j îndeplinesc condiția i+j=6=n+1=constantă j=n+1-i
3

Și pentru afișarea elementelor de pe diagonala secundară avem 2 variante și anume:

Varianta 1
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(j==n+1-i)
fout<<a[i][j]<<” ”;

Varianta 2
for(i=1;i<=n;i++)
fout<<a[i][n+1-i]<<” ”;

5. Prelucrarea elementelor:
a. de deasupra diagonalei principale

După cum se observă din schiță, pentru elementele situate în zona de deasupra diagonalei principale indicele i
de linie și indicele j de coloană variază astfel:

𝐢 ∈ [𝟏, 𝐧 − 𝟏] ș𝐢 𝐣 ∈ [𝐢 + 𝟏, 𝐧] deoarece imediat deasupra diagonalei principale


indicele j=i+1
Calculul sumei elementelor de deasupra diagonalei principale

int s=0;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
s=s+ a[i][j];
fout<<” Suma=”<<s<<”\n”;
4

b. de sub diagonala principală

Pentru elementele situate în zona de sub diagonala principală, indicele i de linie și indicele j de coloană variază
astfe
𝐢 ∈ [𝟐, 𝐧], 𝐣 = 𝟏 𝐢𝐧𝐢ț𝐢𝐚𝐥 ș𝐢 𝐜𝐨𝐧𝐝𝐢ț𝐢𝐚 𝐝𝐞 𝐬𝐢𝐭𝐮𝐚𝐫𝐞 î𝐧 𝐳𝐨𝐧ă 𝐞𝐬𝐭𝐞
𝐣 < 𝐢 𝐝𝐞𝐨𝐚𝐫𝐞𝐜𝐞 𝐧𝐞 𝐠ă𝐬𝐢𝐦 𝐬𝐮𝐛 𝐝𝐢𝐚𝐠𝐨𝐧𝐚𝐥𝐚 𝐩𝐫𝐢𝐧𝐜𝐢𝐩𝐚𝐥ă

Calculul produsului elementelor de deasupra diagonalei principale


int p=1;
for(i=2;i<=n;i++)
for(j=1;j<i;j++)
p=p* a[i][j];
fout<<” Produsul=”<<p<<”\n”;

Aplicație

1. Fișierul matrice.in conține pe prima linie dimensiunea n a unei matrici pătratice (unde n<=30), iar pe
următoarele n linii valorile elementelor matricei, care sunt numere întregi. Să se realizeze:
a. Afișarea elementelor de pe diagonala principală
b. Afișarea elementelor de pe diagonala secundară
c. Calculul sumei elementelor de deasupra diagonalei principale
d. Calculul produsului elementelor de sub diagonala principală
Afișarea se va face în fișierul matrice.out.
Exemplu:
matrice.in matrice.out
4 Matricea contine:
1 2 3 4 1234
5 6 7 8 5678
9 10 11 12 9 10 11 12
13 14 15 16 13 14 15 16
Elementele de pe diag princ: 1 6 11 16
Elementele de pe diag sec: 4 7 10 13
Suma=36
Produsul=1228500
5

Problema1
Programul C++ este următorul:
#include <fstream>

using namespace std;


ifstream fin("matrice.in");
ofstream fout("matrice.out");
int main()
{
int a[21][21],n,i,j,s,p;
//CITIREA MATRICEI
fin>>n; //se citesc numarul de linii si numarul de coloane
for(i=1;i<=n;i++) //pentru fiecare linie de la 1 la n
for(j=1;j<=n;j++) //pentru fiecare coloana de la 1 la n
fin>>a[i][j]; // se citeste elementul de pe linia i si coloana j

//AFISAREA MATRICEI
fout<<"Matricea contine:\n";
for(i=1;i<=n;i++) //pentru fiecare linie de la 1 la n
{
for(j=1;j<=n;j++) //pentru fiecare coloana de la 1 la n
fout<<a[i][j]<<" "; // afisam elementul de pe linia i si coloana j
fout<<"\n"; // Afisam o linie noua, astfel cele n linii se vor afla pe linii separate
}

fout<<"Elementele de pe diag princ: ";


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

fout<<"\nElementele de pe diag sec: ";


for(i=1;i<=n;i++)
fout<<a[i][n+1-i]<<" ";
fout<<"\n";

s=0;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
s=s+ a[i][j];
fout<<"Suma="<<s<<"\n";

p=1;
for(i=2;i<=n;i++)
for(j=1;j<i;j++)
p=p* a[i][j];
fout<<"Produsul="<<p<<"\n";

return 0;
}

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