Sunteți pe pagina 1din 3

TABLOURI

TABLOURI BIDIMENSIONALE (MATRICE)


NOIUNEA DE MATRICE
O matrice este un tabel cu elemente de acelai tip, dispuse pe linii i coloane, o matrice este de fapt un
tablou bidimensional. Fiecare element al matricei se afl pe o anumit linie i pe o anumit coloan. Poziia unui
element pe linie se mai numete i indice de linie, iar poziia elementului pe coloan se mai numete i indice de
coloan.
Dac notm variabila matrice cu a, atunci elementul de pe linia i i coloana j n matricea a se noteaz
a[i,j].
Exemplu: Fie o matrice a cu 3 linii i 4 coloane, avnd elemente numere ntregi.
1

22

10

12

99

a[2,3]=10 (elementul de pe linia 2 i coloana 3 este 10).

DECLARAREA UNEI MATRICE


Declaraia unei variabile-matrice eset asemntoare cu cea a unui vector.
Sintaxa: [var] <nume>: array [<tip1>, <tip2>] of <tip_e>;
cuvntul cheie array arat c este vorba despre un tablou;
<nume> - identificatorul (numele) variabilei matrice;
<tip1>, <tip2> - tipul de date al indicilor de linie, respectiv de coloan; tipul de date pentru indici
trebuie s fie un tip ordinal, cu un numr finit de valori (enumerat, subdomeniu, caracter, byte etc.) i
poate fi anonim. n definirea acestuia pot fi folosite constante simbolice, dar nu pot fi folosite variabile;
este de obicei un tip subdomeniu (interval);
<tip_e> - tipul de date n care se ncadreaz elementele matricei; tipul elementelor poate fi orice tip
predefinit sau definit de utilizator.
Orice matrice se caracterizeaz printr-un numr maxim de elemente, reprezentnd cel mai mare numr
de elemente care s-ar putea memora n matricea respectiv (o valoare constant). Din tipurile de date pentru
indicii de linie i de coloan trebuie s rezulte att numrul maxim de elemente (produsul dintre numrul maxim
de linii i numrul maxim de coloane), ct i modul n care se numeroteaz poziiile.
Exemplu:
var a: array[1. .20, 1..25] of integer;
numele variabilei-matrice este a;
tipurile de date ale indicilor de linie i coloan sunt intervalele 1..20, respectiv 1..25; din acesta rezult
dou lucruri: faptul c matricea a are un numr maxim de 500 de elemente, liniile sunt numerotate
succesiv 1, 2, . . . , 19, 20, iar coloanele 1, 2, ..., 25; prin urmare, elementele matricei a sunt a[l,1], a[1,2],
..., a[1,25],..., a[20,25];
tipul elementelor matricei este integer, adic elementele sunt numere ntregi.
vom spune c variabila matrice a aparine tipului de date "array [1. . 20, 1..25] of integer", pe care-l
putem numi pe scurt "tipul array"; acesta este anonim (adic nu are un nume) i definit de ctre utilizator
(altfel spus nu este predefinit), dar n componena lui apar trei tipuri de date predefinite: tipul integer i
subdomeniile 1..20, 1..25.
Ca orice tip anonim, un tip de date array poate fi definit, folosind cuvntul cheie TYPE.
Exemplu:
type matrice=array[1..20, 1..25] of integer;
var a:matrice;
Am denumit tipul de date array [1. .20, 1..25] of integer (adic tipul "matrice de maxim 500 elemente
numere ntregi"), dndu-i numele matrice. n continuare, declarm matrice a ca pe o variabil de tipul matrice.

PARCURGEREA, CITIREA I AFIAREA UNEI MATRICE


Numerele reale (efective) de elemente
n urma declarrii unei matrice, compilatorul rezerv pentru elementele sale o zon fix de memorie,
care s poat memora numrul maxim de elemente (precizat la declarare).
Dar n general, ntr-un program n care am declarat o matrice nu vom folosi toate elementele acesteia.
Pentru ca programul s fie ct mai general i eficient, ar trebui ca la fiecare execuie a sa s putem memora n
matrice alte elemente. n acest scop, putem proceda astfel:
Definim aa-numitele numre reale (efective) de elemente, reprezentnd numrul real de linii (notat de
obicei cu n), respectiv numrul real de coloane (notat de obicei cu m).
Numerele reale n i m precum i elementele matricei se vor citi de la tastatur n timpul execuiei
programului.
Exemplu: Considerm matricea declarat astfel: a:array[l. .20, 1..25] of integer;
n urma declarrii, se rezerv memorie pentru 500 de elemente, n spe pentru elementele a[l,1],
a[1,2], ..., a[1,25],..., a[20,25].
Dac notm cu n numrul real de linii i cu m numrul real de coloane ale matricei, atunci elementele
efectiv utilizate, vor fi a[1,1], a[1,2],..., a[1,m],..., a[n, m].
n general, prin a[i,j] se nelege elementul de pe linia i i coloana j din matrice, unde i parcurge pe rnd
valorile 1, 2,..., n, iar j parcurge pe rnd valorile 1, 2,..., m.
Elementele unei matrice se comport ca nite variabile simple, deci pot fi citite, afiate i folosite n
expresii i atribuiri.
a11 a12 a1m
a 21 a 22 a 2 m
n cele ce urmeaz, considerm matricea a , unde n este numrul real de linii,
a n1

a n2

a nm

iar m numrul real de coloane.


Prin parcurgerea matricei se nelege "vizitarea" elementelor pe rnd i prelucrarea acestora. Pentru a
parcurge elementele matricei a putem proiecta un ciclu, astfel:
Parcurgem ntr-un ciclu liniile matricei i=1, 2,..., n;
Pentru fiecare linie i, parcurgem ntr-un alt ciclu coloanele acesteia j=1, 2,..., m.
Pentru fiecare valoare a lui i i j, vizitm elementul a[i,j], de pe linia i i coloana j.
i:=l, j=1 prelucreaz a [1,1]
j:=2 prelucreaz a[1,2]
................................
j=m prelucreaz a [1,m]
i:=2, j=1 prelucreaz a [2,1]
j:=2 prelucreaz a[2,2]
................................
j=m prelucreaz a [2,m]
.............................................
i:=n, j=1 prelucreaz a [n,1]
j:=2 prelucreaz a[n,2]
................................
j=m prelucreaz a [n,m]

pentru i de la 1 la n execut
pentru j de la 1 la m execut
<prelucreaz a[i,j]>

Citirea unei matrice cu n linii i m coloane


write (' n= );
readln (n);
write (' m= );
readln (m);
for i:=l to n do
for j:=1 to m do
begin
write ('a[,i, , ,j, ' ] = ) ;
readln (a[i,j]);
end;

Nu putem citi "dintr-o dat" toate elementele


matricei printr-o instruciune {read(a);} sau
{readln(a);}, pentru c a este o variabil indexat
(compus) care nglobeaz mai multe valori.
Vom citi mai nti numerele reale de linii i coloane, n
respectiv m. Parcurgem n dou cicluri liniile i=l,
2, . . . ,n i coloanele j=1, 2, ..., m; pentru fiecare linie i
i coloan j, citim elementul a[i, j].

n secvena de program de mai sus, nainte de citirea elementului a[i,j] (cu readln), apare linia
{ write ('a[,i, , ,j, ' ] = ) ; }, care afieaz un mesaj, cu scopul de a ne spune ce element urmeaz s citim.
Desigur c o astfel de comand nu este obligatorie, dar este recomandabil. De exemplu, nainte de a atepta
introducerea unei valori pentru v[2,1], calculatorul va afia: v[2,1] = _ (_ este cursorul n ateptare).
Afiarea unei matrice cu n linii i m coloane
Nu putem afia "dintr-o dat" toate elementele matricei printr-o instruciune {writeln(a);}. Folosim tot
ideea algoritmului de parcurgere descris anterior. Pentru a afia fiecare linie a matricei pe un rnd de ecran vom
proceda astfel: parcurgem ntr-un ciclu liniile i=1, 2, ..., n i pentru fiecare linie i:
afim elementele liniei i pe un rnd al ecranului;
mutm cursorul la nceputul rndului urmtor.
pentru i de la 1 la n execut
nceput
<afieaz linia i pe un rnd>;
<mut cursorul la nceputul rndului urmtor>
sfrit;
Iar pentru a afia elementele liniei i pe un rnd, vom proiecta un alt ciclu, n care parcurgem coloanele
j=1, 2,..., m ale liniei i i la fiecare pas afim elementul a[i, j]. Astfel secvena de program pentru afiarea unei
matrice este:
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:4);
writeln;
end;

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