Matricile sunt tablouri bidimensionale şi pot fi asemuite cu o secvenţa de mai
multe şiruri. Dacă un element al unui şir se identifică cu elem[i] unde i reprezintă poziţia acelui element în cadrul şirului, la matrice un element se identifica prin elem[i][j] unde i reprezintă poziţia pe coloană (verticală) a acelui element, iar j reprezintă poziţia pe linie (orizontală) a acelui element. Dacă facem analogia cu şirurile, i reprezintă numărul şirului în care se află elementul, iar j reprezintă poziţia elementului în cadrul şirului i. j e00 e01 e02 e03 i e10 e11 e12 e13 e20 e21 e22 e23
Fig. 13.1 Structura unei matrice
O matrice va avea ca şi număr de elemente produsul dintre numărul de coloane
şi numărul de linii. Dacă notăm aceste valori cu m (vertical) respectiv cu n (orizontal) atunci o matrice Am·n are m · n elemente. În exemplul dat mai sus, m = 3 şi n = 4.
Obs. Ca şi în cazul şirurilor cei doi indici, i şi j, vor lua valori între 0 şi m-1 respectiv n-1.
13.1. Parcurgerea unei matrice
Fără a se analiza algoritmul de parcurgere, se poate explica în termeni comuni
modul de parcurgere, pe baza figurii 13.1. Se face poziţionarea pe primul element al matricei e[0][ 0] , şi se trece apoi, pas cu pas la următorul element din linia i, şi anume la e[0][1] până la ultimul element din linie, e[0][ 3] . Se trece apoi la primul element din următoarea linie e[1][ 0] , care se parcurge din nou, la fel ca şi prima, aceşti paşi repetându-se până când se atinge şi ultimul element e[ 2][ 3] . De foarte multe ori, în prezentarea unor scheme logice cuprinzând operaţii cu matrice, unele elemente sunt prezentate simplificat, pentru a reduce dimensiunile schemei logice, ceea ce poate crea uneori neînţelegeri. Astfel, în continuare se va prezenta algoritmul de bază folosit la parcurgerea unei matrice (fig. 13.2), indiferent de operaţiile care for fi efectuate asupra elementelor, iar în cazul reprezentărilor simplificate, se va face preciza acest lucru.
Algoritmul de parcurgere al unei matrice poate fi prezentat astfel:
1. Se citesc dimensiunile matricei, şi anume numărul de linii şi de coloane, m şi n; 2. Se consideră doi indici, i şi j care m, n vor reprezenta poziţia curentă în matrice; 3. Se poziţionează indicele liniei pe primul element, şi anume: i = 0; 4. Se poziţionează indicele coloanei i=0 pe primul element, şi anume: j = 0; 5. În figura 13.2. următorul bloc j=0 este notat cu BB – Black Box, marcând faptul că aici se pot face diferite operaţii, instrucţiuni sau blocuri de instrucţiuni aplicate asupra elementului curent (citire, scriere, comparare, etc.); 6. dată terminată această operaţie se j = j +1 va trece la următorul element, prin creşterea cu o unitate a j<n indicelui de coloană, j = j + 1; 7. Operaţiile din BB şi incrementarea indicelui j se face până când se i = i +1 ajunge la ultimul element de pe linia matricei, astfel încât condiţia j < n nu mai este i<m adevărată; 8. În acest moment se iese din primul bloc de ciclare şi se creşte indicele liniei, i, cu o unitate, i = i +1; Fig. 13.2. Parcurgerea unei matrice 9. Se verifică dacă prin noua sa valoare indicele i se află în matrice cu condiţia i < m; 10. Dacă condiţia este adevărată înseamnă că s-a trecut la o nouă linie şi algoritmul revine la instrucţiunea de poziţionare a indicelui coloanei pe primul element, poziţionarea pe primul element din linia i şi se revine astfel la pasul 4 continuându-se cu paşii 5, 6, 7, 8, 9; 11. Când indicele i nu mai respectă condiţia de la pasul 9 i < m înseamnă că au fost parcurse toate elementele matricei şi se poate trece la următorul pas din algoritm. Suma a două matrice
Suma a două matrice se
poate calcula doar între două matrice de aceeaşi m, n dimensiune, şi anume, dacă A[0][0] , A[0][1] , A[ m −1][ n −1] matricea A este de tip Am·n atunci şi B va fi de tip Bm·n B[0][0] , B[0][1] , B[ m −1][ n −1] (unde m şi n sunt fixe).
Schema logică de rezolvare a i=0
acestei probleme este prezentată în figura 13.3. j =0 Dacă se face o analiză a modului de rezolvare acesta se poate descrie, pe baza S[i ][ j ] = A[i ][ j ] + B[i ][ j ] algoritmului din figura 13.1 foarte simplu. Întrucât cele două matrice au aceleaşi j = j +1 dimensiuni elementele lor se pot citi în acelaşi timp. Astfel algoritmul se poate prezenta j<n foarte succint: 1. Se citesc dimensiunile matricelor, m şi n. i = i +1 2. Se utilizează secvenţa de parcurgere şi se citesc în paralel elementele celor i<m două matrice. 3. Se execută apoi o a doua parcurgere şi de această dată în Black Box, S[0][0] , S[0][1] , S[ m −1][n −1] în loc de citire, se introduce operaţia de însumare, cu crearea unei noi matrice, matricea Fig. 13.3. Suma a două matrice suma, cu relaţia S[i ][ j ] = A[i ][ j ] + B[i ][ j ] . 4. Se utilizează din nou aceeaşi secvenţă şi de această dată în Black Box se face tipărirea (afişarea) matricei sumă. Obs. Citirea celor două matrice şi afişarea matricei sumă s-a prezentat în formă simplificată pentru economie de spaţiu.