Sunteți pe pagina 1din 12

Coala

Mod Coala Nr. document Semnat. Data


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