Documente Academic
Documente Profesional
Documente Cultură
Tabloul reprezinta o succesiune indexata de date de acelasi tip. Indexarea poate fi facuta:
1) Cu un indice – tabloul se numeste liniar sau vector (sir)
2) Cu 2 indici - se numeste tablou 2- dimensional, sau dreptunghiular, sau matrice
3) Cu 3- indici - tablou 3- dimensional
….
In Pascal se declara un tip tablou in felul urmator:
c11 c12 c13 c14 c21 c22 c23 c24 c31 c32 c33 c34
La tabloul D tot sunt 3*4= 12 elemente. Elementele vor fi:
( )
D [ 1 ] [ 1 ] D [ 1 ] [ 2 ] D [ 1 ] [ 3 ] D[1][4 ]
D= D [ 2 ] [ 1 ] D [ 2 ] [ 2 ] D [ 2 ] [ 3 ] D[2][4 ]
D [ 3 ] [ 1 ] D [ 3 ] [ 2 ] D [ 3 ][ 3 ] D[3][4]
Eficienta tablourilor:
1. Intr-un tablou pot fi pastrate mai multe date cu acelas nume si el poate fi parcurs de
mai multe ori, folosind instructiuni ciclice.
2. Pentru a citi tabloul, a atribui valori elementelor unui tablou, a scrie elementele, a
prelucra elementele tabloului vom folosi instructiuni ciclice.
Tablouri liniare, sau vectori.
Exemplu: var A: array [1..50] of integer;
Ca sa nu citim 50 elemente, putem lua o var n: byte; Ii atribuim valoare, n<=50 si citim
numai n- elemente din tablou. Algoritmul de citire este:
write(‘n=’); readln(n);
For i:=1 to n do begin
Write(‘A[‘, i,’]=’); readln(a[i]);
end;
3. Pentru a scrie elementele tabloului a tot vom folosi o instructiune ciclica, numai ca
vom scrie doar valorile citite intr-o linie, separate prin spatiu:
5. Daca dorim acum sa aflam cate elemente din tablou au valoarea egala cu max si cate
cu min, iar putem parcurge tabloul.
k1:=0; k2:=0;
for i:=1 to n do begin if a[i]=max then inc(k1);
if a[i]=min then inc(k2);
end;
writeln(‘numarul de elemente=max este k1=’,k1);
writeln(‘numarul de elemente=min este k2=’,k2);
6. Pentru a afla de exemplu locul primului element par in tabloul a, ne vom folosi de
instructiune while, pentru nu a parcurge toate elementele. Ex
i:=1;
while (i<=n) and (odd (a[i])) do inc(i);
If i=n+1 then writeln(‘nu sunt elemente pare’)
Else writeln(‘Locul primului element par este=’,i);
Tablouri liniare, sau vectori in C++.
Tabloul reprezinta o succesiune indexata de date de acelasi tip. Indexarea poate fi facuta:
4) Cu un indice – tabloul se numeste liniar sau vector (sir)
5) Cu 2 indici - se numeste tablou 2- dimensional, sau dreptunghiular, sau matrice
6) Cu 3- indici - tablou 3- dimensional
Spre deosebire de limbajul Pascal in C++ tablourile se declara mai simplu si indexarea
deobicei e cu indice natural, ce ia valori 0… n-1 , n – e o constanta, ce va indica ca tabloul
are n-elemente.
Citirea:
cout<<”n=”; cin>>n;
for (i=0; i<=n-1; i++) {cout<<”A[”<<i<<”]=”; cin>>A[i]; }
Scrierea:
cout<<”Avem tabloul”<<endl;
for (i=0; i<=n-1 ; i++) cout<<A[i]<<” ”;
cout<<endl;
Selectia este o metoda de sortare care parcurge secventa de elemente ne sortate, determina
elementul minim, sau maxim si il aduce la inceputul secventei.
metoda I ne optimala: ( face multe schimburi de valori swap(A[i],A[j])
Metoda bulelor:
Metoda I
For ( i=1; i<=n-1; i++)
For (j=0; j<=n-2; j++)
If( A[j+1]< A[j]) swap(A[j], A[j+1]); // tabloul se va sorta crescator
N=8 si am efectuat 7 – parcurgeri in cel mai rau caz.
Cum sa optimizam parcurgerile si schimbul de valori?
1. Vom memoriza pozitia unde s-a efectuat ultimul schimb de valori si la urmatoarea
parcurgere vom veni pana la aceasta pozitie
2. Daca am parcurs si nu am efectuat nici un schimb de valori, atunci elementele sunt
aranjate deja in ordine crescatoare si nu mai trebuie sa parcurgem:
Avem nevoie de urmatoarele variabile: bool u; int l, k; k- va fixa pozitia unde el va face
ultimul schimb de valori, l va primi valoarea lui k, iar urmatoarea parcurgere va fi pana la l-
1;
III metoda:
For (i=n-1; i>=1; i--)
For (j=0; j=i -1;i++)
If (A[j+1]<A[j]) swap(A[j], A[j+1]);
Interclasarea tablourilor sortate, de ex. descrescator.
Indexarea datelor intr-un tablou 2- dim se face cu doi indici, la matematica valoarea initiala a
indicilor este de la 1, dar totusi se aloca memorie si pentru linia 0 si coloana 0. Vom declara
un tablou 2-dim in felul urmator Ex. <tip> A[8][10]. Tabloul A va contine maximal 8-linii
si 10 – coloane. Automat se aloca memorie si pentru linia 0 si coloana 0 Daca intexarea vom
incepe de la 1, atunci putem avea maxim 7- linii si 9- coloana. La matematica tabloul A[n]
[m] se scrie in felul urmator:
Pentru a citi, a scrie, a parcurge un tablou 2- dimensional se folosesc 2 instructiuni ciclice una
in alta. Ex un for (i=1; i<=n; i++) si in acest for un alt for (j=1; j<=m; j++). Ciclul cu
indicile j se va executa pentru fiecare valoare a lui i. Vom avea (n*m - elemente)
Citirea: cin>>n>>m;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
{ cout<<”A[“<<i<<”][”<<j<<”]=”; cin>>A[i][j]; }
Scrierea: for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
{ cout<<setw[5]<<A[i][j];
cout<<endl;
}