UTM. 525.3 133 05 Tema: Tablouri bidimensionale(matrici) in C/C++ 1. Scoul. Studierea i utilizarea instruciunilor de baz ale limbajului pentru prelucrare i modificarea masivelor bidimensionale. 2. !escrierea temei 2.1 !eclarea tablourilor Un tablou bidimensional este o succesiune de locatii de memorie recunoscute prin acelasi identificator si prin pozitia fiecareia in cadrul sirului. Pozitia este data printro suita de numere pozitive!indecsi"# care reprezinta cele doua dimensiuni !linie si coloana". $abloul are un numar bine determinat de elemente si se identifica printrun sin%ur nume. &alorile atribuite elementelor tabloului trebuie sa fie de acelasi tip. $ablourile bidimensionale se numesc M'$()C*. 2.2!escriere "enerala Sinta+a 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# c0ar# 1" 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 *+emple de declaratii, 22 matrice de intre%i cu 34 linii si 34 coloane int vanzari53465346/ 22 vector de valori reale float temperature5765386/
7 Coala Mod Coala Nr. document Semnat. Data UTM. 525.3 133 05 Memorarea matricelor se face# ca si in cazul vectorilor# intrun spatiu continuu de memorie. Numele matricei e un pointer catre adresa primului element.*lementele matricei sunt stocate in memorie linie dupa linie. Matricea cu m linii si n coloane arata astfel, 2.3Citirea si a#isarea unui tablou bidimensional Citirea elementelor unui tablou nu este posibila decat prin citirea fiecarui element. De 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 !j". *+emplu, Declararea unei matrice cu 34 linii i 9 coloane# cu elemente de tip intre% este, )nt a5346596/
Matricea are liniile 3#:1#34 i coloanele 3# :#1#9 si# de e+emplu# elementul de pe linia a treia si coloana a patra se adreseaz prin a5765;6 De multe ori nu tim c<te linii i c<te coloane va trebui s aib tabloul. =n acest caz # tabloul se declar cu un numr ma+im de linii i un numr ma+im de coloane# >n aa fel >nc<t acesta s corespund oricrui set de date de intrare. *vident # >ntrun astfel de caz e+ist o risip de memorie intern. 2.$Matricea atratica Se citeste un tablou cu n linii si n coloane# numere intre%i. Un astfel de tablou# in care numarul liniilor este e%al cu numarul coloanelor# poarta denumirea de matrice patratica.
? matrice patratica are doua dia%onale, principala si secundara.
7 Coala Mod Coala Nr. document Semnat. Data UTM. 525.3 133 05 Pentru un tablou patratic '# numim dia%onala principala# elementele aflate pe @liniaA care uneste '546546 cu '5n65n6.
Pentru un tablou patratic '# numim dia%onala secundara# elementele aflate pe @liniaA care uneste '5n6546 cu '5465n6 )n fi%ura de mai jos este reprezentat un tablou cu patru linii si patru coloane. )n fiecare dintre casute este precizat indicele de linie si de coloan pentru fiecare element. ?bservatieB Se poate memora matricea incepand cu valoarea 3 pentru indicele de linie si de coloana.!*lementul ':3 este elementul de pe linia 7 # coloana:".
%00 %01 %02 %03 %10 %11 %12 %13 %20 %21 %22 %23 %30 %31 %32 %33 3.Conditia roblemei: S se scrie un pro%ram ce va prelucra un masiv bidimensional $5n#n6 cu condiiile, 10. a)Aranjai in ordine cresctoare elementele fecrei coloane; b)De calculat media aritmetica a elementelor de pe primul si ultimul rind; T[n, n] $. &istin"ul ro"ramului: # include <conio.h> # include<stdio.h> # include <math.h> # include <stdlib.h> # include <string.h> void main ( ) { int T[100][100],n,1!0,au"# 7 Coala Mod Coala Nr. document Semnat. Data UTM. 525.3 133 05 $loat %!0,&!0# int &e',&e'1,&e'(,&e')# char *,+,,# -rint$(./n/t/t0ucrarea de laborator *r123Tabele 4idimensionale (%atrice).)# -rint$(./n5 6"ecutat de studentul1 /n5 *umele3 .)# scan$(.7s.,8*)# -rint$(./n5 +renumele3 .)# scan$(.7s.,8+)# -rint$(./n5 9ru-a1 .)# scan$(.7s.,8,)# clrscr()# -rint$(./n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!/n/r.)# -rint$(.1 5:e aran;at in ordine crescatoare elementele $iecarei coloane )/n.)# -rint$(.( 5 :e calculat media aritmetica a elementelor de -e-rimul si ultimul rind 1/n.)# -rint$(.0 5 <esirea din sistem/n.)# -rint$(.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!/n.)# -rint$(.<ntrodu &e'1.)# scan$(.7d.,8&e')# clrscr()# s=itch(&e') { case 11 { -rint$(.%eniu.)# -rint$(./n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!/n/r.)# -rint$(.1 5 <ntrodu matricea manual.)# -rint$(./n( 5 <ntrodu matricea aleator(>andom).)# -rint$(./n<ntrodu &e'(1.)# scan$(.7d.,8&e'()# 7 Coala Mod Coala Nr. document Semnat. Data UTM. 525.3 133 05 s=itch(&e'() { case 11 {-rint$(. introdu marimea tabloului.)# scan$(.7d.,8n)# $or(int i!0# i<n# i??) {$or(int ;!0# ;<n# ;??) {-rint$ (.T[7d][7d]!.,i,;)# scan$ (.7d.,8T[i][;])# @ @ -rint$ (./n a$isam matricea initiala/n.)# $or(int i!0# i<n# i??) {$or(int ;!0# ;<n# ;??) { -rint$ (.7)d.,T[i][;])# @ -rint$(./n.)# @ $or(int A!0# A<n# A??) $or(int i!0# i<n31# i??) {$or(int ;!0# ;<n# ;??) {i$((T[i][;])>(T[i?1][;])) { au"!T[i][;]# T[i][;]!T[i?1][;]# T[i?1][;]!au"# @ @ @-rint$ (./na$isam matricea schimbata/n.)# $or(int i!0# i<n# i??) { $or(int ;!0# ;<n# ;??) { -rint$(.7)d.,T[i][;])# 7 Coala Mod Coala Nr. document Semnat. Data UTM. 525.3 133 05 @ -rint$(./n.)# @@getch()# clrscr()# case (1 { -rint$(.<ntrodu marimea matricei1.)# scan$(.7d.,8n)# $or (int i!0# i<n# i??) {$or (int ;!0# ;<n# ;??) { T[i][;]!random(B0)3C# @@ $or(int i!0# i<n# i??) { $or(int ;!0# ;<n# ;??) { -rint$(.7)d.,T[i][;])# @ -rint$(./n.)# @ $or(int A!0# A<n# A??) $or(int i!0# i<n31# i??) {$or(int ;!0# ;<n# ;??) {i$((T[i][;])>(T[i?1][;])) { au"!T[i][;]# T[i][;]!T[i?1][;]# T[i?1][;]!au"# @ @ @ -rint$ (./na$isam matricea schimbata/n.)# $or(int i!0# i<n# i??) { $or(int ;!0# ;<n# ;??) { 7 Coala Mod Coala Nr. document Semnat. Data UTM. 525.3 133 05 -rint$(.7)d.,T[i][;])# @ -rint$(./n.)#@@ @clrscr()# case (1 { -rint$(.!!!!!!!!!!!!!%eniu!!!!!!!!!!!!!!!!.)# -rint$(./n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//n/r.)# -rint$(./n15 <ntrodumatricea manual.)# -rint$(./n( 5 <ntrodu matricea aleator(>andom).)# -rint$(./n<ntrodu &e')1.)# scan$(.7d.,8&e'))# s=itch(&e')) { case 11 { -rint$(.<ntrodu marimea matricei1.)# scan$(.7d.,8n)# $or (int i!0# i<n# i??) {$or (int ;!0# ;<n# ;??) {-rint$(.T[7d][7d]!.,i,;)# scan$(.7d.,8T[i][;])# @-rint$(./n.)# @ -rint$ (./n a$isam matricea /n.)# $or(int i!0# i<n# i??) {$or(int ;!0# ;<n# ;??) { -rint$ (.7)d.,T[i][;])# @ -rint$(./n.)# @ $or(int ;!0# ;<n# ;??) {1!1?T[0][;]#&??#@ $or(int ;!0# ;<n# ;??) {1!1?T[n31][;]#&??#@ 7 Coala Mod Coala Nr. document Semnat. Data UTM. 525.3 133 05 %!1D&# -rint$ (.%!7$.,%)#@ getch()# clrscr()# case (1 {-rint$(.<ntrodu marimea matricei1.)# scan$(.7d.,8n)# $or(int i!0#i<n#i??) {$or(int ;!0#;<n#;??) {T[i][;]!random(B0)3C#@ @ $or(int i!0#i<n#i??) { $or(int ;!0#;<n#;??) { -rint$(.7)d.,T[i][;])# @ -rint$(./n.)# @ $or(int ;!0# ;<n# ;??) {1!1?T[0][;]#&??#@ $or(int ;!0# ;<n# ;??) {1!1?T[n31][;]#&??#@ %!1D&# -rint$ (.%!7$.,%)#@@@@@ getch()#@ 5. 'e(ultatul e)ecutiei: 7 Coala Mod Coala Nr. document Semnat. Data UTM. 525.3 133 05 7 Coala Mod Coala Nr. document Semnat. Data UTM. 525.3 133 05 7 Coala Mod Coala Nr. document Semnat. Data UTM. 525.3 133 05 *.Conclu(ie )n lucrarea de laborator nr.8 am studiat utilizarea instruciunilor de baz ale limbajului C2CCC pentru prelucrare i modificarea masivelor bidimensionale. Un $ablou bidimensional este o succesiune de locaii de memorie recunoscute prin acelai identificator i prin poziia fiecreia >n cadrul irului. 7 Coala Mod Coala Nr. document Semnat. Data UTM. 525.3 133 05 Poziia este dat printro suit de dou numere pozitive !indeci"# care reprezint cele dou dimensiuni !linie i coloan".&alorile atribuite elementelor tabloului trebuie s fie de acelai tip. Citirea elementelor unui tablou nu este posibil dec<t prin citirea fiecrui element. De aceea la fel ca i >n cazul vectorilor operaia de citire a matricilor impune folosirea a dou secvene ciclice suprapuse. 'cestea corespund indicelor liniei !i"# respectiv coloanei !j". Dimensiunile efective ale tabloului introdus de ctre utilizator !m si n" nu trebuie s depeasc dimensiunile cu care a fost declarat tabloul bidimensional. )dentificarea zonei de memorie unde va fi reinut tabloul se face cu ajutorul numelui tabloului. 'cesta are ca valoare adresa primului element din tablou# tab5i6 5j6"# ceea ce >l deosebete de identificatorul folosit pentru variabilele simple care nu reprezint o adres. Dtab E tab E Dtab546546/ )nstruciunea printf! ......." din interiorul secvenei ciclice cu contorizare va afia numai numele variabilei care se citete. )nstruciunea scanf!......." va prelua valoarea citit de la tastatur i o va memora !>nscrie" >n poziia respectiv !tab5i65j6". 7