1.
2.
Declararea tablourilor Tablouri unidimensionale
Definiţie: Numim tablou o colecţie (grup, mulţime ordonată) de date, de acelaşi tip, situate într-o zonă de memorie continuă (elementele tabloului se află la adrese succesive). Proprietăţile tablourilor: 1o Tablourile sunt variabile compuse (structurate), deoarece grupează mai multe elemente. 2o Variabilele tablou au nume, iar tipul tabloului este dat de tipul elementelor sale. 3o Elementele tabloului pot fi referite prin numele tabloului şi indicii (numere întregi) care reprezintă poziţia elementului în cadrul tabloului. În funcţie de numărul indicilor utilizaţi pentru a referi elementele tabloului, putem întâlni tablouri unidimensionale (vectorii) sau multidimensionale (matricile sunt tablouri bidimensionale, tridimensionale etc.).
Ca şi 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 de declarare de tablouri: 1) int vect[20]; // declararea tabloului vect, de maximum 20 de elemente, de tipul int. // Se rezervă 20*sizeof(int)=20 * 2 = 40 octeţi
vect
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
2) double p, q, tab[10]; // declararea variabilelor simple p, q şi a vectorului tab, de maximum 10 elemente, tip double
p
0.0
q
0.0
tab
0
1
2
3
4
5
6
7
8
9
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
3) #define MAX 10 char tabc[MAX];
tabc
// declararea tabloului tabc de maxim MAX ( 10 ) elemente de tip char // (caracter).
0
1
2
3
4
5
6
7
8
9
‘a’
‘A’
‘ ‘
‘?’
‘:’
‘=‘
‘1’
‘B’
‘c’
‘x’
4) double matrice[2][3];
// declararea tabloului bidimensional matrice cu maxim 2 linii şi // maxim 3 coloane cu elemente de tip double ( numere reale în // dublă precizie ).
0
1
2
0
0.0
0.0
0.0
1
0.0
0.0
0.0
Definiţie: Tablourile unidimensionale sunt tablouri cu un singur indice (vectori). Dacă tabloul conţine dim_1 elemente, indicii elementelor au valori întregi din intervalul [ 0, dim_1 - 1 ]. De reţinut: a) La întâlnirea declaraţiei unei variabile tablou, compilatorul alocă o zonă de memorie continuă (dată de produsul dintre dimensiunea maximă şi numărul de octeţi corespunzător tipului tabloului) pentru păstrarea valorilor elementelor sale.
b) Numele tabloului poate fi utilizat în diferite expresii şi valoarea lui este chiar adresa de început a zonei de memorie care i-a fost alocată. c) Un element al unui tablou poate fi utilizat ca orice altă variabilă (în exemplul următor, atribuirea de valori elementelor tabloului vector). d) Se pot efectua operaţii asupra fiecărui element al tabloului, nu asupra întregului tablou.
Exemple de utilizare a tablourilor uni dimensionale: Exemplul 1 // Declararea tabloului vector. int vector[6]; // Initializarea elementelor tabloului vector[0]=100; vector[1]=101; vector[2]=102; vector[3]=103; vector[4]=104; vector[5]=105;
0
1
2
3
4
5
0
1
2
3
4
5
100
101
102
103
104
105
vector
vector
Exemplul 2 double alpha[5], beta[5], gama[5]; int i=2; alpha[2*i-1] = 5.78; alpha[0]=2*beta[i]+3.5; gama[i]=aplha[i]+beta[i]; //permis gama=alpha+beta; //nepermis
Variabilele tablou pot fi iniţializate în momentul declarării: declaraţie_tablou=listă_valori; Valorile din lista de valori sunt separate prin virgulă, iar întreaga listă este inclusă între acolade: Exemplul 3 int vector[6]={100,101,102,103,104,105};
vector
0
1
2
3
4
5
100
101
102
103
104
105
Exemplul 4 double x=9.8; double a[5]={1.2, 3.5, x, x-1, 7.5};
La declararea unui vector cu iniţializarea elementelor sale, numărul maxim de elemente ale tabloului poate fi omis, caz în care compilatorul determină automat mărimea tabloului, în funcţie de numărul elementelor iniţializate. Exemplul 5 char tab[]={ ’A’, ’C’, ’D’, ’C’}; Exemplul 6 float data[5]={ 1.2, 2.3, 3.4 };
tab
data
0
1
2
3
‘A’
‘C’
‘D’
‘C’
0
1
2
3
4
1.2
2.3
3.4
?
?
Adresa elementului de indice i dintr-un tablou unidimensional poate fi calculată astfel: adresa_elementului_i = adresa_de_bază + i lungime_element
1) Citirea elementelor unui vector:
Exerciţii
double a[5]; int i; for (i=0; i<5; i++) { cout<<”a["<<i<<”]=”; cin>>a[i];
//afişarea unui mesaj prealabil //citirii fiecărui element //citirea valorii elementului de indice i
}
//sau: double a[20]; int i, n; cout<<”Dim. Max. =”; cin>>n; for (i=0; i<n; i++) { cout<<”a[“<<i<<”]=”; cin>>a[i]; }
2) Afişarea elementelor unui vector: cout<<”Vectorul introdus este:\n”; for (i=0; i<n i++) cout<<a[i]<<’ ’;
3) Afişarea elementelor unui vector în ordine inversă: cout<<”Elementele vectorului în ordine inversă:\n”; for (i=n-1; i>=0 i--) cout<<a[i]<<’ ’;
4) Vectorul sumă (c) a vectorilor a şi b, cu acelaşi număr de elemente: for (i=0; i<n i++) c[i]=a[i]+b[i];
5) Vectorul diferenţă (c) a vectorilor a şi b, cu acelaşi număr de elemente: for (i=0; i<n i++) c[i]=a[i] - b[i]; TEMĂ: Scrieţi în Borland C câte un program pentru fiecare din exerciţiile de mai sus, compilaţile şi executaţile.