Documente Academic
Documente Profesional
Documente Cultură
a ) Definiţie
Tablou bidimensional = succesiune de locaţii de memorie recunoscute prin
acelaşi
identificator şi prin poziţia fiecăreia în cadrul şirului. Poziţia este dată printr-o suită de
două numere pozitive (indecşi), care reprezintă cele două dimensiuni (linie şi coloană).
Ex. Introducerea unui tablou de 6 linii şi 8 coloane (6 x 8) având elemente întregi este
de forma:
int x[6][8];
X [0 ] [1 ] [2 ] [3 ] [4 ] [5 ] [6 ] [7 ]
[0 ] 23 67
[1 ]
[2 ]
[3 ]
[4 ]
[5 ]
Citirea elementelor unui tablou nu este posibilă decât prin citirea fiecărui element.
De aceea, la fel ca şi în cazul vectorilor operaţia de citire a matricilor impune
folosirea a două secvenţe ciclice suprapuse. Acestea corespund indicelor liniei (i),
respectiv coloanei (j).
Ex.
int tab[5][5];
int i,j;
printf(“\n Introduceti dimensiunile matricei (m si n) ”);
scanf(“%d %d”,&m,&n);
for(i=0; i<m; i++)
for(j=0; j<n; j++)
{
printf(“\n tab[%d][%d] = : ”,i,j); //se va afisa tab[i][j]= şi se aşteaptă
scanf(“%d”,&tab[i][j]); //introducerea valorii care se atribuie
} //variabilei tab[i][j]
Obs:
1. Dimensiunile efective ale tabloului introdus de către utilizator (m si n) nu
trebuie să depăşească dimensiunile cu care a fost declarat tabloul
bidimensional.
2. Identificarea zonei de memorie unde va fi reţinut tabloul se face cu ajutorul
numelui tabloului. Acesta are ca valoare adresa primului element din tablou,
tab[i][j]), ceea ce îl deosebeşte de identificatorul folosit pentru variabilele
simple care nu reprezintă o adresă.
&tab ≡ tab ≡ &tab[0][0];
3. Instrucţiunea printf( .......) din interiorul secvenţei ciclice cu contorizare va
afişa numai numele variabilei care se citeşte.
4. Instrucţiunea scanf(.......) va prelua valoarea citită de la tastatură şi o va
memora (înscrie) în poziţia respectivă (tab[i][j]).
5. Un exemplu frecvent întâlnit de citire eronată a unei matrici este de forma:
for(i=0; i<m; i++)
for(j=0; j<n; j++)
{
printf(“\n tab[%d][%d] = %d: ”,i,j, tab[i][j]);
scanf(“%d”,&tab[i][j]);
}
Se execută mai întâi instrucţiunea de afişare. De exemplu pt i=0 şi j=0 rezultatul
interpretării acesteia este afişarea: tab[0][0] = -30731. În continuare se va executa
instrucţiunea de citire care va aşteapta introducerea valorii care se va memora în locaţia
tab[0][0].Valoarea afişată –30731 provine din faptul că în momentul afişării variabila
tab[0][0] nu este iniţializată şi de aceea se va interpreta conţinutul acestei locaţii ca o
variabilă întreagă şi apoi este afişată. Variabila tab a fost declarată anterior ca având
elemente întregi.
c) Afişarea matricelor
Ex. Să se afişeze matricea sub formă de tablou rectangular(ca o matrice). Aceasta a fost
iniţializată anterior direct în cadrul instrucţiunii de declarare.
int tab[5][5]={{1,2,3,4,5},
{6,7,8,9,10},
{11,12,13,14,15},
{16,17,18,19,20},
{21,22,23,24,24}};
printf(“\n Elementele vectorului sunt: ”);
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
printf(“%4d”, tab[i][j]);
printf(“\n”);
}
d) Prelucrări asupra matricelor
Ex. Pentru o matrice dată să se calculeze suma elementelor care aparţin unui interval dat
(xinf<=tab[i][j] && xsup>=tab[i][j]).
Prezentarea algoritmului :
- se citesc capetele intervalului în care trebuie să se încadreze elementele cautate în
matrice
xinf şi xsup
- se citesc dimensiunile matricei
m şi n
- se citesc elementele matricei
pentru i=0,m-1 execută
pentru j=0,n-1 execută
citeşte tab[i][j];
sfârşit pentru
sfârşit pentru
- suma = 0;
- se parcurge matricea element cu element. Se testează dacă elementul curent se
încadrează în intervalul dorit şi în caz afirmativ elementul curent se adună la suma
calculată anterior
pentru i=0,m-1 execută
pentru j=0,n-1 execută
dacă tab[i][j] > xi şi tab[i][j] < xf atunci
suma = suma + tab[i][j];
sfârşit dacă
sfârşit pentru
sfârşit pentru
- afişează suma
Obs. Variabila suma reprezintă suma calculată.
Obs. Vectorul max_lin conţine elementele maxime de pe fiecare linii. Evident acesta are
dimensiunea egală cu numărul liniilor matrucii tab.
Prezentarea algoritmului :