Sunteți pe pagina 1din 54

Matrice. Matrice pătratică.

Fundamente. Indici. Diagonale. Zone

Alexandra Laicu
Matrice. Fundamente.

alexandralaicu.ro
Fie această matrice cu 10 linii si 10 coloane
0 1 2 3 4 5 6 7 8 9
iecare căsuța reprezintă un
0 1 2 3 4 5 6 7 8 9 10 element din matrice
1 11 12 13 14 15 16 17 18 19 20
de obicei numerotarea liniilor si
2 21 22 23 24 25 26 27 28 29 30
a coloanelor pornește de la 0
3 31 32 33 34 35 36 37 38 39 40
(numerele roz din stânga si
4 41 42 43 44 45 46 47 48 49 50
deasupra matricei)
5 51 52 53 54 55 56 57 58 59 60

6 61 62 63 64 65 66 67 68 69 70 in cod o matrice se declară


7 71 72 73 74 75 76 77 78 79 80

8 81 82 83 84 85 86 87 88 89 90 tip nume[nr_linii][nr_coloane]
9 91 92 93 94 95 96 97 98 99 100 ex: int a[10][10]

alexandralaicu.ro
f

Indicii liniilor și coloanelor


0 1 2 3 4 5 6 7 8 9 Matricea are 10 linii numerotate
0 1 2 3 4 5 6 7 8 9 10 de la 0 la 9
1 11 12 13 14 15 16 17 18 19 20 prima linie are indexul 0
2 21 22 23 24 25 26 27 28 29 30
a doua linie are indexul 1
3 31 32 33 34 35 36 37 38 39 40

4 41 42 43 44 45 46 47 48 49 50 …
5 51 52 53 54 55 56 57 58 59 60
și 10 coloane numerotate de la
6 61 62 63 64 65 66 67 68 69 70
0 la 9
7 71 72 73 74 75 76 77 78 79 80

8 81 82 83 84 85 86 87 88 89 90
prima coloana are indexul 0
9 91 92 93 94 95 96 97 98 99 100 a doua coloana are indexul 1

alexandralaicu.ro

Indicii liniilor și coloanelor


0 1 2 3 4 5 6 7 8 9

0 1 2 3 4 5 6 7 8 9 10 tip nume[nr_linii][nr_coloane]
1 11 12 13 14 15 16 17 18 19 20 ex: int a[10][10]
2 21 22 23 24 25 26 27 28 29 30

3 31 32 33 34 35 36 37 38 39 40 în total în matrice pot exista maxim


4 41 42 43 44 45 46 47 48 49 50 nr_linii * nr_coloane elemente
5 51 52 53 54 55 56 57 58 59 60 în matricea din dreapta sunt
6 61 62 63 64 65 66 67 68 69 70 evidențiate
7 71 72 73 74 75 76 77 78 79 80 liniile cu indicii 2, 6 și 9
8 81 82 83 84 85 86 87 88 89 90
coloanele cu indicii 1, 5, 8
9 91 92 93 94 95 96 97 98 99 100

alexandralaicu.ro

Elementele se accesează cu ajutorul indicilor


a[0][0]
0 1 2 3 4 5 6 7 8 9
Pentru a accesa un element din
0 1 2 3 4 5 6 7 8 9 10
matrice, trebuie sa știm
1 11 12 13 14 15 16 17 18 19 20
1. pe ce linie si coloana se a la
2 21 22 23 24 25 26 27 28 29 30

31 32 33 34 35 36 37 38 39 40
2. sa determinam indicii
3
acestora
4 41 42 43 44 45 46 47 48 49 50

5 51 52 53 54 55 56 57 58 59 60 Accesarea folosește operatorul


6 61 62 63 64 65 66 67 68 69 70 de indexare [] atât pentru linii,
7 71 72 73 74 75 76 77 78 79 80
cât și pentru coloane
8 81 82 83 84 85 86 87 88 89 90 elementul de pe prima linie și
9 91 92 93 94 95 96 97 98 99 100 prima coloana este a[0][0]

alexandralaicu.ro index linie index coloană


Elementele se accesează cu ajutorul indicilor


0 1 2 3 4 5 6 7 8 9
a[1][7]
0 1 2 3 4 5 6 7 8 9 10

1 11 12 13 14 15 16 17 18 19 20
a[0][0]
2 21 22 23 24 25 26 27 28 29 30
a[4][5]
3 31 32 33 34 35 36 37 38 39 40

4 41 42 43 44 45 46 47 48 49 50

5 51 52 53 54 55 56 57 58 59 60 a[6][9]
6 61 62 63 64 65 66 67 68 69 70
a[7][1] 7 71 72 73 74 75 76 77 78 79 80

8 81 82 83 84 85 86 87 88 89 90

9 91 92 93 94 95 96 97 98 99 100

a[9][5]
alexandralaicu.ro index linie index coloană
Elementele se accesează cu ajutorul indicilor
a[0][0]
0 1 2 3 4 5 6 7 8 9 Este foarte important să nu
0 1 2 3 4 5 6 7 8 9 10 depășim limitele matricei
1 11 12 13 14 15 16 17 18 19 20 NU există linii sau coloane
2 21 22 23 24 25 26 27 28 29 30 mai mici decât primul index
3 31 32 33 34 35 36 37 38 39 40 (în cazul de față 0)
4 41 42 43 44 45 46 47 48 49 50
NU există linii sau coloane
5 51 52 53 54 55 56 57 58 59 60
mai mici decât ultimul index
6 61 62 63 64 65 66 67 68 69 70
(în cazul de față 9)
7 71 72 73 74 75 76 77 78 79 80
Exemple de accesări greșite:
8 81 82 83 84 85 86 87 88 89 90

9 91 92 93 94 95 96 97 98 99 100 a[-1][6] a[-2][20]


a[0][12] a[13][-1]
alexandralaicu.ro

Indicii care încep de la 1. Când îi folosim?


1 2 3 4 5 6 7 8 9 10 Folosim indexarea de la 1 doar
1 1 2 3 4 5 6 7 8 9 10 atunci când ni se speci ică clar
2 11 12 13 14 15 16 17 18 19 20 acest lucru in enunțul problemei.
3 21 22 23 24 25 26 27 28 29 30 Dacă nu ni se speci ică nimic,
4 31 32 33 34 35 36 37 38 39 40 folosim indexarea de la 0.
5 41 42 43 44 45 46 47 48 49 50
Matricea trebuie declarată
6 51 52 53 54 55 56 57 58 59 60
corespunzător
7 61 62 63 64 65 66 67 68 69 70

71 72 73 74 75 76 77 78 79 80
Exemplu o matrice cu 10 linii și
8
10 coloane
9 81 82 83 84 85 86 87 88 89 90

10 91 92 93 94 95 96 97 98 99 100 int a[10][10] (indexare de la 0)


int a[11][11] (indexare de la 1)
alexandralaicu.ro

f
f

De ce trebuie să declarăm dimensiunea cu 1 mai mult?


0 1 2 3 4 5 6 7 8 9 10 Atunci când folosim indexarea de
la 1 trebuie să declarăm o
0 0 0 0 0 0 0 0 0 0 0 0
dimensiune cu 1 mai mult
1 0 1 2 3 4 5 6 7 8 9 10
deoarece în memorie un tablou se
2 0 11 12 13 14 15 16 17 18 19 20
alocă automat de la 0.
3 0 21 22 23 24 25 26 27 28 29 30
Matricea pentru care utilizăm
4 0 31 32 33 34 35 36 37 38 39 40
indexarea de la 1 va i mai mare, va
5 0 41 42 43 44 45 46 47 48 49 50
avea o linie și o coloană în plus,
6 0 51 52 53 54 55 56 57 58 59 60
pentru a putea folosii indicii 1-10 în
7 0 61 62 63 64 65 66 67 68 69 70
loc de 0-9 (în cazul unei matrice
8 0 71 72 73 74 75 76 77 78 79 80
10x10).
9 0 81 82 83 84 85 86 87 88 89 90
Indexarea de la 1 presupune
10 0 91 92 93 94 95 96 97 98 99 100
ignorarea liniei 0 și coloanei 0
alexandralaicu.ro

Parcurgerea matricei (indici de la 0)


0 1 2 3 4 5 6 7 8 9 parcurgem matricea linie cu
0 1 2 3 4 5 6 7 8 9 10
linie
1 11 12 13 14 15 16 17 18 19 20 si iecare linie o parcurgem
2 21 22 23 24 25 26 27 28 29 30 coloană cu coloană
3 31 32 33 34 35 36 37 38 39 40
in cod acest lucru se realizează
4 41 42 43 44 45 46 47 48 49 50 folosind 2 structuri repetitive
5 51 52 53 54 55 56 57 58 59 60 cu contor: prima pentru linii (i)
6 61 62 63 64 65 66 67 68 69 70 si a doua pentru coloane (j)
7 71 72 73 74 75 76 77 78 79 80 for ( i=0; i < n; i++)
8 81 82 83 84 85 86 87 88 89 90
for (j=0; j < n; j++){
9 91 92 93 94 95 96 97 98 99 100
accesare element a[i][j]
}
alexandralaicu.ro
f

Parcurgerea matricei (indici de la 0)


0 1 2 3 4 5 6 7 8 9
matricea se poate parcurge și
0 1 2 3 4 5 6 7 8 9 10
pe coloane
1 11 12 13 14 15 16 17 18 19 20

2 21 22 23 24 25 26 27 28 29 30
in cod acest lucru se realizează
folosind tot 2 structuri
3 31 32 33 34 35 36 37 38 39 40
repetitive cu contor: prima
4 41 42 43 44 45 46 47 48 49 50
pentru coloane (j) si a doua
5 51 52 53 54 55 56 57 58 59 60
pentru linii (i)
6 61 62 63 64 65 66 67 68 69 70
for ( j=0; j < n; j++)
7 71 72 73 74 75 76 77 78 79 80
for (i=0; i < n; i++){
8 81 82 83 84 85 86 87 88 89 90
accesare element a[i][j]
9 91 92 93 94 95 96 97 98 99 100
}
alexandralaicu.ro

Parcurgerea matricei (indici de la 1)


1 2 3 4 5 6 7 8 9 10 parcurgem matricea linie cu
1 1 2 3 4 5 6 7 8 9 10
linie
2 11 12 13 14 15 16 17 18 19 20 si iecare linie o parcurgem
3 21 22 23 24 25 26 27 28 29 30 coloană cu coloană
4 31 32 33 34 35 36 37 38 39 40
in cod acest lucru se realizează
5 41 42 43 44 45 46 47 48 49 50 folosind 2 structuri repetitive
6 51 52 53 54 55 56 57 58 59 60 cu contor: prima pentru linii (i)
7 61 62 63 64 65 66 67 68 69 70 si a doua pentru coloane (j)
8 71 72 73 74 75 76 77 78 79 80 for ( i=1; i <= n; i++)
9 81 82 83 84 85 86 87 88 89 90
for (j=1; j<= n; j++){
10 91 92 93 94 95 96 97 98 99 100
accesare element a[i][j]
}
alexandralaicu.ro
f

Parcurgerea matricei (indici de la 1)


0 1 2 3 4 5 6 7 8 9
matricea se poate parcurge și
0 1 2 3 4 5 6 7 8 9 10
pe coloane
1 11 12 13 14 15 16 17 18 19 20

2 21 22 23 24 25 26 27 28 29 30
in cod acest lucru se realizează
folosind tot 2 structuri
3 31 32 33 34 35 36 37 38 39 40
repetitive cu contor: prima
4 41 42 43 44 45 46 47 48 49 50
pentru coloane (j) si a doua
5 51 52 53 54 55 56 57 58 59 60
pentru linii (i)
6 61 62 63 64 65 66 67 68 69 70
for (j=1; j<= n; j++)
7 71 72 73 74 75 76 77 78 79 80
for (i=1; i <= n; i++){
8 81 82 83 84 85 86 87 88 89 90
accesare element a[i][j]
9 91 92 93 94 95 96 97 98 99 100
}
alexandralaicu.ro

Caz general pentru o matrice n*m


Pornind de la indicii 0 Pornind de la indicii 1

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


for (j=0; j < m; j++){ for (j=1; j<= m; j++){
accesare element a[i][j] accesare element a[i][j]
} }

n = numarul de linii
m = numarul de coloane
Matrice pătratică => n = m

Caz general pentru o matrice n*m


Pornind de la indicii 0 Pornind de la indicii 1

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


for (j=0; j < m; j++){ for (j=1; j<= m; j++){
accesare element a[i][j] accesare element a[i][j]
} }

In cazul matricei date ca exemplu anterior, n=m=10


Parcurgerea unei linii


0 1 2 3 4 5 6 7 8 9

0 1 2 3 4 5 6 7 8 9 10

1 11 12 13 14 15 16 17 18 19 20
Toate elementele de pe aceeași
2 21 22 23 24 25 26 27 28 29 30
linie au același indice de linie și
3 31 32 33 34 35 36 37 38 39 40
diferă doar indicele de
4 41 42 43 44 45 46 47 48 49 50
coloană.
5 51 52 53 54 55 56 57 58 59 60

6 61 62 63 64 65 66 67 68 69 70
Din acest motiv este nevoie de
71 72 73 74 75 76 77 78 79 80
o singură structură repetitivă
7
pentru a parcurge o linie.
8 81 82 83 84 85 86 87 88 89 90

9 91 92 93 94 95 96 97 98 99 100

alexandralaicu.ro

Parcurgerea liniei cu indicele k

Pornind de la indicii 0 Pornind de la indicii 1

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


accesare element a[k][j] accesare element a[k][j]
} }

n = numarul de linii
m = numarul de coloane
alexandralaicu.ro

Parcurgerea unei coloane


0 1 2 3 4 5 6 7 8 9

0 1 2 3 4 5 6 7 8 9 10

1 11 12 13 14 15 16 17 18 19 20
Toate elementele de pe aceeași
2 21 22 23 24 25 26 27 28 29 30
coloană au același indice de
3 31 32 33 34 35 36 37 38 39 40
coloană și diferă doar indicele
4 41 42 43 44 45 46 47 48 49 50
de linie.
5 51 52 53 54 55 56 57 58 59 60

6 61 62 63 64 65 66 67 68 69 70
Din acest motiv este nevoie de
71 72 73 74 75 76 77 78 79 80
o singură structură repetitivă
7
pentru a parcurge o coloană.
8 81 82 83 84 85 86 87 88 89 90

9 91 92 93 94 95 96 97 98 99 100

alexandralaicu.ro

Parcurgerea coloanei cu indicele k

Pornind de la indicii 0 Pornind de la indicii 1

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


accesare element a[i][k] accesare element a[i][k]
} }

n = numarul de linii
m = numarul de coloane
alexandralaicu.ro

Citirea unei matrice


0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 10

0 1 2 3 4 5 6 7 8 9 10 1 1 2 3 4 5 6 7 8 9 10
1 11 12 13 14 15 16 17 18 19 20 2 11 12 13 14 15 16 17 18 19 20
2 21 22 23 24 25 26 27 28 29 30 3 21 22 23 24 25 26 27 28 29 30
3 31 32 33 34 35 36 37 38 39 40 4 31 32 33 34 35 36 37 38 39 40
4 41 42 43 44 45 46 47 48 49 50 5 41 42 43 44 45 46 47 48 49 50
5 51 52 53 54 55 56 57 58 59 60 6 51 52 53 54 55 56 57 58 59 60
6 61 62 63 64 65 66 67 68 69 70 7 61 62 63 64 65 66 67 68 69 70
7 71 72 73 74 75 76 77 78 79 80 8 71 72 73 74 75 76 77 78 79 80
8 81 82 83 84 85 86 87 88 89 90 9 81 82 83 84 85 86 87 88 89 90
9 91 92 93 94 95 96 97 98 99 100 10 91 92 93 94 95 96 97 98 99 100

Se folosesc aceleași instrucțiuni ca în cazul parcurgerii matricei


Putem citi matricea ie pe linii, ie pe coloane
Cea mai comună abordare este citirea pe linii

alexandralaicu.ro
f
f

Caz general pentru o matrice n*m


Pornind de la indicii 0 Pornind de la indicii 1

cin >> n >> m; cin >> n >> m;


for ( i=0; i < n; i++) for ( i=1; i <= n; i++)
for (j=0; j < m; j++) for (j=1; j<= m; j++)
cin >> a[i][j]; cin >> a[i][j];

Elementele se vor citi de sus în jos și de la stânga la dreapta.


Trebuie citite și n și m, pentru a determina numărul real de elemente.

A ișarea unei matrice


0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 10

0 1 2 3 4 5 6 7 8 9 10 1 1 2 3 4 5 6 7 8 9 10
1 11 12 13 14 15 16 17 18 19 20 2 11 12 13 14 15 16 17 18 19 20
2 21 22 23 24 25 26 27 28 29 30 3 21 22 23 24 25 26 27 28 29 30
3 31 32 33 34 35 36 37 38 39 40 4 31 32 33 34 35 36 37 38 39 40
4 41 42 43 44 45 46 47 48 49 50 5 41 42 43 44 45 46 47 48 49 50
5 51 52 53 54 55 56 57 58 59 60 6 51 52 53 54 55 56 57 58 59 60
6 61 62 63 64 65 66 67 68 69 70 7 61 62 63 64 65 66 67 68 69 70
7 71 72 73 74 75 76 77 78 79 80 8 71 72 73 74 75 76 77 78 79 80
8 81 82 83 84 85 86 87 88 89 90 9 81 82 83 84 85 86 87 88 89 90
9 91 92 93 94 95 96 97 98 99 100 10 91 92 93 94 95 96 97 98 99 100

Se folosesc aceleași instrucțiuni ca în cazul parcurgerii matricei


Pentru a obține pe ecran chiar o matrice, după iecare linie a ișată vom
trece pe un rând nou, iar elementele unei linii vor i separate prin spațiu

alexandralaicu.ro
f
f
f
f

Caz general pentru o matrice n*m


Pornind de la indicii 0 Pornind de la indicii 1

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


for (j=0; j < m; j++) for (j=1; j<= m; j++)
cout << a[i][j] << “ “; cout << a[i][j] << “ “;
cout << endl; cout << endl;
} }

Elementele se vor a ișa de sus în jos și de la stânga la dreapta.


Matricea pătratică.

alexandralaicu.ro
Diagonalele matricei
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 Cu roșu marcăm diagonala


41 42 43 44 45 46 47 48 49 50 principală
51 52 53 54 55 56 57 58 59 60
Cu galben marcăm diagonala
61 62 63 64 65 66 67 68 69 70 secundară
71 72 73 74 75 76 77 78 79 80

81 82 83 84 85 86 87 88 89 90

91 92 93 94 95 96 97 98 99 100

alexandralaicu.ro

Cum ne dăm seama ca un element este pe diagonala principală?

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 Veri icăm anumite proprietăți


31 32 33 34 35 36 37 38 39 40 ale indicilor
41 42 43 44 45 46 47 48 49 50 i este indicele corespunzător
51 52 53 54 55 56 57 58 59 60 liniilor
61 62 63 64 65 66 67 68 69 70
j este indicele corespunzător
71 72 73 74 75 76 77 78 79 80
coloanelor
81 82 83 84 85 86 87 88 89 90

91 92 93 94 95 96 97 98 99 100

alexandralaicu.ro
f

Cum ne dăm seama ca un element este pe diagonala principală?

1 2 3 4 5 6 7 8 9 10
Un element se a lă pe
11 12 13 14 15 16 17 18 19 20
diagonala principală dacă i
21 22 23 24 25 26 27 28 29 30
este egal cu j
31 32 33 34 35 36 37 38 39 40

41 42 43 44 45 46 47 48 49 50
Se veri ică acest lucru pentru
iecare element în parte, în
51 52 53 54 55 56 57 58 59 60
parcurgerea cu cele 2 structuri
61 62 63 64 65 66 67 68 69 70
repetitive cu contor:
71 72 73 74 75 76 77 78 79 80
if ( i == j )
81 82 83 84 85 86 87 88 89 90

91 92 93 94 95 96 97 98 99 100

alexandralaicu.ro
f
f

Cum ne dăm seama ca un element este pe diagonala principală?

Pornind de la indicii 0 Pornind de la indicii 1

int n = 10; int n = 10;


for ( i=0; i < n; i++) for ( i=1; i <= n; i++)
for (j=0; j < n; j++){ for (j=1; j<= n; j++){
if( i == j ) if( i == j )
//element pe diagonala //element pe diagonala
principală principală
} }

alexandralaicu.ro

Indicii matricei

Pentru a înțelege mai bine relația dintre poziția elementelor și


indicii liniilor și a coloanelor, vom înlocui, cu scop explicativ,
elementele matricei cu numere de forma ij:

• i este indicele liniei


•j este indicele coloanei.

alexandralaicu.ro

Cum ne dăm seama ca un element este pe diagonala principală?

00 01 02 03 04 05 06 07 08 09

10 11 12 13 14 15 16 17 18 19 Indici de la 0
20 21 22 23 24 25 26 27 28 29
Se observa clar relația dintre
30 31 32 33 34 35 36 37 38 39
indicii i si j pentru
40 41 42 43 44 45 46 47 48 49
elementele a late pe
50 51 52 53 54 55 56 57 58 59
diagonala principală:
60 61 62 63 64 65 66 67 68 69

70 71 72 73 74 75 76 77 78 79 i este egal cu j
80 81 82 83 84 85 86 87 88 89

90 91 92 93 94 95 96 97 98 99

alexandralaicu.ro
f

Cum ne dăm seama ca un element este pe diagonala principală?

11 12 13 14 15 16 17 18 19 110

21 22 23 24 25 26 27 28 29 210 Indici de la 1
31 32 33 34 35 36 37 38 39 310
Se observa clar relația dintre
41 42 43 44 45 46 47 48 49 410
indicii i si j pentru
51 52 53 54 55 56 57 58 59 510
elementele a late pe
61 62 63 64 65 66 67 68 69 610
diagonala principală:
71 72 73 74 75 76 77 78 79 710

81 82 83 84 85 86 87 88 89 810 i este egal cu j


91 92 93 94 95 96 97 98 99 910

101 102 103 104 105 106 107 108 109 1010

alexandralaicu.ro

Cum ne dăm seama ca un element este pe diagonala secundară?

00 01 02 03 04 05 06 07 08 09

10 11 12 13 14 15 16 17 18 19 Indici de la 0
20 21 22 23 24 25 26 27 28 29
Se observa clar relația dintre
30 31 32 33 34 35 36 37 38 39
indicii i si j pentru
40 41 42 43 44 45 46 47 48 49
elementele a late pe
50 51 52 53 54 55 56 57 58 59
diagonala principală:
60 61 62 63 64 65 66 67 68 69

70 71 72 73 74 75 76 77 78 79 i + j este egal cu 9 ( n-1)


80 81 82 83 84 85 86 87 88 89

90 91 92 93 94 95 96 97 98 99

alexandralaicu.ro
f

Cum ne dăm seama ca un element este pe diagonala secundară?

11 12 13 14 15 16 17 18 19 110

21 22 23 24 25 26 27 28 29 210 Indici de la 1
31 32 33 34 35 36 37 38 39 310
Se observa clar relația dintre
41 42 43 44 45 46 47 48 49 410
indicii i si j pentru
51 52 53 54 55 56 57 58 59 510
elementele a late pe
61 62 63 64 65 66 67 68 69 610
diagonala principală:
71 72 73 74 75 76 77 78 79 710

81 82 83 84 85 86 87 88 89 810 i + j este egal cu 11 ( n+1)


91 92 93 94 95 96 97 98 99 910

101 102 103 104 105 106 107 108 109 1010

alexandralaicu.ro

Cum ne dăm seama ca un element este pe diagonala secundară?

Pornind de la indicii 0 Pornind de la indicii 1

int n = 10; int n = 10;


for ( i=0; i < n; i++) for ( i=1; i <= n; i++)
for (j=0; j < n; j++){ for (j=1; j<= n; j++){
if( i + j == n - 1 ) if( i + j == n + 1 )
//element pe diagonala //element pe diagonala
secundară secundară
} }

alexandralaicu.ro

Cum ne dăm seama ca un element este deasupra diagonalei principale?


00 01 02 03 04 05 06 07 08 09 11 12 13 14 15 16 17 18 19 110
10 11 12 13 14 15 16 17 18 19 21 22 23 24 25 26 27 28 29 210
20 21 22 23 24 25 26 27 28 29 31 32 33 34 35 36 37 38 39 310
30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 47 48 49 410
40 41 42 43 44 45 46 47 48 49 51 52 53 54 55 56 57 58 59 510
50 51 52 53 54 55 56 57 58 59 61 62 63 64 65 66 67 68 69 610
60 61 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 78 79 710
70 71 72 73 74 75 76 77 78 79 81 82 83 84 85 86 87 88 89 810
80 81 82 83 84 85 86 87 88 89 91 92 93 94 95 96 97 98 99 910
90 91 92 93 94 95 96 97 98 99 101 102 103 104 105 106 107 108 109 1010

Observăm că pentru toate elementele de deasupra diagonalei


principale i este mai mic decât j

alexandralaicu.ro
Cum ne dăm seama ca un element este deasupra diagonalei principale?

Pornind de la indicii 0 Pornind de la indicii 1

int n = 10; int n = 10;


for ( i=0; i < n; i++) for ( i=1; i <= n; i++)
for (j=0; j < n; j++){ for (j=1; j<= n; j++){
if( i < j ) if( i < j )
//element deasupra //element deasupra
diagonalei principale diagonalei principale
} }

alexandralaicu.ro

Cum ne dăm seama ca un element este dedesubtul diagonalei principale?

00 01 02 03 04 05 06 07 08 09 11 12 13 14 15 16 17 18 19 110
10 11 12 13 14 15 16 17 18 19 21 22 23 24 25 26 27 28 29 210
20 21 22 23 24 25 26 27 28 29 31 32 33 34 35 36 37 38 39 310
30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 47 48 49 410
40 41 42 43 44 45 46 47 48 49 51 52 53 54 55 56 57 58 59 510
50 51 52 53 54 55 56 57 58 59 61 62 63 64 65 66 67 68 69 610
60 61 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 78 79 710
70 71 72 73 74 75 76 77 78 79 81 82 83 84 85 86 87 88 89 810
80 81 82 83 84 85 86 87 88 89 91 92 93 94 95 96 97 98 99 910
90 91 92 93 94 95 96 97 98 99 101 102 103 104 105 106 107 108 109 1010

Observăm că pentru toate elementele de dedesubtul diagonalei


principale i este mai mare decât j

alexandralaicu.ro
Cum ne dăm seama ca un element este dedesubtul diagonalei principale?

Pornind de la indicii 0 Pornind de la indicii 1

int n = 10; int n = 10;


for ( i=0; i < n; i++) for ( i=1; i <= n; i++)
for (j=0; j < n; j++){ for (j=1; j<= n; j++){
if( i > j ) if( i > j )
//element dedesubtul //element dedesubtul
diagonalei principale diagonalei principale
} }

alexandralaicu.ro

Cum ne dăm seama ca un element este deasupra diagonalei secundară?

00 01 02 03 04 05 06 07 08 09 11 12 13 14 15 16 17 18 19 110
10 11 12 13 14 15 16 17 18 19 21 22 23 24 25 26 27 28 29 210
20 21 22 23 24 25 26 27 28 29 31 32 33 34 35 36 37 38 39 310
30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 47 48 49 410
40 41 42 43 44 45 46 47 48 49 51 52 53 54 55 56 57 58 59 510
50 51 52 53 54 55 56 57 58 59 61 62 63 64 65 66 67 68 69 610
60 61 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 78 79 710
70 71 72 73 74 75 76 77 78 79 81 82 83 84 85 86 87 88 89 810
80 81 82 83 84 85 86 87 88 89 91 92 93 94 95 96 97 98 99 910
90 91 92 93 94 95 96 97 98 99 101 102 103 104 105 106 107 108 109 1010

Observăm că pentru toate elementele de deasupra diagonalei


principale suma i + j este mai mica decât
n-1 atunci când indicii pornesc de la 0
n+1 atunci când indicii pornesc de la 1
alexandralaicu.ro

Cum ne dăm seama ca un element este deasupra diagonalei secundară?

Pornind de la indicii 0 Pornind de la indicii 1

int n = 10; int n = 10;


for ( i=0; i < n; i++) for ( i=1; i <= n; i++)
for (j=0; j < n; j++){ for (j=1; j<= n; j++){
if( i + j < n-1) if( i + j < n + 1 )
//element deasupra //element deasupra
diagonalei secundare diagonalei secundare
} }

alexandralaicu.ro

Cum ne dăm seama ca un element este dedesubtul diagonalei secundară?

00 01 02 03 04 05 06 07 08 09 11 12 13 14 15 16 17 18 19 110
10 11 12 13 14 15 16 17 18 19 21 22 23 24 25 26 27 28 29 210
20 21 22 23 24 25 26 27 28 29 31 32 33 34 35 36 37 38 39 310
30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 47 48 49 410
40 41 42 43 44 45 46 47 48 49 51 52 53 54 55 56 57 58 59 510
50 51 52 53 54 55 56 57 58 59 61 62 63 64 65 66 67 68 69 610
60 61 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 78 79 710
70 71 72 73 74 75 76 77 78 79 81 82 83 84 85 86 87 88 89 810
80 81 82 83 84 85 86 87 88 89 91 92 93 94 95 96 97 98 99 910
90 91 92 93 94 95 96 97 98 99 101 102 103 104 105 106 107 108 109 1010

Observăm că pentru toate elementele de dedesubtul diagonalei


principale suma i + j este mai mare decât
n-1 atunci când indicii pornesc de la 0
n+1 atunci când indicii pornesc de la 1
alexandralaicu.ro

Cum ne dăm seama ca un element este dedesubtul diagonalei secundară?

Pornind de la indicii 0 Pornind de la indicii 1

int n = 10; int n = 10;


for ( i=0; i < n; i++) for ( i=1; i <= n; i++)
for (j=0; j < n; j++){ for (j=1; j<= n; j++){
if( i + j > n-1) if( i + j > n + 1 )
//element dedesubtul //element dedesubtul
diagonalei secundare diagonalei secundare
} }

alexandralaicu.ro

Zonele matricei
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 Cu roșu marcăm diagonala


41 42 43 44 45 46 47 48 49 50 principală
51 52 53 54 55 56 57 58 59 60
Cu galben marcăm diagonala
61 62 63 64 65 66 67 68 69 70 secundară
71 72 73 74 75 76 77 78 79 80

81 82 83 84 85 86 87 88 89 90

91 92 93 94 95 96 97 98 99 100

alexandralaicu.ro

Zonele matricei
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 Zonele matricei se determina în


31 32 33 34 35 36 37 38 39 40 raport cu diagonalele sale
41 42 43 44 45 46 47 48 49 50
Fiecare matrice are 4 zone:
51 52 53 54 55 56 57 58 59 60

61 62 63 64 65 66 67 68 69 70
NORD EST
71 72 73 74 75 76 77 78 79 80 SUD VEST
81 82 83 84 85 86 87 88 89 90

91 92 93 94 95 96 97 98 99 100

alexandralaicu.ro

Cum ne dăm seama ca un element se a lă într-o anumită zonă?


1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20 11 12 13 14 15 16 17 18 19 20 11 12 13 14 15 16 17 18 19 20 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 21 22 23 24 25 26 27 28 29 30 21 22 23 24 25 26 27 28 29 30 21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40 31 32 33 34 35 36 37 38 39 40 31 32 33 34 35 36 37 38 39 40 31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50 41 42 43 44 45 46 47 48 49 50 41 42 43 44 45 46 47 48 49 50 41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60 51 52 53 54 55 56 57 58 59 60 51 52 53 54 55 56 57 58 59 60 51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70 61 62 63 64 65 66 67 68 69 70 61 62 63 64 65 66 67 68 69 70 61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80 71 72 73 74 75 76 77 78 79 80 71 72 73 74 75 76 77 78 79 80 71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90 81 82 83 84 85 86 87 88 89 90 81 82 83 84 85 86 87 88 89 90 81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100 91 92 93 94 95 96 97 98 99 100 91 92 93 94 95 96 97 98 99 100 91 92 93 94 95 96 97 98 99 100

Vom combina condițiile determinate anterior pentru iecare diagonală

diagonala principală diagonala secundară


deasupra i < j deasupra i + j < n-1 (n+1)
dedesubt i > j dedesubt i + j > n-1 (n+1)

alexandralaicu.ro

f
f
Zona NORD
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
Se a lă
31 32 33 34 35 36 37 38 39 40

41 42 43 44 45 46 47 48 49 50
deasupra diagonalei
principale i < j
51 52 53 54 55 56 57 58 59 60

61 62 63 64 65 66 67 68 69 70 deasupra diagonalei
71 72 73 74 75 76 77 78 79 80 secundare i + j < n-1 (n+1)
81 82 83 84 85 86 87 88 89 90

S
P
91 92 93 94 95 96 97 98 99 100

alexandralaicu.ro
f

Condiția ca un element să se a le în zona NORD

Pornind de la indicii 0 Pornind de la indicii 1

int n = 10; int n = 10;


for ( i=0; i < n; i++) for ( i=1; i <= n; i++)
for (j=0; j < n; j++){ for (j=1; j<= n; j++){
if( i < j && i + j < n-1 ) if( i < j && i + j < n+1 )
//element în zona NORD //element în zona NORD
} }

alexandralaicu.ro

f
Zona SUD
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
Se a lă
31 32 33 34 35 36 37 38 39 40

41 42 43 44 45 46 47 48 49 50
dedesubtul diagonalei
principale i > j
51 52 53 54 55 56 57 58 59 60

61 62 63 64 65 66 67 68 69 70 dedesubtul diagonalei
71 72 73 74 75 76 77 78 79 80 secundare i + j < n-1 (n+1)
81 82 83 84 85 86 87 88 89 90

S
P
91 92 93 94 95 96 97 98 99 100

alexandralaicu.ro
f

Condiția ca un element să se a le în zona SUD

Pornind de la indicii 0 Pornind de la indicii 1

int n = 10; int n = 10;


for ( i=0; i < n; i++) for ( i=1; i <= n; i++)
for (j=0; j < n; j++){ for (j=1; j<= n; j++){
if( i > j && i + j > n-1 ) if( i > j && i + j > n+1 )
//element în zona SUD //element în zona SUD
} }

alexandralaicu.ro

f
Zona EST
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
Se a lă
31 32 33 34 35 36 37 38 39 40

41 42 43 44 45 46 47 48 49 50
deasupra diagonalei
principale i < j
51 52 53 54 55 56 57 58 59 60

61 62 63 64 65 66 67 68 69 70 dedesubtul diagonalei
71 72 73 74 75 76 77 78 79 80 secundare i + j > n-1 (n+1)
81 82 83 84 85 86 87 88 89 90

S
91 92 93 94 95 96 97 98 99 100

alexandralaicu.ro
f

Condiția ca un element să se a le în zona EST

Pornind de la indicii 0 Pornind de la indicii 1

int n = 10; int n = 10;


for ( i=0; i < n; i++) for ( i=1; i <= n; i++)
for (j=0; j < n; j++){ for (j=1; j<= n; j++){
if( i < j && i + j > n-1 ) if( i < j && i + j > n+1 )
//element în zona EST //element în zona EST
} }

alexandralaicu.ro

f
Zona VEST
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
Se a lă
31 32 33 34 35 36 37 38 39 40

41 42 43 44 45 46 47 48 49 50
dedesubtul diagonalei
principale i > j
51 52 53 54 55 56 57 58 59 60

61 62 63 64 65 66 67 68 69 70 deasupra diagonalei
71 72 73 74 75 76 77 78 79 80 secundare i + j < n-1 (n+1)
81 82 83 84 85 86 87 88 89 90

S
P
91 92 93 94 95 96 97 98 99 100

alexandralaicu.ro
f

Condiția ca un element să se a le în zona VEST

Pornind de la indicii 0 Pornind de la indicii 1

int n = 10; int n = 10;


for ( i=0; i < n; i++) for ( i=1; i <= n; i++)
for (j=0; j < n; j++){ for (j=1; j<= n; j++){
if( i > j && i + j < n-1 ) if( i > j && i + j < n+1 )
//element în zona VEST //element în zona VEST
} }

alexandralaicu.ro

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