Sunteți pe pagina 1din 23

Operaii cu tablouri

n aceast seciune vom studia principalele operaii care se fac asupra tablourilor: crearea tabloului, atribuirea de valori componentelor de tablou, citirea valorii

componentei, sortarea (ordonarea) componentelor de tablou dup valoarea lor i cutarea unei valori ntr-un tablou.
Operaii de baz

Crearea tabloului const

n alocarea de spaiu n memorie pentru tablou i eventual atribuirea de valori iniiale componentelor tabloului. Alocarea de spaiu se poate face, n general, n memoria static, pe stiv sau n

memoria dinamic. n limbajele Pascal, C i C++ sunt posibile toate aceste trei forme de alocare. n limbajul Java, tablourile sunt obiecte, astfel c pentru ele este posibil

numai alocarea dinamic. n consecin, n acest limbaj se face distincie ntre declararea ta bloului i crearea lui. Fie urmatoarele instruciuni n limbajul Java:
double a, b[], c[][];

String str, tstr[];

a=7.35;

b=new double[4];

c=new double[2][5];

str=new String("Un sir");

tstr=new String[4];

Primele dou din aceste instruciuni sunt declaraii. Se declar c este o variabil de tip double, este
a b

o referin la un tablou unidimensional cu elemente de tip double, este o referin la un tablou bidimensional cu elemente de tip double, este o referin la un obiect din clasa
c str

String (la un ir), iar este o referin la un tablou unidimensional, ale crui componente sunt obiecte din clasa String. Ca efect al executrii primelor trei instruciuni, se aloc n memorie
tstr

spaiu numai pentru valoarea variabilei si pentru referinele si , dar nu i pentru obiectele indicate de aceste referinte. n instruciunile urmtoare, se folosete operatorul pentru
a b, c, str tstr new

a aloca n memoria dinamica spaiu pentru obiectele respective i a atribui ca valori variabilelor referin, deja declarate anterior, referinele ctre aceste obiecte.

Dup cum se tie, este permis s se combine aceste instruciuni, ca n exemplul urmtor:
double a=7.35, b[]=new double[4], c[][]=new double[2][5]; String str=new String("Un sir"), tstr[]=new String[4];

Remrcam, totui, c s-a meninut i aici distincia dintre declararea v

ariabilei referin la tablou i alocarea de memorie prin operatorul . Dimensiunile efective ale tabloului nu se dau la declararea acestuia, ci la alocarea de memorie.
new

La crearea tablourilor prin operatorul new, componentele tabloului se iniializeaz la valori nule. Este permis i n Java, la fel ca n C/C++, iniializarea tablourilor n cadrul declaraiilor

de tip, ca n exemplul urmtor:


int t[]={12,-3, 5}, w[][]={{2, 4},{1, -3},{-8, 5}}; String s[]={"un sir", "alt sir"};

Remarcm, totui, c i n acest caz n partea declarativ propriu-zis nu se indic dimensiunile

tabloului, acestea rezultnd implicit din expresia de iniializare pus ntre acolade. Tot odat, remarcm c i n acest caz tablourile sunt plasate tot n memoria dinamic, la fel ca atunci cnd ar fi

fost create prin operatorul .


new

In limbajele C si C+ + sunt posibile declaraii de forma


double a[3], b[2][7];

In acest caz, alocarea de spaiu pentru tablouri nu se face n memoria dinamic, ci n cea

static sau pe stiv. Declaraii de tablou similare se pot face i n alte limbaje de programare, dar nu n Java.

Componentele tabloului sunt tratate n program ca nite variabile simple, dac

aparin unui tip primitiv, sau ca variabilereferin, cnd componentele sunt instane ale unei clase. Adresa sau referina componentei unui tabou, se poate afla cunoscnd adresa de baz a

tabloului sau referina la acesta i indicii componentei respective. In consecin, acces ul la oricare component a tabloului este direct, adic putem obine orice component a

tabloului fr a parcurge n prealabil alte componente, cu condiia sa i cunoastem indicele (indicii). Atribuirea de valoare unei componente se face, deci, printr-o instruciune de

forma
referinta_la_componenta = expresie;

n care referina la component este numele referinei la tablou, nsoit de indicii componentei, de exemplu sau . Se observ ca numrul de operaii
t[2] w[i][j]

elementare care se fac n aceast operaie nu depinde de numrul de componente din tablou, deci operaia are complexitatea O(1 ). Preluarea valorii unei

componente de tablou se face, de asemenea folosind ntr-o expresie referina la acea componenta i are tot complexitatea O(1 ).

S-ar putea să vă placă și