4.1. Declararea tablourilor 4.3. Tablouri bidimensionale
4.2. Tablouri unidimensionale 4.4. Siruri de caractere
4.1. DECLARAREA TABOURILOR
Numim tablou o colectie (grup, multime ordonata) de date, de acelasi tip, situate intr-o zona de memorie 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 intregi) care reprezinta pozitia elementului in cadrul tabloului.
In functie de numarul indicilor utilizati pentru a referi elementele tabloului, putem intalni tablouri unidimensionale (vectorii) sau multidimensionale (matricile sunt tablouri bidimensionale).
Ca si variabilele simple, variabilele tablou trebuie declarate inainte de utilizare.
Modul de declarare:
tip nume_tablou[dim_1][dim_2].[dim_n];
unde:tip reprezinta tipul elementelor tabloului; dim_1,dim_2,,dim_n sunt numere intregi sau expresii constante intregi (a caror valoare este evaluata la compilare) care reprezinta limitele superioare ale indicilor tabloului.
Exemple:
//1
int vect[20]; // declararea tabloului vect, de maximum 20 de elemente, de tipul int.
// Se rezerva 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
4.2. TABLOURI UNIDIMENSIONALE
Tablourile unidimensionale sunt tablouri cu un singur indice (vectori). Daca tabloul contine dim_1 elemente, indicii elementelor au valori intregi din intervalul [0, dim_1-1].
La intalnirea declaratiei unei variabile tablou, compilatorul aloca o zona de memorie continua (data de produsul dintre dimensiunea maxima si numarul de octeti corespunzator tipului tabloului) pentru pastrarea valorilor elementelor sale. Numele tabloului poate fi utilizat in diferite expresii si valoarea lui este chiar adresa de inceput a zonei de memorie care i-a fost alocata. Un element al unui tablou poate fi utilizat ca orice alta variabila (in exemplul urmator, atribuirea de valori elementelor tabloului vector). Se pot efectua operatii asupra fiecarui element al tabloului, nu asupra intregului tablou.
Exemplu:
vector
// Declararea tabloului vector
100
101
102
103
104
105
vector[0]
vector[1]
vector[2]
vector[3]
vector[4]
vector[5]
Figura 4.1.
int vector[6];
// Initializarea elementelor tabloului
vector[0]=100;
vector[1]=101;
vector[2]=102;
vector[3]=103;
vector[4]=104;
vector[5]=105;
Exemplu:
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 initializate in momentul declararii:
declaratie_tablou=lista_valori;
Valorile din lista de valori sunt separate prin virgula, iar intreaga lista este inclusa intre acolade:
Exemple:
//1
int vector[6]={100,101,102,103,104,105};
vector
100
101
102
103
104
105
[0] [5]
//2
double x=9.8;
double a[5]={1.2, 3.5, x, x-1, 7.5};
La declararea unui vector cu initializarea elementelor sale, numarul maxim de elemente ale tabloului poate fi omis, caz in care compilatorul determina automat marimea tabloului, in functie de numarul elementelor initializate.
Exemplu:
char tab[]={ 'A', 'C', 'D', 'C'};
tab
'A'
'B'
1
'C'
'D'
[0] [3]
float data[5]={ 1.2, 2.3, 3.4 };
data
1.2
2.3
3.4
?
?
[0] [4]
Adresa elementului de indice i dintr-un tablou unidimensional poate fi calculata astfel:
adresa_elementului_i = adresa_de_baza + i lungime_element
Exercitii:
//1 Citirea elementelor unui vector:
double a[5];
int i;
for (i=0; i<5; i++)
{ cout<<"a["<
cin>>a[i]; //citirea valorii elementului de indice i
}
//Sau:
double a[20]; int i, n;
cout<<"Dim. Max. ="; cin>>n;
for (i=0; i
{ cout<<"a["<
cin>>a[i];
}
//2 Afisarea elementelor unui vector:
cout<<"Vectorul introdus este:n";
for (i=0; i
cout<
//3 Afisarea elementelor unui vector in ordine inversa:
cout<<"Elementele vectorului in ordine inversa:n";
for (i=n-1; i>=0 i++)
cout<
//3 Vectorul suma (c) a vectorilor a si b, cu acelasi numar de elemente:
for (i=0; i
c[i]=a[i]+b[i];
//4 Vectorul diferenta (c) a vectorilor a si b, cu acelasi numar de elemente:
for (i=0; i
c[i]=a[i] - b[i];
//5 Produsul scalar (p) a vectorilor a si b, cu acelasi numar de elemente:
p= double p=0;
for (i=0; i
p += a[i] b[i];