Sunteți pe pagina 1din 0

Tablouri

bidimensionale

Consideraii teoretice
Probleme propuse
Soluiile problemelor propuse
Capitolul
9


9.1. Consideraii teoretice
n Pascal avem posibilitatea de a lucra cu tablouri bidimensionale sau chiar multidi-
mensionale. Un tablou bidimensional poate fi imaginat sub forma unei foi de matema-
tic pe care fiecare ptrel poate fi precizat prin numrul de linii fa de marginea de
sus a foii i numrul de coloane fa de marginea din stnga a foii. Deci, ntr-un tablou
bidimensional fiecare element va fi n mod unic identificat de ctre doi indici, indicele
de linie i indicele de coloan.
Tablourile bidimensionale sunt o generalizare a tablourilor unidimensionale. Am
putea privi un tablou unidimensional ca fiind un tablou bidimensional care are o sin-
gur linie. Tabloul bidimensional este de fapt un tablou unidimensional n care fiecare
element este un tablou unidimensional.
O variabil de tip tablou bidimensional se poate declara definind mai nti un tip ta-
blou bidimensional i apoi declarnd variabile de acest tip:

type Matrice=array[1..100,1..200] of Integer;
var m:Matrice;

O alt posibilitate este prin precizarea tipul tablou bidimensional direct n declara-
ia variabilei:

var m:array[1..100,1..200] of Integer;

Un element al matricei se va referi prin doi indici, de exemplu m[3,4] va fi ele-
mentul de pe linia 3 i coloana 4 a matricei m declarate mai sus.
n rest, toate observaiile pe care le-am fcut n lecia teoretic, referitor la tipul ta-
blou n Pascal sunt valabile i n cazul matricelor.

Am putea defini o matrice ca i un tablou de tablouri:
type Linie=array[1..100] of Integer;
108 9. Tablouri bidimensionale

Matrice=array[1..100] of Linie;
var m:Matrice;
sau
var m:array[1..100] of array [1..100] of Integer;

Dac suntei ingenioi, vei putea rezolva foarte simplu problema a doua din lecia
de astzi folosind o asemenea modalitate de definire a unei matrice.

Dac o matrice are numrul de linii egal cu numrul de coloane, atunci matricea se
numete ptratic. O asemenea matrice are o diagonal principal, format din ele-
mentele aflate pe segmentul de dreapt care unete colul din stnga-sus i colul din
dreapta-jos al matricei i o diagonal secundar format din elementele care se afl pe
segmentul de dreapt care unete celelalte dou coluri ale ptratului.

9.2. Probleme propuse

9.2.1. Valori nule n matrice
Se citete o matrice avnd m linii i n coloane ale crei elemente sunt numere ntregi.
Determinai poziiile elementelor nule din matrice. n final, afiai i matricea citit.

Date de intrare
Se dau dou numere naturale m i n. Apoi se dau m n numere ntregi, reprezentnd
elementele matricei.

Date de ieire
Se va afia pe fiecare linie cte o pereche de valori reprezentnd indicii de linie, res-
pectiv de coloan ai fiecrui element egal cu zero din matrice. Apoi vor fi scrise m li-
nii cu cte n elemente, desprite prin cte un spaiu.

Restricii i precizri
2 m, n 10.

Exemplu
Intrare
m=3 n=4

1 4 0 2
3 0 1 0
6 5 2 7
Ieire
1 3
2 2
2 4
1 4 0 2
3 0 1 0
6 5 2 7
Explicaie
Parcurgnd matricea pe linii, primul zero
se afl pe linia 1 i coloana 3, al doilea pe
linia 2 i coloana 2, al treilea pe linia 2 i
coloana 4.

9. Tablouri bidimensionale 109

9.2.1. Interschimbare
Se d o matrice avnd m linii i n coloane. S se interschimbe dou linii ale matricei.

Date de intrare
Se dau dou numere naturale m i n. Apoi se dau m n numere ntregi, reprezentnd
elementele matricei. n final se citesc de la tastatur indicii lin
1
i lin
2
ai celor dou
linii care se vor interschimba.

Date de ieire
Se va afia matricea nainte i dup interschimbare.

Restricii i precizri
2 m, n 10.
dac indicele de linie nu reprezint o linie din matrice, se va afia mesajul:
'Indice gresit.'

Exemplu
Intrare
m=3 n=4

1 4 0 2
3 0 1 0
6 5 2 7

lin1=1
lin2=3
Ieire
1 4 0 2
3 0 1 0
6 5 2 7

6 5 2 7
3 0 1 0
1 4 0 2
Explicaie
Matricea iniial.



Matricea avnd liniile 1 i 3 interschimbate.

9.2.3. Ptrat magic
Un ptrat magic este o matrice ptratic avnd elementele numere naturale pentru care
suma elementelor de pe oricare linie a matricei este egal cu suma elementelor de pe
oricare coloan a matricei i cu suma elementelor de pe fiecare dintre cele dou diago-
nale ale matricei.
Se d o matrice ptratic avnd n linii i tot attea coloane. Stabilii dac aceast
matrice reprezint sau nu un ptrat magic.

Date de intrare
Se d un numr natural n i n
2
numere naturale reprezentnd elementele matricei.

Date de ieire
Se va afia 'DA' sau 'NU' dup cum matricea dat este sau nu ptrat magic.

110 9. Tablouri bidimensionale

Restricii i precizri
2 n 10.

Exemple
Intrare
n=3
1 4 8
3 5 1
8 2 7

n=3
4 3 8
9 5 1
2 7 6
Ieire
NU




DA
Explicaie
Matricea dat nu este ptrat magic.




Matricea dat este ptrat magic.

9.2.4. Sume speciale
n figura de mai jos sunt redate regiunile speciale ale unei matrice ptratice cu n linii i
n coloane.

1 2 1 3 2 10000 1 2 1 3 2 1000 1 2 1 3 2
4 5 6 7 8 4 5 6 7 8 4 5 6 7 8
2 1 6 2 3 2 1 6 2 3 2 1 6 2 3
5 2 1 3 2 5 2 1 3 2 5 2 1 3 2
1 2 6 1 3 1 2 6 1 3 1 2 6 1 3
1
1

1 2 1 3 2 1 2 1 3 2 1 2 1 3 2
4 5 6 7 8 4 5 6 7 8 4 5 6 7 8
2 1 6 2 3 2 1 6 2 3 2 1 6 2 3
5 2 1 3 2 5 2 1 3 2 5 2 1 3 2
1 2 6 1 3 1 2 6 1 3 1 2 6 1 3

Se d o asemenea matrice ptratic. Afiai suma elementelor coninute n fiecare
regiune.

Date de intrare
Se d un numr natural n i n
2
numere naturale ntregi, reprezentnd elementele matri-
cei.

Date de ieire
Se vor afia cele 6 sume, cte una pentru fiecare regiune.
9. Tablouri bidimensionale 111

Restricii i precizri
2 n 10;
afiai n dreptul fiecrei valori un text explicativ.

Exemple
Intrare
n=4
1 2 1 3 2
4 5 6 7 8
2 1 6 2 3
5 4 1 3 2
1 2 6 1 3
Ieire
18 diagonala principala
20 diagonala secundara
36 deasupra diagonalei principale
27 sub diagonala principala
30 deasupra diagonalei secundare
31 sub diagonala secundara


9.3. Soluiile problemelor propuse

9.3.1. Valori nule n matrice
Algoritmul nu prezint nici o dificultate n a rezolva problema.Vom parcurge matricea
mai nti pe linii i n cadrul fiecrei linii pe coloane (vom utiliza dou instruciuni
for imbricate (una dup i i cealalt dup j) i de fiecare dat cnd vom gsi un ele-
ment nul vom afia poziiile i i j n care se afl elementul.

9.3.2. Interschimbare
Nici aceast problem nu este o problem grea. Parcurgnd liniile lin
1
i lin
2
simultan,
vom interschimba elementele (lin
1
, i) i (lin
2
, i).
Cum s-ar rezolva i mai ingenios aceast problem, interschimbnd direct cele do-
u linii, fr a le mai parcurge?

9.3.3. Ptrat magic
Dup citirea matricei vom calcula pe linia 0 suma pentru fiecare coloan, iar pe
coloana 0 suma pentru fiecare linie. Pe poziia (0, 0) vom reine suma de pe diagonala
principal, iar pe poziia (0, n + 1) vom reine suma de pe diagonala secundar. Apoi
vom verifica dac toate aceste valori calculate sunt egale ntre ele.
Dac am vrea s grbim execuia, am putea proceda n felul urmtor. Imediat du-
p ce avem dou sume, am putea s le comparm i s continum calculele doar n si-
tuaia n care acestea sunt egale. Apoi, dup calcularea celei de-a treia sume s efectu-
m din nou compararea ei cu una din cele dou sume calculate deja, i aa mai de-
parte. Astfel, nu vom lucra degeaba dup ce deja am aflat c ptratul nu este magic.

112 9. Tablouri bidimensionale

9.3.4. Sume speciale
Vom caracteriza elementele aparinnd unui anumit grup prin relaia dintre indicii aso-
ciai unui element al matricei. Vom nota indicele de linie cu i, iar cel de coloan cu j.
Pe diagonala principal elementele au indicii egali, adic i = j.
Pe diagonala secundar avem relaia ntre indici: i + j = n + 1.
Elementele de sub diagonala principal au indicele de linie mai mic dect indicele
de coloan: i < j.
Elementele de sub diagonala secundar sunt cele caracterizate de i + j > n + 1.
Elementele de deasupra diagonalei principale au indicele de linie mai mare dect
indicele de coloan: i > j.
Elementele de deasupra diagonalei secundare sunt cele caracterizate de i + j < n + 1.

Variaia indicilor n cadrul grupului este urmtoarea (n reprezint dimensiunea ma-
tricei):
pe diagonala principal: i = 1..n; j = i pentru fiecare i.
pe diagonala secundar: i = 1..n; j = n + 1 i.
sub diagonala principal: i = 2..n; j = 1..i 1 pentru fiecare i.
sub diagonala secundar: i = 2..n; j = n i + 2..n pentru fiecare i.
deasupra diagonalei principale: i = 1..n 1; j = i + 1..n pentru fiecare i.
deasupra diagonalei secundare: i = 1..n 1; j = 1..n i, pentru fiecare i.

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