Documente Academic
Documente Profesional
Documente Cultură
Tablouri
CUPRINS
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Noiuni introductive
Tablouri unidimensionale
Tablouri multidimensionale
Elemente de tablou
Iniializarea tablourilor la declarare
Prelucrarea tuturor elementelor unui tablou
Transmiterea tablourilor ctre funcii
Cutarea n tablouri
Inserarea n tablouri
tergerea din tablouri
2
1. NOIUNI INTRODUCTIVE
2. TABLOURI UNIDIMENSIONALE
Declaraia tabloului:
tip nume_tablou[dimensiune];
tip este un tip de dat (predefinit sau definit de
utilizator)
nume_tablou este un identificator C/C++
dimensiune este o expresie constant ntreag i pozitiv
ce specific numrul de elemente din tablou
TABLOURI UNIDIMENSIONALE
TABLOURI UNIDIMENSIONALE
Exemplu:
int tab[100];
primul element:
ultimul element:
un element oarecare , i+1:
dimensiunea tabloului este:
tab[0]
tab[99]
tab[i]
sizeof(int)*100 = 2(4)00
6
TABLOURI UNIDIMENSIONALE
TABLOURI UNIDIMENSIONALE
Observaii:
Dimensiunea specificat la declarare poate fi o
expresie constant ntreag:
const int SIZE = 10;
int score[SIZE/2];
2. Nu se admite ca dimensiune o expresie n care
intervin variabile:
int size;
cout << Dati numarul de studenti: ";
cin >> size;
int score[size];
// incorect !!!
3. Declaraiile de tablouri pot fi intercalate cu alte
variabile simple de acelai tip:
int i, score[5], x, y, z;
1.
3. TABLOURI MULTIDIMENSIONALE
Declaraie:
tip nume_tablou[dimens1][dimens2]...[dimensN];
dac n=1, tabloul se numete uni-dimensional (vector,
dar e impropriu ca noiune): int tab[100];
dac n=2, tabloul se numete matrice:
float tab[10][5];
n general pentru un n oarecare, tablou n-dimensional
TABLOURI MULTIDIMENSIONALE
Organizarea logic:
Col
tab[0][0]
tab[0][1]
tab[0][2]
tab[1][0]
tab[1][1]
tab[1][2]
Linie
10
TABLOURI MULTIDIMENSIONALE
Organizarea n memorie:
Referirea unui element se face astfel:
nume_tablou[index1][index2]...[indexN]
tab[0][0]
tab[0][1]
tab[0][2]
tab[1][0]
tab[1][1]
tab[1][2]
11
4. ELEMENTE DE TABLOU
atribuiri:
tab[i] = 23;
citiri de la consol:
cin >> tab[i];
scanf(%d, &tab[i]);
afiri:
cout << tab[i];
printf(%d, tab[i]);
calcule:
sum += tab[i];
apeluri de funcii:
Celsius = F_to_C(tab[0]);
12
13
INIIALIZAREA TABLOURILOR
Tablouri unidimensionale:
tip nume_tablou[dimensiune] = {ec0, ..., ecN-1};
dac dimensiunea lipsete numrul expresiilor constante
d dimensiunea tabloului
elementele care nu se iniializeaz explicit sunt automat
iniializate cu 0 (la tablourile globale)
n cazul irurilor de caractere acoladele pot lipsi
Exemple:
14
INIIALIZAREA TABLOURILOR
Tablouri multidimensionale:
tip nume[n][m]= {
{ec11,...,ec1m},
{ec21,...,ec2m},...,
{ecn1,...,ecnm}
};
unde: n, m, ecij, sunt expresii constante (indicii de la 0 la
n-1, respectiv de la 0 la m-1)
acoladele interioare nu sunt obligatorii, dar ele specific
modul de iniializare pe linii
Exemplu:
int tab[3][2] = { {10,11},
{12,13},
15
{14,15} };
16
Tablouri unidimensionale
for (int i=0; i<arraySize; i++)
cin >> temperature[i];
for (int i=0; i<arraySize; i++)
cout << temperature[i] << endl;
int sum=0;
for (int i=0; i<arraySize; i++)
sum += temperature[i];
OBS: Toate operatiile (i ultimele dou) puteau fi
realizate n acelai ciclu pentru a mbunti
performana
17
Tablouri bidimensionale
int numArr[10][10];
18
int sum = 0;
for (int row = 0; row < 10; row++)
for (int col = 0; col < 10; col++)
if (row == col)
sum += arr[row][col];
21
22
24
25
7. CUTAREA N TABLOURI
Este o operaie foarte frecvent
De obicei se caut poziia unui element cu o anumit
valoare
Dac tabloul nu este sortat se aplic cutarea
liniar:
27
CUTAREA N TABLOURI
int linear_search(int arr[ ], int n, int val)
{
int pos;
for(pos = 0; pos < n; pos++)
if (arr[pos] == val)
return pos;
return -1;
}
28
CUTAREA N TABLOURI
Cutarea binar:
tabloul se consider sortat
se verific dac elementul din mijloc are valoarea
cutat
dac da, se returneaz poziia acestuia
dac nu, se restrnge cutarea la una din cele dou
jumti (stnga sau dreapta)
se continu n acest mod pn la gsirea unui
element sau pn cnd intervalul de cutare devine
nul
29
CUTAREA N TABLOURI
// se presupune ca tabloul este sortat crescator
int binarySearch(int arr[ ], int size, int target){
int middlePosition, middleValue;
int low = 0, high = size - 1;
while (low <= high)
{
middlePosition = (low + high) / 2;
middleValue = arr[middlePosition];
if (target == middleValue)
return middlePosition;
else if (target < middleValue)
high = middlePosition - 1;
else
low = middlePosition + 1;
}
return -1;
}
30
8. INSERAREA N TABLOURI
31
INSERAREA N TABLOURI
Tablouri nesortate
32
INSERAREA N TABLOURI
Tablouri sortate
void insertElement ( int arr [ ], int &size, int newElement )
{
int insertPosition, k;
// cautare pozitie inserare
insertPosition = -1;
do
insertPosition++;
while ( newElement > arr[insertPosition] && insertPosition !=
size - 1 );
33
34