Tablouri. Vectori

Pana in acest moment sunteti obisnuiti cu ideea “1 variabila reprezinta 1 valoare” si probabil, la sirurile de valori sau la lucrul cu fisiere s-a simtit nevoia memorarii simultane a mai multor valori.

De acest aspect se ocupa TABLOURILE. Un tablou este un sir de valori de acelasi tip, aflate in locatii consecutive de memorie.

Tablourile pot fi :

  • vectori( tablouri unidimensionale): siruri obisnuite de valori
  • matrici (tablouri bidimensionale): un orar, o tabla de sah plina cu numere, …
  • multidimensionale (nu studiem in liceu)

Vectori

Declararea:

tip numevector [numar_maxim_de_elemente];

Exemplu:

int  V[100];
int  I, N;
 

OBSERVATII:

  • S-a declarat un vector V cu maxim 100 de elemente, fiecare element fiind de tip intreg.
  • Asa cum banuiti, s-a rezervat spatiu pentru MAXIM 100 de elemente si nu e obligatoriu sa le folositi pe toate. De aceea este necesara si variabila N care sa memoreze numarul efectiv de elemente ale vectorului.
  • elementele vectorului se pot referi prin V[0], V[1], V[2], …. ; Pentru operatii asupra fiecarui element vom avea nevoie variabila I  care sa parcurga elementele V[i]

Reprezentarea in memorie. Parcurgerea vectorilor

V[0] V[1] V[2] V[3] …. V[N-2] V[N-1] SPATIU NEOCUPAT

Implicit, prima pozitie dintr-un vector este V[0]. De vreme ce vectorul are N elemente, deducem ca ultimul element este V[N-1].  A trece prin elementele vectorului presupune parcurgerea tuturor celor N elemente , de la V[0] la V[N-1] .

for(I=0;I<N;I++)
      prel V[I];

Pentru ca numararea de la 0 la N-1 poate fi incomoda, puteti ignora pozitia V[0].

for(I=1;I<=N;I++)
      prel V[I];

Trebuie sa aveti grija la numarul de elemente. Daca problema spune ca “vectorul are maxim 100 de elemente” declararea normala ar fi int V[100];, gandind ca avem valori de la V[0] la V[99]. Daca folositi numararea de la 1, practic aveti numai 99 de locatii de memorie disponibile pentru cele 100 de valori. In acest caz declararea corecta ar fi  int V[101];.

Citirea vectorilor

Citirea unui vector presupune stabilirea unei valori de pornire pentru fiecare din cele N valori din vector: V[1], V[2], …. V[N].

for(I=1;I<=N;I++)
      cin>>V[i];
 

Afisarea vectorilor

Afisarea unui vector presupune tiparirea in ecran a fiecarei din cele N valori din vector: V[1], V[2], …. V[N]. Pentru a nu se lipi valorile, dupa fiecare V[i] am afisat si o virgula si un spatiu.

for(I=1;I<=N;I++)
      cout<<V[i]<<“, “;
 

Probleme – parcurgeri.

Fie V un vector cu N valori intregi.

  1. Sa se numere cate valori sunt pare/impare.
  2. Sa se numere cate valori sunt pozitive, negative, nule.
  3. Sa se stabileasca daca o valoare X se regaseste in vector sau nu.
  4. Sa se numere de cate ori apare valoarea X in vector.
  5. Sa se determine valorile minima si maxima din vector
  6. Sa se determine in mod optim (cu numar minim de pasi) valoarea maxima si de cate ori apare in vector.
  7. Sa se rearanjeze elementele lui V astfel incat, la afisare, elementele sa apara in oglinda (2, 5, 3, 6 => 6, 3, 5, 2)

Probleme – modificarea structurii unui vector

  1. Sa se adauge un nou element X la sfarsitul vectorului.
  2. Sa se insereze un nou element X in pozitia K, restul elementelor ramanand in aceeasi ordine. (Exemplu. Elevii clasei dvs se duc la film si ocupa un rand intreg, incepand cu locul 1. In sfarsit apareti si dvs si, din diverse motive doriti sa va asezati pe locul K. In afara de aceasta, nu este permisa modificarea ordinii initiale.)
  3. Sa se stearga elementul din pozitia K a vectorului. (Din cauza intarzierii sunteti intampinat cu ostilitate si va horarati sa plecati. Dupa eliberarea locului, colegii se restrang in forma initiala)

Probleme – vectorii ca multimi

  1. Sa se verifice daca V poate reprezenta o multime (elementele vectorului trebuie sa fie distincte – diferite oricare doua)
  2. Fie A si B doi vectori cu NA si NB elemente, reprezentand doua multimi. Sa se creeze un vector C (NC elemente) in care sa se memoreze elementele intersectiei C= “A intersectat cu B” (elementele comune celor doua multimi A si B).
  3. Fie A si B doi vectori cu NA si NB elemente, reprezentand doua multimi. Sa se creeze un vector C (NC elemente) in care sa se memoreze elementele diferentei C= “A – B” (elementele din A, care nu apar in B)
  4. Fie A si B doi vectori cu NA si NB elemente, reprezentand doua multimi. Sa se creeze un vector C (NC elemente) in care sa se memoreze elementele reuniunii C= “A reunit cu B” (elementele comune si necomune a celor doua multimi A si B, luate o singura data)

Leave a comment