Sunteți pe pagina 1din 16

CURS EXCELENA - 13 februarie 2009

MATRICI (TABLOURI BIDIMENSIONALE MATRICE - un tabel de elemente de acelasi tip, dispuse pe linii si coloane. Pozitia unui element este dat de indicele de linie si indicele de coloana. fiecare element are doi indici:-primul-indice de linie-al doilea-indice de coloan E!" a#i$%& reprezint elementul de pe linia i si coloana j De'(arare" Sintaxa: var <mat>: array <tip!>,<tip"># of <tip$de$baza>% unde <tip!>- tipul indicelui de linie, <tip"> -tipul indicelui de coloana <tip_de_baz> este tipul elementelor tabloului E!: &'( a : '((') !..*+,!..,+# -. inte/er% i,j,m,n:inte/er% )ar'ur*erea0prelucrarea unei matrici1: fie matricea '0n,m1 - n linii, m coloane .or i:2! to n do .or j:2! to m do <prelucreaza a i,j#>

Ci1ire -a1ri'e 'u . (i.ii 6i - ',(,a.e 6riteln07n,m 2 71%readln0n,m1% .or i:2! to n do .or j:2! to m do 8e/in 9rite07 a 7,i,7 , 7,j,7 #2 71%readln0a i,j#1% :nd%

S'riere -a1ri'e 'u . (i.ii 6i - ',(,a.e .or i:2! to n do be/in .or j:2! to m do;afisam linia i< 6rite0a i,j#:31% 6riteln% ; trecem la linie nou < :nd%

+,r-a *e.era(a a unei matrice cu . linii si m coloane" a!! a"! a*! ... an! Ca/uri 0ar1i'u(are 2e -a1ri'i !1 4ac m 2 !, avem un tablou de dimensiuni n x ! care se numeste tablou coloan si este de forma: A 20a!1, a"1, ., an11 "1 4ac n 2 !, tabloul de dimensiune ! x m se numeste tablou linie si este de forma: A 2 0a1!, a1", ., a1m1 *1 4ac m 2 n, avem un tablou de dimensiune nx n, numit 1ab(,u ptratic. E!e-0(u .ie un tablou ptratic de dimensiune 5 0m 2 n 2 51. Dia*,.a(a 0ri.'i0a(a -D) a11 a!" a!* a!3 a!, a!5 a"! a22 a"* a"3 a", a"5 a*! a*" a33 a*3 a*, a*5 a3! a3" a3* a33 a3, a35 a,! a," a,* a,3 a44 a,5 a5! a5" a5* a53 a5, a55
!

a!" a"" a*" ... an"

a!* a"* a** ... an*

a!3 a"3 a*3 ... an3

... ... ... ... ...

a!m a"m a*m ... anm

- :lementele marcate sunt elementele 2e 0e dia/onala principala04P1: a i,j#, cu proprietatea i 7 % for i:2! to n do for j:2! to n do if i2j t=en <prelucreaza a i,j#> 6au" (accesand doar elementele de pe DP) for i:=1 to n do <prelucreaza a i!i"> - :lementele 2e 2ea6u0ra dia/onalei principala04P1: a i,j#, cu i 8 j for i:2! to n do for j:2! to n do if i<j t=en <prelucreaza a i,j#> 6au" (accesand doar elementele de deasupra DP) for i:=1 to n#1 do $or %:=i&1 to n do <prelucreaza a i!%"> - :lementele 2e 6ub dia/onala principala04P1: a i,j#, cu i 9 j for i:2! to n do for j:2! to n do if i >j t=en <prelucreaza a i,j#> 6au" (accesand doar elementele de sub DP) for i:=' to n do $or %:=1 to i#1 do <prelucreaza a i!%"> Dia*,.a(a 6e'u.2ara -DS a!! a!" a!* a!3 a!, a15 a"! a"" a"* a"3 a24 a"5 a*! a*" a** a33 a*, a*5 a3! a3" a33 a33 a3, a35 a,! a42 a,* a,3 a,, a,5 a51 a5" a5* a53 a5, a55 - :lementele marcate sunt elementele 2e 0e dia/onala secundara04S1: a i,j#, cu proprietatea i: %7.:1 for i:2! to n do for j:2! to n do if i>j2n>! t=en <prelucreaza a i,j#> 6au" (accesand doar elementele de pe D() for i:=1 to n do <prelucreaza a i!n&1#i"> - :lementele 2e 2ea6u0ra dia/onalei secundare04S1: a i,j#, cu i: %8.:1 for i:2! to n do for j:2! to n do if i>j<n>! t=en <prelucreaza a i,j#> 6au" (accesand doar elementele de deasupra D() for i:=1 to n#1 do $or %:=1 to n#i do <prelucreaza a i!%"> - :lementele 2e 6ub dia/onala secundare04S1: a i,j#, cu i: %9.:1$ unde n este dimensiunea matricii for i:2! to n do for j:2! to n do if i>j>n>! t=en <prelucreaza a i,j#> 6au" (accesand doar elementele de sub D() $or i:=' to n do $or %:=n#i&' to n do <prelucreaza a i!%"> Re1i.e1i :lementele ?n cazul crora indicele de linie coincide cu indicele de coloan 0a!!, a"", ..., ann1 formeaz dia)onala principal a tabloului. Paralelele la dia/onala principal a tabloului vor atin/e acele elemente ?n cazul c rora i 2 % > *, unde -n > ! < * < n# !. Pentru fiecare valoare a lui *, variind %! obinem o paralel la dia)onala principal. :lementele de deasupra dia)onalei principale satisfac proprietatea i < %, iar cele care se situeaz sub dia)onala principal au proprietatea c indicii lor satisfac relaia i > %.
"

@n mod similar, sirul de elemente a!,n, a",n-!, ..., an!! formeaz dia)onala secundar a tabloului. @n cazul acestora, indicii elementelor respect relaia i > % 2 n > !. @n cazul elementelor aflate deasupra dia)onalei secundare indicii au proprietatea i > % < n > !, iar cele care se afl sub dia)onala secundara au indici cu proprietatea i > % > n > !. -bservm c pentru a parcur/e doar elementele de sub dia/onala principal , indicii de linie si de coloan variaz astfel ?ncAt s acopere un triun/=i dreptun/=ic din tablou. 'cest triun/=i are ipotenuza sub dia/onala principal si cele dou catete sunt coloana ! si linia n. @n concluzie, la acest triun/=i de pe linia i vor participa elementele de pe coloanele !, ", ..., i#!.0cu i2",....n1 A(*,ri1-i )er-ua1re (i.ia ! 'u (i.ia < "
-citire matrice -citire x,y permutare : f,r %"71 1, - 2, be*i. au!"7a#!$%&;a#!$%&"7a#<$%&;a#<$%&"7au!; e.2;

S,r1are 're6'a1,are (i.ia ! 2i. -a1ri'e "


-citire matrice -citire x sortare crescatoare : repeat sortat:2true% for j:2! to m-! do if a x,j#>a x,j>!# t=en be/in ;permut coloanele j cu j>!< for i:2! to n do be/in au!"7a#i$%&;a#i$%&"7a#i$%:1&;a#i$%:1&"7au!; end% sortat:2false% end% until sortat%

E(i-i.are (i.ia ! 2i. -a1ri'e "


-citire matrice -citire x eliminare : f,r i"7! 1, .-1 2, f,r %"71 1, - 2, a#i$%&"7a#i:1$%&; ."7.-1;

A0(i'a1ie - matrice patratica cu n linii si n coloane se numeste triun)+iulara superior daca toate elementele aflate 6ub 2ia*,.a(a 0ri.'i0a(a sunt nule. Se citeste de la tastatura o matrice patratica a cu n linii si n coloane.(ealizati un pro/ram care verifica dca matricea este triun)+iulara superior, tiparind un mesaj. ;citire matrice a, cu nxn elemente< x:2true% for i:2" to n do for j:2! to i-! do if 0a i,j#< >+1 t=en x:2 false% if x t=en 9rite0BCatricea este triun/=iulara superiorD1 else 9rite0BCatricea nu este triun/=iulara superiorD1 A0(i'a1ie Stiind ca a este o matrice patratica cu n linii si n coloane si elementele numere intre/i, se cere valoarea maxima dintre elementele 2e 6ub 2ia*,.a(a 6e'u.2ara din matrice. max:2-maxint% for i:2" to n do for j:2n-i>" to n do if a i,j#> max t=en max:2a i,j#% 9riteln0max1% A0(i'a1ie Scrieti un pro/ram care construieste in memorie un tablou t cu n linii si n coloane, cu elementele numere naturale, astfel incat pe dia/onala principala sa existe numai elemente e/ale cu !, elementele de pe cele doua Esemidia/onaleFparalele cu dia/onala principala si alaturate dia/onalei principale a fie tot e/ale cu ", elementele de pe urmatoarele Esemidia/onaleF sa fie e/ale cu * etc.&aloarea lui n se citeste de la tastatura.Gabloul se va afisa pe ecran cu formatul su/erat in exemplul urmator. Pentru n23,se va afisa tabloul: ! 2 3 3 " ! 2 3 * " ! 2 3 * " !
*

Re/,(=are Hntr-un ciclu for, cu i de la ! la n, FvizitamF elementele a i,i# de pe dia/onala principala, si pentru fiecare astfel de element realizam urmatoarele operatii: - 'tribuim valoarea ! elementului a i,i# de pe dia/onala% - Iompletam portiunea din linia i aflata in dreapta elementului de pe dia/onala. -bservati ca, FcitindF aceasta portiune de la stan/a la dreapta, elementele sale cresc cu cate o unitate, asa cum este ilustrat in desenul de mai sus. Iu alte cuvinte, intr-un ciclu, contorul > va parcur/e valorile i:1$?$., reprezentand indici coloanelor de pe (i.ia i aflate dupa elemental de pe dia/onala si la fiecare pas elemental a#i$>& va lua valoarea a#i$>-1&:10 cu 1 mai mare decat precedentul element al liniei i1 -'nalo/, completam portiunea din (i.ia i aflata in stan/a elementului de pe dia/onala principala . Pentru aceasta, intr-un ciclu cu > descrescator de la i-1 (a 1 parcur/em coloanele acestei portiuni si la fiecare pas facem atribuirea a i,J#:2a i,J>!#>!. Hn final afisam matricea construita, parcur/and liniile si coloanele de la ! la n in doua cicluri. Pro/ram pr% var a:array !..,+,!..,+# of inte/er% i,j,J,l,n:inte/er% 8e/in (eadln0n1% for i:2! to n do 8e/in ;completaza elementele de pe dia/onala principala, linia i si coloana i< a i,i#:2!% ;completaza elementele liniei i aflate in dreapta celui de pe dia/onala principala< for J:2i>! to n do 8e/in a i,J#:2a i,J-!#>!% a J,i#%2a i,J# ;completeaza si elem. liniei aflat in stan/a K matricea este simetrica< :nd% end% 9riteln% ;afiseaza matricea< for i:2! to n do be/in for j:2! to n do 9rite0a i,j#:*1% 9riteln% end% readln% end. A2u.area -a1ri'e(,r .ie A Li , dou matrice de dimensiune m x n: A 2 0ai%1, ! M i M m, ! M % M n, , 2 0bi%1, ! M i M m, ! M % M n4efinim matricea . 2 0ci%1, ! M i M m, ! M % M n, ale crei elemente sunt date de e/alitNile: ci% 2 ai% > bi% 0O1 oricare ar fi i 2 !, ", ., m, % 2 !, ", ., n. Catricea . se numeLte suma dintre matricele A Li , Li se noteaz . 2 A > ,. @n pro/ram vom realiza adunarea element cu element, conform formulei 0O1. CenNionm c adunarea a dou matrice este comutativ: A > , 2 , > A Li este asociativ: 0A > ,1 > . 2 A > 0, > .1. Catricea element neutru faN de adunare se numeLte matrice nul Li are toate elementele e/ale cu +. Se va nota: +mn- matrice format din elementul +, mai puNin pe dia/onala principal, unde are numai valori e/ale cu !, se numeLte matrice unitate Li se noteaz cu Hn. Ma1ri'ea ,0u6@ -ricare ar fi matricea A, exist o matrice notat cu -A astfel ?ncAt:
3

A > 0-A1 2 0-A1 > A 2 +mn I.-u(1irea a 2 -a1ri'e .ie ' o matrice cu n linii si m coloane si 8 o matrice cu m linii si p coloane0!<2n,m,p<2!++1. Sa se calculeze produsul celor doua matrice. Produsul a " matrici se poate efectua doar daca numarul de coloane din prima matrice este e/al cu numarul de linii din a doua matrice. S,(u1ie 'sa cum se stie de la matematica, produsul 'O8 va fi o matrice I cu n linii si p coloane, definita astfel : I i,j#2P' i,J#O8 J,j#, oricare i Q ;!,",R,n<, j Q;!,",R,p< si J2!,m Srmatoarea secventa de pro/ram calculeaza elementele matrice I: .or i:2! to n do .or j:2! to p do .or J:2! to m do I i,j# 2I i,j#>' i,J#O8 J,j#% -bservati ca pentru a calcula produsul 'O8 au fost necesare nOmOp inmultiri elementare. Ne'e6i1a1ea f,(,6irii 2e -a1ri'i :xista numeroase exemple in care datele problemelor se structureaza in mod natural sub forma unor matrici: E!e-0(u 1" 4istantele directe intre mai multe orase. .ie cele T orase. 'cestea vor fi codificate cu numerele de la ! la T. Pentru memorarea distantelor se foloseste o matrice 4 cu T linii si T coloane ale carei elemente au urmatoarea semnificatie : 4 H,U#2distanta drumului direct intre H si U, sau V, daca nu exista drum direct intre / si 0 -bservam ca 4 H,H#2+ oricare !<2H<2T si 4 H,U#24 U,H# pentru oricare orase H , U. E!e-0(u 2" Ionfi/uratia curenta a unei table de sa=. Se foloseste o matrice cu W linii si W coloane de elemente numere naturale. - pozitie libera se codifica cu valoarea 0, o pozitie pe care se afla un pion cu valoarea 1, o pozitie pe care se afla un cal cu valoarea 2 , pentru nebun valoarea 3, pentru tura valoarea 3, pentru dama valoarea 4$ iar pentru re/e valoarea 5. E!e-0(u 3" 4atele privind o retea de drumuri intre mai multe orase . Presupunem ca intre T orase se afla C drumuri directe cu anumite distante numere naturale. Se poate folosi o matrice 8 cu * linii si C coloane ale carei elemente au urmatoarea semnificatie: pentru orice indice U avem 8 !,j# si 8 ",U# reprezinta orasele de capat al unui drum iar 8 *,U# reprezinta distanta respectivului drum . E!e-0(u 3" 4atele privind un numar de T submultimi ale multimii totale '2;!,"R,C<. Putem memora fiecare submultime prin vectorul sau caracteristic de lun/ime C. &ectorii vor reprezenta liniile unei matrici & de dimensiuni TOC cu elementele din multimea ;+,!<. A(1e 2 .,1iu.i 2i. -a1e-a1i'a$ 2e (a -a1ri'i " 4upa cum am mai spus, o matrice se numeste 0a1ra1i'a daca numarul efectiv de linii T este e/al cu numarul efectiv de coloane C. 'stfel , in primele doua exemple de mai sus, matricile folosite sunt matrici patratice . 4oar in cazul matricilor patratice se poate vorbi despre doua dia/onale principala, respectiv secundara. 4ia/onala principala formata din elementele ;' H,U# X !<2H<2T< si dia/onala secundara formata din elementele ;' H,T-H>!# X !<2H<2T<. Def 1" - matrice patratica se numeste -a1ri'e 6i-e1ri'a$ daca este simetrica in raport cu dia/onala principala, adica: oricare !<2H, U<2T avem relatia: ' H,U#2' U,H#. Catricea distantelor directe din E!e-0(u 1 e61e -a1ri'e 6i-e1ri'a0matricea distantelor1 . :x de matrice simetrica !"*3 "!YW *Y!Z 3WZ! Def 2" Tra.60u6a u.ei -a1ri'e se obtine din matricea initiala sc=imband liniile cu coloanele, astfel linia 1 devine coloana 1, linia 2 devine coloana 2 s.a.m.d. :x : .ie matricea !"*
,

3,5 'tunci transpusa sa este : ! 3 " , * 5 )ar'ur*eri 2e -a1ri'i - )r,b(e-e (variante de parcur/ere a elementelor unei matrici sau numai a unei anumite parti a acestora. 1 Se vor propune probleme ce ilustraza fiecare tip de parcur/ere. AA )ar'ur*erea 0e (i.ii 6i ',(,a.e )r,b(e-a 1" .ie o matrice ' cu T linii si C coloane cu elemente intre/i. Gipariti lista indicilor liniilor pentru care suma elementelor este pozitiva . Re/,(=are" Se parcur/ pe rand liniile matricii cu indicele H. Pentru fiecare valoare a lui H, se parcur/e pe coloane respectiva linie cu indicele U calculandu-se suma elementelor . 4 aca aceata suma este pozitiva se tipareste H. Hn pseudocod : .or H :2! to T do ;s:2+% for U :2! to C do s :2s>' H,U#% if 0s>2+1 t=en 9rite 0H1% < BA )ar'ur*erea 0e ',(,a.e 6i (i.ii )r,b(e-a 2" Hn urma bombardamentelor din !! septembrie "++!, unul din peretii Penta/onului a suferit daune majore . Hma/inea codificata a peretelui avariat se reprezinta sub forma unei matrici cu T linii si C coloane ale carei elemente sunt numere intre/i din multimea ;+,!<.&aloarea ! are semnificatia Bzid intactD , in timp ce semnificatia valorii + este Bzid avariatD. Sumele alocate de 8in [aden pentru refacerea penta/onului vor fi donate celor care ii vor ajuta pe americani sa refaca aceasta cladire prin plasarea, pe verticala a unor blocuri cu diverse inaltimi in zonele care au fost avariate . Pentru o structura data a unui perete din cladirea Penta/onului determinati numarul minim de locuri necesare pentru refacerea cladirii . .isier de intrare: penta/on.in. Pe prima linie valorile T si C despartite de un saptiu , iar pe urmatoarele T linii cate C valori din multimea ;+,!< separate doua cate doua de un spatiu. .isier de iesire: penta/on.out. Pe linii separate secvente de forma \, T( separate printr-un spatiu, unde \ reprezinta inaltimea unui bloc, iar T( numarul de blocuri de inaltime \. :xemplu : penta/on.in , !+ !!!++++!!! !!++++!!!! !+++++++!! !!!!!+!!!! !!!++++!!! 0-.T.H. "++", Ilasa H]1 penta/on.out !Y "! *" ,!

Re/,(=are" Se parcur/e matricea 0e ',(,a.e si in cadrul fiecarei coloane pe linii de sus in jos. Se foloseste un vector auxiliar T( de dimensiune XC care initial are toate valorile +. [a sfarsitul unei portiuni de \ elemente de + /asita pe o aceeasi coloana0adica cand a i,j#2!, ins ca am lasat in urma o secv de + alaturate1 se mareste T( \# cu o unitate. Hn final se tiparesc indicii si valorile din vectorul T( pentru care valoarea finala este strict pozitiva . Hn pseudocod : .or i :2! to n do T( i# :2+%
5

.or U:2! to m do ;parcur/em pe coloane< 8e/in P:2+% S:2+% for H:2! to T do ;parcur/em pe linii, in cadrul aceleiasi coloane< if 0' H,U#2+1 t=en S:2S>! else be/in if0S-P>+1 t=en T( S-P#:2 T( S-P#>!% P:2H% S:2H% ;p2u2indicele ultimei linii ....... < end% if 0S-P>+1 t=en T( S-P#:2T( S-P#>!% ;pentru ultima secventa, daca exista< end% ;afisam din vectorul nr cu m elem0 si nr coloane1indicele si inaltimea, daca este strict pozitiva inaltimea, nr j#< for i:2! to n do if 0T( i#>+ t=en 9rite0i, T( i#1% CA )ar'ur*erea i. 60ira(a )r,b(e-a 3: Sa se parcur/a in spirala elementele unei matrici patratice ' de dimensiune T, pornind din coltul din stan/a sus si mer/and prima data la dreapta. :x : Pentru n2* si matricea ! " * 3 , 5 Y W Z, Se vor afisa in ordinea: ! " * 5 Z W Y 3 , Re/,(=are: Se mer/e pe patrate concentrice, si se parcur/ in aceasta ordine linia J, coloana n-J>!0de la al doilea element1, linia n-J>!0de la urmatorul element<, coloana J 0de la urmatorul element<, unde J ia valori de la ! la n div ">!0avem un patrat de colturi stan/a-sus 0J,J1 si dreapta-jos 0n-J>!,n-J>!1, unde J2!,...., n div ">! 'stfel avem : .or J :2! to n div ">! do 8e/in .or i :2J to n-J>! do 9rite0a J,i#,D B1 %;afisez linia J< .or i :2J>! to n-J>! do 9rite0a i,n-J>!#,D B1 %;afisez coloana n-J>! fara primul, de sus in jos< .or i :2n-J do9nto J do 9rite0a n-J>!,i#,D B1 %;afisez linia n-J>!, fara primul, de la dr la stan/a< .or i :2n-J do9nto J>! do 9rite0a i,J#,D B1 %;afisez coloana J, de jos in sus, fara colt< :nd % DA )ar'ur*erea 6u''e6i=a 0e 2ia*,.a(e(e 2e 1i0 6e'u.2ar )r,b(e-a 3(+ra'1ii : Se considera multimea fractiilor cu numitor si numarator numere naturale asezate in urmatorul tabel infinit. !^! !^" !^*R "^! "^" "^*R *^! *^" *^*R Putem parcur/e tabelul succesiv pe dia/onale in ordinea: !^! !^" "^! *^! "^" !^* !^3 etc Se observa ca dia/onalele pare sunt parcurse in jos iar cele impare in sus. .iind data o pozitie J din acest sir sa se determine elementul de tablou corespunzator, cu alte cuvinte fractia de pe pozitia J, in forma ireductibila. :]:CP[S: \2!* (:_S[G'G !^! 0-limpiada faza locala, Ploiesti "++*1 pro/ram pr"$simularea$matricii% uses crt% var i,j,J,J!,i!,j!:lon/int%
Y

be/in clrscr% 9rite0BJ2D1%readln0J1% ;plec din i2! si j2!< i :2! %j :2! % J! :2! %;J!2nr de elemente parcurse in matricea ima/inara< ;ma deplasez pe paralele la dia/onale secundare< 9=ile J!<>J do be/in ;ne deplasam cu o pozitie la dreapta-:< inc0j1%inc0J!1% ; ne deplasam in jos pe dia/onala secundara0sau paralela la ea1 pana cand nu se mai poate< 9=ile 0j<>!1 and 0J<>J!1 do be/in dec0j1% inc0i1% inc0J!1% end% ; ne deplasam cu o pozitie in jos-S< if J<>J! t=en be/in inc0i1%inc0J!1% end% ; ne deplasam in sus pe dia/onala secundara 0sau paralela1 pana cand nu se mai poate< 9=ile 0i<>!1 and 0J<>J!1 do be/in inc0J!1% dec0i1%inc0j1% end% end% ;se va determina cmmdc-ul intre i! si j!, folosind al/ lui :uclid0prin impartiri repetate< si nu prin scaderi repetate, apoi se va simplifica fractia i!^j! cu cmmdcul determinat si se afiseaza<< Ob6" 'ceasta rezolvare poate fi optimizata, trecand peste mai multe elemente aflate pe o paralela la dia/onala secundara, daca fractia cautata nu este pe acea paralela la dia/onala secundara sau c=iar pe dia/onala secundara, altfel se parcur/e element cu element acea dia/onala. A(1a -e1,2a Se va lua un contor c, iar pentru i>j2c0constant1 vom parcur/e o paralela la dia/onala secundara, odata de sus in jos, odata de jos in sus, dupa cum c2impar, respectiv c2par. 'poi c va creste cu o unitate. )r,b(e-a 4: .iind data o matrice patratica ' de dimensiune T cu elemente numere naturale sa se determine suma maxima a elementelor situate pe o dia/onala paralela cu dia/onala secundara. Re/,(=are: Putem incerca sa parcur/em succesiv fiecare astfel de dia/onala. :xista insa si o rezolvare mai simpla care foloseste un vector auxiliar ] de dimensiune "OT-!, corespunzator numarului acestor dia/onale. Ob6er=a- 'a 0e fie'are a61fe( 2e 2ia*,.a(a 6u-a 2e i.2i'i I:B e61e ',.61a.1a . Hn pseudocod : for J :2! to "OT-! do ] \# :2+ % for H:2! to T do for U:2! to T do ] H>U-!#:2] H>U-!#>' H,U#% ^^ Hn final se calculeaza valoarea maxima din vectorul ] si se afiseaza< EA )ar'ur*erea e(e-e.1e(,r 2i.1r-, 0ar1e a 2ia*,.a(ei 0ri.'i0a(e a u.ei -a1ri'i 0a1ra1i'e Sunt frecvente situatiile in care o matrice patratica este simetrica si poate fi caracterizata doar prin valorile situate deasupra sau dedesubtul dia/onalei principale 4aca ' este o matrice patratica de dimensiune T, atunci secventa de pseudocod ce calculeaza suma elementelor situate sub dia/onala principala0c=iar si pe dia/onala1 este urmatoarea : s :2+ % for H :2! to T do for U:2! to H do S:2S>' H,U#% 9rite0 S1%
W

+A Li.iari/area 2e -a1ri'i :lementele unei matrici cu T linii si C coloane sunt memorate in calculator in ordinea liniilor si in cadrul fiecarei linii, in ordinea coloanelor. Ma1ri'ea 0,a1e fi 0ri=i1a 'a u. =e'1,r 2e 2i-e.6iu.ea NCMA 'stfel, elementul de pe pozitia 0H, U1 poate fi privit ca fiind asezat in vectorul corespunzator pe pozitia 0H!1OC>U. (eciproc, elementul de pe pozitia \ in vectorul corespunzator se va afla in matrice pe pozitia 00\-!1 div C>!, 0\-!1 mod C>!1. )r,b(e-a D" Se considera o matrice ' cu T linii si C coloane cu elemente numere intre/i. (easezati elementele in matrice astfel incat in final acesta sa fie ordonate crescator pe fiecare linie de la stan/a la dreapta si de asemenea ordonate crescator pe fiecare coloana de sus in jos. Re/,(=are" Ma1ri'ea 0,a1e fi 0ri=i1a 2re01 u. =e'1,r . Hn cele ce urmeaza se va folosi un vector auxiliar de lun/imea TOC iar al/oritmul se poate descompune in * pasi: ;Pas !. Se construieste vectorul auxiliar ]< for H :2 to n do for U:2! to m do ] 0i-!1Om>U#:2' H,U#% ;Pas ". Se sorteaza crescator vectorul ]< ;Pas*. Se reconstruieste matricea< for \:2 ! to TOm do ' 0\-!1 div C>!, 0\-!1 mod C>!1# :2] \# % )r,b(e-a E" U-0(ere Se dau numerele naturale . si -A Sa se afiseze o matrice cu . coloane, ?n care mar/inile sunt reprezentate de numarul -$ ?n interiorul acestora fiind mar/ini de 2- etc. ca ?n fi/ura urmatoare si ca ?n exemplu - - - ??A - - - 2- 2- ??A 2- 2- - 2- 3- ??A 3- 2- ?????????????A - 2- 3- ??A 3- 2- - 2- 2- A?? 2- 2- - - - ??A - - E!e-0(u : n25 m2! !! ! ! ! ! !" " " " ! !" * * " ! !" " " " ! !! ! ! ! ! Re61ri'Fii: n <2!++ 0-limpiada locala de informatica Ploiesti, "++31 )r,b(e-a 9" R,b,1i'a Hn interiorul unei platforme dreptun/=iulare cu mOn patrate0celule1, ce contine si zone interzise 0marcate intr-un mod special1, se misca un manipulator conform unui pro/ram care contine instructiuni de deplasare. 'cestea indica directia de deplasare 0T-nord, S-sud, :-est, &-vest, `-stop1. Hnstructiunile care cer parasirea platformei sau deplasarea intr-o zona interzisa se i/nora. .iind date m, n, o pozitie initiala, multimea pozitiilor interzise si un sir de caractere ce reprezinta pro/ramul de deplasare, sa se afle pozitia finala si sa se afiseze pozitiile prin care manipulatorul a trecut de cel putin doua ori. I.2i'a1ii: Ionsideram un tablou bidimensional 0de stocare a informatiilor privind deplasarea1 cu n linii si m coloane pe care il initializam cu zero.Hntroducerea re/iunilor interzise se inc=eie la intalnirea perec=ii 0+,+1. Carcarea acestor zone se face prin initializarea cu valoarea -1 a elementelor,din tablou, corespunzatoare celulelor interzise. 4eplasarea in interiorul platformei determina i.'re-e.1area 'u 1 a elementului tabloului care corespunde pozitiei prin care trece. 4eplasarea continua pana la intalnirea in pro/ramul de deplasare a caracterului B`D. Hn final, se viziteaza tabloul de bord pentru a /asi pozitiile prin care manipulatorul a trecut de cel putin doua ori.
Z

Ob6" Se poate inlocui citirea sirului de caractere din var de tip strin/0daca nu s-a studiat inca capitolul strin/1, intr-o var de tip c=ar vom citi pe rand cate o directie0BnD,DTD, BeD,D:D, BsD,DSD, BvDsauD&D1, pe masura ce citim, vom realiza si mutarea efectiva pana cand s-a ajuns la sfarsitul liniei fisierului standard de intrare09=ile not eoln do1 )r,b(e-a 10" Bi(iar2 - bil este lovit cu tacul pe o mas de biliard dreptun/=iular, de dimensiune m x n ?ntr-o direcNie oblic 0dreapta-sus, dreapta-jos, stAn/a-jos sau stAn/a-sus1. 'tunci cAnd bila se loveLte de o mar/ine a mesei, cu excepNia colNurilor, ea ricoLeaz, noul traseu al ei formAnd un un/=i de Z+ o cu vec=iul traseu. 4ac bila ajun/e ?ntr-un colN, ea iese de pe mas. IunoscAnd dimensiunile mesei, poziNia de plecare a bilei Li direcNia de deplasare iniNial, s se simuleze miLcarea bilei pAn la ieLirea de pe mas, sau pAn cAnd se observ c traseul acesteia intr ?n ciclu. Da1e 2e i.1rare Prima linie a fiLierului de intrare BILIARDAIN conNine numerele m Li n, reprezentAnd dimensiunea mesei. Pe linia a doua se /sesc coordonatele poziNiei iniNiale a bilei, iar pe a treia linie se afl o cifr din mulNimea ;!, ", *, 3<, reprezentAnd direcNia de pornire a bilei: ! corespunde direcNiei dreapta-sus, " direcNiei dreapta-jos, * direcNiei stAn/a-jos, iar 3 direcNiei stAn/a-sus. Da1e 2e ieGire .iLierul de ieLire BILIARDAOUT va conNine traseul bilei sub forma unui tablou bidimensional de dimensiuni corespunztoare mesei. .iecare linie a tabloului se va scrie pe linie nou ?n fiLier. :lementul corespunztor poziNiei iniNiale a bilei se marc=eaz cu !, urmtoarea poziNie atins de bil conform direcNiei de miLcare cu " etc. @n cazul ?n care bila trece a doua oar printr-o poziNie, se pstreaz primul marcaj. PoziNiile nestrbtute vor conNine valoarea +. 4ac bila nu poate ieLi de pe mas, deoarece traseul ei formeaz un ciclu, ?n fiLier se va scrie mesajul D8ila nu poate iesi de pe masa.D, apoi se va scrie ?n fiLier tabloul bidimensional corespunztor miLcrilor bilei. Re61ri'Fii Gi 0re'i/@ri a ! M m! n M !++. E!1 Pt fisierul BILIARD1AIN * * " ! ! BILIARD1AOUT 8ila nu poate iesi de pe masa. 0 2 0 1 0 3 0 4 0 E!2 Pt fisierul BILIARD2AIN , Y 3 " ! BILIARD2.OUT 12 0 0 0 4 0 0 0 11 0 3 0 5 0 0 0 2 0 0 06 0 1 0 9 0 70 0 0 0 0 8 00 Re/,(=are" (ezolvarea problemei necesit simularea anumitor deplasri de-a lun/ul unor linii care sunt paralele cu dia/onalele ptratului bdecupatF de miLcarea bilei din tabloul bidimensional dreptun/=iular, corespunztor mesei Li o stpAnire corect a sc=imbrilor de direcNie atunci cAnd bila se loveLte de mar/inea mesei. &om defini dou Liruri 04x, 4y1 de cAte patru elemente ?n care vom pstra valorile care trebuie adunate coordonatei x, respectiv coordonatei 1, pentru a ne deplasa pe o direcNie dat 2. 4eplasarea ?n cele patru direcNii le putem codifica ?n felul urmtor:

!+

! d pozitia curenta noua pozitie 4x 4y i,j i-!,j>! scade linia creste coloana -! !

" i,j i>!,j>! creste linia creste coloana ! !

* i,j i>!,j-! creste linia scade coloana ! -!

3 i,j i-!,j-! scade linia scade coloana -! -!

[a fiecare pas, coordonatele i i % se modific ?n i : D!#2&, respectiv % : D<#2#. 'cest mod de reprezentare ne va uura /estionarea sc=imbrilor de direcie. -bservm c la ?ntAlnirea unei mar/ini a mesei, corespunz toare unei mar/ini verticale ?n tablou, direcia de deplasare se modific astfel: - direcia *0direcNiei stAn/a-jos1 se transform ?n direcia "0direcNiei dreapta-jos, i invers0" in *1, vezi tabel - direcia ! se transform ?n direcia 3 i 3 ?n !0vezi tabel1 [a ?ntAlnirea unei mar/ini a mesei, corespunztoare unei mar/ini orizontale ?n tablou, direcia ! se sc=imb ?n direcia " i " ?n !, iar direcia 3 se transform ?n * i * ?n 3. &om asi/ura sc=imbarea direciei cu o structur de tip repet, care se va executa pAn cAnd bila iese printr-un col sau intr ?n ciclu. @n subal/oritmul urmtor, ?n variabila 0a6 /enerm valoarea care marc=eaz momentul ?n care bila traverseaz un anumit punct de pe mas. 4ac min/ea ar urma s-i reia traseul i astfel s intre ?n ciclu infinit, variabila boolean i.fi.i1 0rimete valoarea a2e=@ra1A Pentru a avea control asupra momentului ?n care bila iese de pe mas0ajun/e ?ntr-un col1 ne folosim de o funcie boolean(aceasta se poate inlocui cu o var booleana): A. C,.2i1ia 2e i.'Heiere Subalg r!t" Afar: Afar ((i = 1) #au (i = m)) $! ((j = 1) #au (j = n)) #%&r$!t #ubalg r!t" BA (ezolvarea problemei const ?n simularea micrii bilei. 'nterior apelului subal/oritmului0secventa1 micare s-au citit datele de intrare i s-a iniializat tabloul a cu elemente nule. Subalg r!t" icare(m!n!i!j!a!infinit) sau secventa "e pro#ram este: $ "$%"ir& ' "'%"ir& pas 1 ; ',.1,ru( 0e.1ru -ar'area 0,/iFii(,r 61r@b@1u1e < a%i!j& pas se(repet fals infinit fals '&t t!"p min)ea nu a ie2it afar $! (u infinit e)e'ut: pas pas ) 1 ; cre2te contorul de pozi3ii < i i ) $ ; deplasare pe direc3ia "ir, p4n la 5nt4lnirea unei mar)ini < jj)' *a' (i = 0) #au (i * m) atu('!; bila s#a lo6it de o mar)ine orizontal < $ -$ i i)+,$ #%&r$!t *a' *a' (j = 0) #au (j * n) atu('!; bila s#a lo6it de o mar)ine 6ertical < ' -' j j ) +,' #%&r$!t *a' *a' a%i!j&=0 atu('! ; dac aceast pozi3ie nu a fost strbtut 5nc < se repet fals a%i!j& pas ; o marcm <
!!

alt%el ; dac aceast pozi3ie a mai fost marcat 2i este pe o mar)ine < *a' se(repet $! (a%i!j& = +) atu('! infinit ade6rat ; bila a intrat 5n mi2care ciclic deoarece < ; 2i. 0,/iFia -ar'a1@ 'u 1 a a%u.6 I. 0,/iFia -ar'a1@ 'u 2 < alt%el *a' a%i!j& = 1 atu('! se(repet ade6rat alt%el se(repet fals #%&r$!t *a' #%&r$!t *a' #%&r$!t *a' #%&r$!t '&t t!"p #%&r$!t #ubalg r!t" CA 'fiarea tabloului a, corespunztor mesei de biliard, este precedat de verificarea variabilei infinit pentru a stabili dac se va scrie mesajul referitor la micarea bilei: Subalg r!t" Afiare: *a' infinit atu('! #'r!e - in#ea nu poate iesi "e pe masa.#%&r$!t *a' pe(tru i=1!m e)e'ut: pe(tru j=1!n e)e'ut: #'r!e a%i!j& #%&r$!t pe(tru #%&r$!t pe(tru #%&r$!t #ubalg r!t"

Bib(i,*rafie" !. Hnformatica, autor :manuela Ierc=ez, ed Polirom, "++", 8ucuresti ". Hnformatica-fundamentele pro/ramarii, cls a-H]-a, 4ana [ica si Circea Pasoi, editura [cS Soft 8ucuresti *. Hnformatica pentru clasa a H]-a, autori Cateescu 4aniel, Coraru .lorin, editura 4onaris 3. 'l/oritmi si structuri de date. Georie si aplicatii. Probleme de concurs0pentru /rupele de excelenta1, :ditura :duSoft, 8acau, "++5 ,. Site$uri ca =ttp:^^campion.edu.ro, 999./info.ro, =ttp:^^olimpiada.info, etc

!"

TABLOURI BIDIMENSIONALE CURS EXCELENA - 13 februarie 2009

Te-a 0e.1ru a'a6a )@ia.%e. S ne ima/inm o reNea planar, format din noduri situate ?n punctele de coordonate ?ntre/i, fiecare nod fiind unit prin bare paralele cu axele de coordonate de cele 3 noduri vecine. Sn pianjen este plasat iniNial ?n ori/inea sistemului de coordonate. [a fiecare secund, pianjenul se poate deplasa din nodul ?n care se afl ?n unul din nodurile vecine.

ScrieNi un pro/ram care s determine ?n cAte moduri se poate deplasa pianjenul din poziNia iniNial, ?ntr-o poziNie final dat prin coordonatele ei x Li y, ?n timpul cel mai scurt. Pentru x2! Li y2", numrul de moduri determinat va fi *. Pentru x2" Li y2*, numrul de noduri va fi !+. I.2i'aFii" Ium pianjenul se deplaseaz numai de-a lun/ul barelor, el poate s ajun/ 0?n timpul cel mai scurt1 ?n poziNia 0x,y1 numai din poziNia 0x-!,y1 sau din poziNia 0x,y-!1. 4ac notm cu nr0x,y1 numrul de modalitNi prin care pianjenul poate ajun/e ?n timp minim ?n poziNia 0x,y1, atunci deducem c: nr0+,y12nr0x,+12!% nr0x,y12nr0x-!,y1>nr0x,y-!1, pentru orice x,y>+. 2 " )ri.1re 0u.'1e Se d o reNea ptratic de nOn puncte, astfel ?ncAt distanNa dintre dou puncte vecine pe orizontal sau vertical este identic. @n fiecare punct al reNelei se afl un cartonaL pe care este scris o liter. Tu se face distincNie ?ntre literele mari Li mici. a1 @n reNea se formeaz 2re01u.*Hiuri cu laturile paralele cu mar/inile reNelei, dreptun/=iuri care au ca vArfuri punctele care conNin acelaLi caracter ?n colNuri. Sn punct se consider c face parte din dreptun/=iul format respectAnd cerinNele problemei, dac se afl pe mar/inile acestuia, ?n interiorul lui sau ?n colNuri. S se afiLeze coordonatele colNurilor stAn/a jos Li dreapta sus pentru acele dreptun/=iuri care conNin cel mai mare numr de caractere care se repet 0de exemplu, dac exist ?n dreptun/=i 3 caractere 7a7, Y caractere 7c7 Li ! caracter 7d7, atunci numrul caracterelor care se repet este 3>Y2!! caractere1. b1 Snele puncte din reNea nu pot fi incluse ?n dreptun/=iuri, altele fac parte din mai multe dreptun/=iuri. S se precizeze numrul punctelor din reNea care nu fac parte din astfel de 2re01u.*Hiuri. c1 S se determine coordonatele acelor 0@1ra1e care se pot forma, nu neaprat cu laturile paralele cu mar/inile matricii Li care nu conNin neaprat acelaLi caracter ?n colNuri, pentru care suma codurilor 'SIHH ale caracterelor din colNuri s fie maxim. Se va afiLa suma codurilor maxim pentru ptratele /site, precum Li coordonatele acestora. 0nu conteaz ordinea de afiLare a coordonatelor ptratului1 4atele de intrare se citesc de la tastatur ?n ordinea: -n reprezentAnd dimensiunea reNelei 0n!+1
!*

-caracterele reNelei K se va citi de fiecare dat o linie ?ntrea/ de caractere, ?ntre caractere neexistAnd spaNii :xemplu: n23 abcd efgh ijkl mnop (ezultat 0afiLat pe ecran1: a1 nu exist dreptun/=iuri b1 !5 c1 3*W 0*,*1, 0*,31,03,*1,03,31

3A Ai6ber* 4escriem un aisber/ cu ajutorul unei matrici. Punctele marcate cu /ri reprezinta poziNiile aparNinAnd aisber/ului. 4ac asupra lui sufl un vant cald, el incepe s se topeasc de pe mar/ini spre interior. (e/ula topirii este urmatoarea: intr-un interval de timp se topeLte acea porNiune de /=eaN care are in cel puNin dou vecintNi aer 0notate cu !1. 'stfel se produc alte astfel de cAmpuri de aer 0notate cu "1, care se vor topi in al doilea interval de timp L.a.m.d. ScrieNi un pro/ram care pentru un aisber/ dat, returneaz in cAte intervale de timp se topeLte intre/ aisber/ul, respectiv pentru fiecare interval cAte cAmpuri de /=eaN mai are aisber/ul. ! " * * ! " * 3 3 * " ! * * " ! ! .iLierul text Baisber/.inD contine pe prima linie " numere intre/i, separate printr-un spatiu, reprezentand numarul de linii 0!<2T<23+1 si coloane 0!<2C<23+1. Pe fiecare din cele n linii, sunt m cifre e/ale cu + daca este aer sau cu ! daca este /=eata pe acea pozitie. Pe mar/ini este si/ur aer. .isierul Baisber/.outD contine pe prima linie numarul de unitati de timp in care se va topi toata /=eata0G1. Srmatoarele G linii vor contine pe fiecare linie i numarul de unitati de /=eata existente la inceputul intervalului de timp i. 7xemplu: aisber)-in 5Y +++++++ aisber)-out +!!!!!+ 3 ++!!!++ !5 ++!!!++ !" +!!!!!+ W +++++++ "

3A )e61era - pester are n ?ncperi numerotate de la ! la n. @ntre anumite ?ncperi s-au amenajat coridoare de acces, altele au rmas izolate. 'dministratorul complexului turistic cruia i s-a dat ?n /rij pestera ar vrea s stie rspunsul la urmtoarele ?ntrebri: !. Iare sunt ?ncperile ?n care intr cele mai multe coridoared
!3

". Iare sunt ?ncperile unde pestera se ?nfundd *. Iare sunt ?ncperile izolated Da1e 2e i.1rare Prima linie a fisierului de intrare )ESTERAAIN conNine numrul natural nenul n al ?ncperilor pesterii. Pe urmtoarele n linii sunt scrise cAte n valori + si !, valorile elementelor unui tablou bidimensional p. &alorile + si ! au urmtoarea semnificaNie: a 0i% 7 1, dac ?ntre ?ncperea i si ?ncperea j exist cale de acces amenajata 0i% 2 0, ?n caz contrar&alorile scrise pe o aceeasi linie din fisier sunt desprNite prin cAte un spaNiu. Da1e 2e ie6ire Pe prima linie a fisierului de iesire )ESTERAAOUT se vor scrie numerele de ordine ale ?ncperilor ?n care intr sau din care ies un acelasi numr maxim de coridoare. Pe a doua linie se vor afla numerele de ordine ale ?ncperilor ?n care pestera se ?nfund. @n cazul ?n care nu exist astfel de ?ncperi, ?n fisier se va scrie mesajul DTu existaD. ' treia linie a fisierului 0si ultima1 va conNine numerele de ordine ale ?ncperilor izolate. 4ac asemenea ?ncperi nu exist, se va afisa mesajul: DTu exista.D Re61ri'Fii 6i 0re'i/@ri ! / n / !++. E!e-0(e +,ST,RA1.I0 00100 00000 10001 00001 00110 +,ST,RA1.OUT 10 12 + +,ST,RA2.I0 01100 10000 10001 00001 00110 +,ST,RA2.OUT 110 +2 3u e$ista.

4A ),ar1a Se consider =arta universului ca fiind o matrice cu ",+ de linii Li ",+ de coloane. @n fiecare celul se /seLte o aLa numit poart stelar, iar ?n anumite celule se /sesc ec=ipaje ale porNii stelare. [a o deplasare, un ec=ipaj se poate deplasa din locul ?n care se afl ?n oricare alt loc ?n care se /seLte o a doua poart, ?n cazul nostru ?n orice alt poziNie din matrice. Tu se permite situarea simultan a mai mult de un ec=ipaj ?ntr-o celul. [a un moment dat un sin/ur ec=ipaj se poate deplasa de la o poart stelar la alta. 4Andu-se un numr p 0!<p<,+++1 de ec=ipaje, pentru fiecare ec=ipaj fiind precizate poziNia iniNial Li poziNia final, determinaNi numrul minim de deplasri necesare pentru ca toate ec=ipajele s ajun/ din poziNia iniNial ?n cea final.
!,

Da1e(e 2e i.1rare Se citesc din fisierul text 0,ar1aAi. ?n urmtorul format: K pe prima linie numrul natural p reprezentAnd numrul ec=ipaje, K pe urmtoarele p linii cAte 3 numere naturale, primele dou reprezentAnd coordonatele poziNiei iniNiale a unui ec=ipaj 0linie coloan1, urmtoarele dou reprezentAnd coordonatele poziNiei finale a aceluiaLi ec=ipaj 0linie coloan1. Da1e(e 2e ieGire Pe prima linie a fiLierului text 0,ar1aA,u1 se scrie un sin/ur numr reprezentAnd numrul minim de deplasri necesar. E!e-0(u" poarta.in * !"*3 5,*Z *3!" poarta.out 3 Ob6er=aFii: K coordonatele poziNiilor iniNiale Li finale ale ec=ipajelor sunt numere naturale din intervalul !, ",+# K poziNiile iniNiale ale celor p ec=ipaje sunt distincte dou c?te dou% K poziNiile finale ale celor p ec=ipaje sunt distincte dou cAte dou. 0-limpiada UudeNean de Hnformatic- "++"1

!5

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