Tablouri bidimensionale (matrice)
Definitie: Un tablou bidimensional (o matrice ) reprezinta o colectie de elemente de
acelasi tip, dispuse de linii si coloane.
Pozitia este data printr-o printr-o suita de numere pozitive (indecsi), care reprezinta cele doua dimensiuni (linie si coloana). Tabloul are un numar bine determinat determin at de elemente si se identifica printr-un singur nume. Valorile alorile atribuite elementelor tabloului trebuie sa fie de acelasi tip.
Descriere generala
Sintaa de declarare a unei matrice este: tip nume[m][n], unde: ! tip " tipul de data folosit# poate fi unul din tipurile de baza (int, float, c$ar, %) sau un tip definit de utilizator (articole, obiecte) ! nume " numele prin care va fi referita matricea ! m " numarul de linii din matrice ! n- numarul de coloane din matrice
&atricele pot fi: • •
Dreptunghiulare (in care numarul de coloane difera fata de numarul de linii)# Patratice (in care numarul de coloane este egal cu numarul de linii).
Matrice patratica
Se citeste un tablou cu n linii si n coloane, numere intregi. Un astfel de tablou, in care numarul liniilor este egal cu numarul coloanelor, poarta denumirea de matrice patratica. ' matrice patratica are doua diagonale: principala si secundara. Pentru un tablou patratic , numim diagonala principala, elementele aflate pe linia* care uneste ++ cu +n+n. Pentru un tablou patratic , numim diagonala secundara, elementele aflate pe linia* care uneste +n+ cu ++n /0 /0 /////0 000/00
Zone speciale in matrice patratice Diagonala principala si secundara
Diagonala principală
1iagonala principal2 este format2 din elementele care 3ndeplinesc rela ția i = j " num2rul liniei este egal cu num2rul coloanei pe care se afl2. Diagonala secundară
1iagonala secundar2 con4ine elementele an, a n- , a/ n-,...,an caracterizate de
rela4ia i+j = n+1. Zona de deasupra diagonalei principale
5lementele de deasupra diagonalei principale sunt a, a/, a0,...,an, a/, a0, a6,...,an, ...., an- n-, an- n. 7ela4ia dintre coordonate comun2 tuturor elementelor din aceast2 zon2 este i < j . Zona de sub diagonala principală
5lementele a, a/, a/,...,a0, a0, a0/, .....,an, an, an n- se afl2 sub diagonala principal2 8i au 3ntre coordonate rela4ia i j. 9n practic2 prelucrarea elementelor se poate face eclusiv pe diagonale respectiv pe zonele identificate mai sus(e:ordonarea diagonalelor respectiv verificarea simetriei sau a triung$iularit24ii) sau se poate opta pentruo parcurgere a tuturor elementelor matricei 8i prelucrarea diferen4iat2 a elementelor 3n func4ie de rela4ia dintre coordonate(e: completarea elementelor cu anumite valori, calculul simultan al mai multor rezultate ob4inute pentru fiecare zon2 3n parte). Modalităţi de prelucrare a elementelor în matrice pătratică de dimensiune n Diagonala principala!
for (i#i;n#i<<) ;prelucreaz2 a+i+i= Diagonala secundara!
for (i#i;n#i<<) ;prelucreaz2 a+i+n-i<= Deasupra diagonalei principale!
for (i#i;n-#i<<) for(>i<#>;n#><<) ;prelucreaz2 a+i+>= "ub diagonala principala!
for (i#i;n#i<<) for(>#>;i-#><<) ;prelucreaz2 a+i+>=
Prelucrarea intr#o singura parcurgere a tuturor $onelor!
for (i#i;n#i<<) for(>#>;n#><<) if (i>)!;prelucreaz2 a+i,> " diag. princ.= else if (i<>n<) !;prelucreaz2 a+i,> " diag. sec.= else if (i=>) !;prelucreaz2 a+i,> " deasupra diag. princ.= else !;prelucreaz2 a+i,> " sub diag. princ.= if (i<>;n<) !;prelucreaz2 a+i,> " deasupra diag. sec.= if (i<>=n<) !;prelucreaz2 a+i,> " sub diag. sec.
?ona @ordica principale si secundare# i;> si i<>;n<
: deasupra diagonalei deasupra diagonalei
?ona Sudica : sub diagonala principala si sub diagonala secundara# i=> si i<>=n< ?ona Vestica : sub diagonala princiapala si deasupra diagonalei secundare# i=> si i<>;n< ?ona 5stica : deasupra diagonalei principale si sub diagonala secundara# i;> si i<>=n< Declararea unei variabile de tip matrice tipAtablou numeAtablou +dimensiuneAtablou +dimensiuneAtablou#
5emplu: 3ntreg a+B+B# a
/
0
6
6
/
C
6
/
B
0
C
/
D
6
D
/
0
0
E
C
/
E
6
0
D
0
D
Pozi4ie 1eoarece elementele unui matrice sunt memorate 3n ordine pentru a ne referi la un element al matricii putem specifica numele matricii din care face parte 8i pozi4ia sa 3n matrice, prin num2r liniei 8i a coloanei sale 5emplu: Primul element este a++, al treilea element este a++/. Pseudocodul pentru declararea unei matrici 1."ectiunea T%P&
TFP5 matricearraG+..n,..nof tip de date# Var varmatrice:matrice# H,>,n,m:integer# &'!TFP5 matricearraG+..B,..6of integer# Var :matrice# H,>,m,n:integer# ."ectiunea *
V7 varmatricearraG+..n,..nof tip de date# &':var :arraG+..B,..0of real# H,>,m,n:integer#
Citirea unei matrici
Pentru a citi o matrice 3nainte de toate, trebuie s2 citim dimensiunile matricii, dimensiunile 3n general se noteaz2 cu n 8i m, 8i reprezint2 num2rul de linii 8i de coloane din matrice. Iitirea elementelor unui tablou nu este posibila decat prin citirea fiecarui element. 1e aceea, la fel ca si in cazul vectorilor, operatia de citire a matricelor impune folosirea a doua secvente ciclice suprapuse. cestea corespund indicelor liniei (i), respectiv coloanei (>). 1e multe ori nu 8tim cJte linii 8i cJte coloane va trebui s2 aib2 tabloul. 9n acest caz , tabloul se declar2 cu un num2r maim de linii 8i un num2r maim de coloane, 3n a8a fel 3ncJt acesta s2 corespund2 oric2rui set de date de intrare. 5vident , 3ntr-un astfel de caz eist2 o risip2 de memorie intern2.
Iite8te n,m# 5lementele unei matrici se citesc pe rJnd folosind dou2 structuri pentru imbricate(una 3n cealalt2). Pentru i la n eecut2 Pentru >, m eecut2 Iite8te a+i+># SfJr8itApentru# SfJr8itApentru#
Afiarea unei matrici Pentru a afi8a elementele unei matrici se parcurge matricea 3n structuri pentru 8i se afi8eaz2 fiecare element.
Pentru i la n eecut2 Pentru > la m eecut2 scrie a+i+># SfJr8itApentru# SfJr8itApentru#
Se citesc de la tastatura elementele reale ale unei matrici cu n linii si m coloane. Sa se afiseze matricea. Problema !
var a:arraG+..BB,..BB of real# n,m,i,>:bGte# begin Kcitire datele de intrare: numarul de linii, numarul de coloane si elementele matriciiL Mrite(Nnumarul de liniiO)#readln(n)# Mrite(Nnumarul de coloaneO)#readln(m)# for i: to n do for i: to m do begin Mrite(Na+N,i,O,O,>,OO)# readln(a+i,>)# end# Kafisam elementele matriciiL for i: to n do begin Kafisam o linieL for >:to m do Mrite(a+i,>:6:,OO)# MritelnKtrecem la linie noua pentru a da forma de matrice datelor afisateL end# end.
Căutarea unui element într!o matrice" Pasul . Se cite8te matricea
Pasul . Se cite8te elementul c2utat Pasul /. Se parcurge matricea 8i se compar2 elementul c2utat cu toate elementele matricii, dac2 a fost g2sit unei variabile g2sit* 3i atribuim valoare de adev2r, 8i afis2m poz* pozi4ia elementului 3n vector.
Pasul 0. 1ac2 variabila g2sit este fals2 atunci afi82m un mesa>,*nu este 3n matrice .
#ortarea elementelor unei linii dintr!o matrice dupa o anumita regula 1.Ordonarea unui sir - Metoda $bulelor$ %&ubble #ort'
Se citeste un sir de numere intregi si se cere sa se ordoneze elementele acestui sir crescator : Q , 0 , 6 , / , C , (inainte) : , / , 0 , 6 , Q , C
(dupa)
(deea care sta la baza acestei metode este urmatoarea: se parcurge sirul, comparandu-se
elementele consecutive din sir doua cate doua. 1aca acestea nu sant in relatia dorita (RR sau RR) se sc$imba valorile elemntelor. Printr-o parcurgere a sirului si efectuarea comparatiilor obtinem:
Iomparam A[i] ) Se observa ca, dupa o obtinut nu este ordonat deci procedeului descris anterior.
A[i*+] daca da, le sc$imb
parcurgere a vectorului, sirul este necesara reluarea
1aca vectorul contine elemente de>a ordonate se face o singura parcurgere. a efectuarea unei intersc$imbari se marc$eaza aceasta operatie prin valoarea RS5R a unei variabile logice care, inainte de parcurgere va avea valoarea RT7U5R. a sfarsitul algoritmului valoarea acestei variabile va fi RT7U5R , pentru ca nu va mai fi necesara nici o intersc$imbare.
P,-* WU5# T%P&
vector **%+..BB ,/ integer# *
a : vector# n , i , au : integer# ordonat : boolean#
0&-2
Xrite (Ynr de componente Y)#readln(n)# /, i : T, n D, 0&-2
Mrite (Ya+Y, i ,Y Y)# readln( a+i )# &2D# /, i : T, n D,
Mrite (a+ i ,Y Y)# Mriteln# &P&*T
ordonat : true# /, i : T, n- D, / a+i = a+i< T3&2 0&-2
au : a+i# a+i : a+i<# a+i< : au# ordonat : false# &2D# 42T5 ordonat true# /, i : T, n D,
Mrite (a+ i , Y Y)#
Mriteln# &2D.
2. Metoda de sortare prin (#-./(-
Ionsta in inserarea fiecarui element al vectorului la locul corespunzator in raport cu elementele sortate anterior. Principiul de baza al algoritmului de sortare prin insertie este urmatorul: Se presupune ca subsecventa a+, a+, . , a+i- este sortata# Se cauta in aceasta subsecventa locul > al elementului a+i si se insereaza a+i pe pozitia >. Sa vedem cum se determina pozitia > (finala in vectorul sortat): - > daca a+i ; a+ - ; > ; i si sunt satisfacute relatiile a+>- ; a+i ; a+> - > i daca a+i = a+i- 1eterminarea lui > se face prin cautare secventiala sau prin cautare binara. Putem observa ca aceasta te$nica de sortare se bazeaza pe metoda R >ucatorului de bridgeR.
(mplementare0 Ionsideram cazul cand pozitia > este determinata prin cautare secvetiala
(de la dreapta la stanga) simultan cu deplasarea elementelor mai mari ca a+i cu o pozitie la dreapta. ceasta deplasare se realizeaza prin intersc$imbari astfel incat valoarea a+i realizeaza o deplasare la stanga pana a>unge la locul ei final. P,-* "ort6ns7
V7 a:arraG+..6B of integer# n, i, >, Z, au: integer# 0&-2
Xrite(Ycate elem are vectorul: Y)# readln(n)#
Xriteln(YHntroduceti elem:Y)# '7 i : T' n 1' W5[H@ Xrite(Ya+Y, i ,Y Y)# 7eadln(a+i)#
5@1#
/, i != T, n D, begin j != i # 17 au' != a8i97 :35& (j=1) *2D (a8j9au') D, j != j # 17 /, ; != i D,:2T, j+1 D, a8;9 != a8;#197 a8j+19 != au'7
end7
'7 i : T' n 1' Mrite(a+i,Y Y)# &2D. 3. Metoda de sortare prin #-1-C/(-
Ionsta in determinarea elementului minim si aducerea lui pe prima pozitie# apoi dintre elementele ramase in vector, se determina minimul si va fi adus pe a -a pozitie, s.a.m.d. pana cand toate elementele vor fi asezate in ordine.
(mplementare0 Vectorul se parcurge de la prima pozitie pana la pozitia n-# se compara
fiecare element de la pozitia pana la pozitia n- cu elementele aflate dupa el. 1aca elementele nu sunt in ordinea corecta, se efectueaza intersc$imbarea acestora, astfel incat minimul se determina comparand un element cu toate elementele care ii succed. *lgoritmul "ort6"el7 /, i != 1 T, n#1 D, /, j != i+1 T, n D,
/ a8i9 a8j9 T3&2 begin au' != a8i97 a8i9 != a8j97 a8j9 != au'7
end7
4. Metoda de sortare prin 2MA.A.-
ie vectorul a (a, a, . , an). Pentru fiecare element se numara cate elemente sunt mai mici decat el. @umerele pe care le obtinem se vor memora intr-un vector Z (Z , Z , . , Z n). Pentru a obtine elementele sortate, pe baza elementelor vectorului Z, vom rearan>a elementele vectorului a intr-un vector b (b , b, . , bn), unde b+Z+i< a+i. 5\: @6, a(Q, D, /, E, B) Initial: Z (B, B, B, B, B) Iterativ: Z
(/, , , 0, B)
Z (B, /, D, Q, E)
Procedeul0 Pentru fiecare element incepand de la pozitia , se compara valoarea
acestuia cu valorile aflate in vectorul a, inaintea sa. 1aca elementul curent este mai mic decat un anumit element aflat inaintea sa, atunci se contorizeaza numarul de elemente mai mici pentru elementul care este mai mare, marindu-se cu o unitate acest contor# in caz contrar acesta se modifica pentru numarul curent.
*lgoritmul "ort62umber7 /, i != 1 T, n D, ;8i9 != 7
or i : T' n 1' '7 > : To i- 1' H a+i ; a+> T]5@ Z+> : Z+>< &5"& ;8i9 != ;8i9+17 /, i !=1 T, n D, b8;8i9+19 != a8i97 /, i != 1 T, n D, rite (b8i9>? ?)7
Se citesc de la tastatura elementele reale ale unei matrice cu n linii si m coloane. Sa se afiseze transpusa matricii.
Problema!
var a:arraG+..BB,..BBof real# n,m,i,>:bGte# begin Kcitirea datelor de intrareL Mrite(Nnumarul de liniiO)#readln(n)# Mrite(Nnumarul de coloaneO)#readln(m)# for i: to n do for >: to m do begin Mrite(Na+N,i,OO,>,OO)# readln(a+i,>)# end# Kafisarea transpuseiL
for >: to m begin for i: to n do Mrite(a+i,>:6:,OO)# Mriteln# end# end.
Problema: Se da o matrice patratica. Sa se realizeze un program care sa afiseze
suma elementelor negative din matrice. program matrice# var :arraG+..BB,..BB of integer# n,i,>,s:integer# begin Mrite(YnY)# readln(n)# for i: to n do for >: to n do begin Mrite(Y+Y,i,Y,Y,>,YY)# readln(+i,>)# end# s:B# for i: to n do for >: to n do if +i,>;B t$en s:s<+i,># Mriteln(YSuma elementelor negative din matrice este: Y,s)# end.
Poiect tablouri bidimensionale in@ormatica
Lita Denisa-Elena Georgiana
Paiu Andrei alu!a !lasa a "-a #