DECLARAREA TABLOURILOR
tip nume_tablou[dim_1][dim_2].[dim_n];
unde:tip reprezintã tipul elementelor tabloului; dim_1,dim_2,...,dim_n sunt numere întregi sau expresii constante întregi (a cãror valoare este evaluatã la compilare) care reprezintã limitele superioare ale indicilor tabloului.
//1
int vect[20]; // declararea tabloului vect, de maximum 20 de elemente, de tipul int.
// Se rezervã 20*sizeof(int)=20 * 2 = 40 octeti
//2
double p,q,tab[10];
// declararea variabilelor simple p, q si a vectorului tab, de maximum 10 elemente, tip double
//3
#define MAX 10
char tabc[MAX]; /*declararea tabloului tabc, de maximum MAX (10) elemente de tip char*/
//4
double matrice[2][3]; // declararea tabloului matrice (bidimensional),
// maximum 2 linii si maximum 3 coloane, tip double
Prelucrări asupra tablourilor bideminsionale (matricelor)
- Numim tablou o colectie (grup, multime ordonata) de date, de acelasi tip, situate într-o zona de memori 434f58e e continua (elementele tabloului se afla la adrese succesive). Tablourile sunt variabile compuse (structurate), deoarece grupeaza mai multe elemente. Variabilele tablou au nume, iar tipul tabloului este dat de tipul elementelor sale. Elementele tabloului pot fi referite prin numele tabloului si indicii (numere întregi) care reprezinta pozitia elementului în cadrul tabloului.
- În functie de numarul indicilor utilizati pentru a referi elementele tabloului, putem întâlni tablouri unidimensionale (vectorii) sau multidimensionale (matricile sunt tablouri bidimensionale).Ca si variabilele simple, variabilele tablou trebuie declarate înainte de utilizare.
- Modul de declarare:
tip nume_tablou[dim_1][dim_2].[dim_n];
unde:tip reprezintã tipul elementelor tabloului; dim_1,dim_2,...,dim_n sunt numere întregi sau expresii constante întregi (a cãror valoare este evaluatã la compilare) care reprezintã limitele superioare ale indicilor tabloului.
- Exemple:
//1
int vect[20]; // declararea tabloului vect, de maximum 20 de elemente, de tipul int.
// Se rezervã 20*sizeof(int)=20 * 2 = 40 octeti
//2
double p,q,tab[10];
// declararea variabilelor simple p, q si a vectorului tab, de maximum 10 elemente, tip double
//3
#define MAX 10
char tabc[MAX]; /*declararea tabloului tabc, de maximum MAX (10) elemente de tip char*/
//4
double matrice[2][3]; // declararea tabloului matrice (bidimensional),
// maximum 2 linii si maximum 3 coloane, tip double
Prelucrări asupra tablourilor bideminsionale (matricelor)
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ă).
Valorile atribuite elementelor tabloului trebuie să fie de acelaşi tip.
Organizarea unui tablou bidimensional în memorie este de reprezentată în figura de mai jos:
Ex. Introducerea unui tablou de 6 linii şi 8 coloane (6 x 8) având elemente întregi este de forma:
int x[6][8];
![]() |
Exemplu de instrucţiune de atribuire
x[0][0] = 23;
x[0][5] = 67;
|
b) Citirea tablourilor bidimensionale
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”);
}
- Din punct de vedere conceptual, elementele unui tablou bidimensional sunt plasate în spatiu pe douã directii. Matricea reprezintã o aplicatie naturalã a tablourilor bidimensionale.
- În matematicã:
q q q . . . q
q q q . . . q
Q= . . . . . . . . . . . . . . . . . . . . . . . . . . Q
q q q . . . q
- În limbajele C/C++ (indicii de linie si de coloanã pornesc de la 0):
q q q . . . q
q q q . . . q Q
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
q q q . . . q
Exemplu:
double q[3][2]; // declararea matricii q, cu maxim3 linii si 2 coloane, tip double
- În memorie, elementele unei matrici sunt memorate pe linii:
q q q q q q . . .
- Dacã notãm cu k pozitia în memorie a unui element, valoarea lui k = i m + j (unde m este numãrul maxim de linii, i este indicele de linie, j este indicele de coloanã).
- Dacã se doreste initializarea elementelor unei matrici în momentul declarãrii acesteia, se poate proceda astfel:
int mat[4][3] = ,
,
,
};
- Prin aceastã constructie, elementele matricii mat se initializeazã în modul urmãtor:
mat[0][0]=10, mat[0][1]=-50, mat[0][2]=3
mat[1][0]=32, mat[1][1]=20, mat[1][2]=1
mat[2][0]=-1, mat[2][1]=1, mat[2][2]=-2
mat[3][0]=7, mat[3][1]=-8, mat[3][2]=19
- La declararea unei matrici si initializarea elementelor sale, se poate omite numãrul maxim de linii, în schimb, datoritã modului de memorare, trebuie specificat numãrul maxim de coloane:
int mat[][3] = ,
,
,
};
- Constructia are acelasi efect ca precedenta.
int mat[][3] = ,
,
};
- mat reprezintã o matrice 3 3, ale cãrei elemente se initializeazã astfel:
mat[0][0]=1, mat[0][1]=1, mat[1][0]=-1, mat[2][0]=3, mat[2][1]=2, mat[2][2]=1
- Elementele mat[0][2], mat[1][1], mat[1][2] nu sunt initalizate. Ele au valoarea zero dacã tabloul este global si valori initiale nedefinite dacã tabloul este automatic.
- Constructiile utilizate la initializarea tablourilor bidimensionale se extind pentru tablouri multidimensionale, cu mai mult de doi indici.
Exemplu:
int a[2][2][3]=, , },
, , }
};
- Exercitiu: Sã se citeascã de la tastaturã elementele unei matrici de maxim 10 linii si 10 coloane. Sã se afiseze matricea cititã.
#include <iostream.h>
void main(void)
//afisarea elementelor matricii
for (i=0; i<nr_lin; i++)
}
Niciun comentariu:
Trimiteți un comentariu