RSS

Tablouri. Vectori

21 Nov

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)
 
 

Tags:

5 responses to “Tablouri. Vectori

  1. Alin

    24/12/2014 at 03:27

    Am un tablou in rerezentare bidimensionala de forma arr[5][5]:
    0 1 2 3 4
    0
    1
    2
    3
    4

    si doresc sa “desenez” ceva folosindu-ma de anumite simboluri.

    Rezultat:
    0 1 2 3 4
    0 ^
    1 @ # +
    2 @ & @
    3 z
    4

    Cum construiesc tabloul astfel incat sa pot insera pe pozitia arr[1][1] simbolul @?
    Sau in general cum inserez pe pozitia arr [rand] [coloana] un anumit simbol?

     
  2. mchelariu71

    26/12/2014 at 14:44

    De vreme ce fiecare element din matrice este un caracter poti incerca
    char arr[5][5], ch;
    citirea ar trebui sa fie ceva de genul

    cin>>arr[i][j]>>ch; //la care introduci caracterul si apesi ENTER; ideea este ca ch va “manca” ENTER-ul;

    mai poti incerca cu un vector de cuvinte:

    typedef char cuv[5];
    cuv p[5];
    int n,i;
    cin >>n;
    for(i=0;i>p[i]; // citesc linia I ca si cuvant
    for(i=0;i<=5;i++)
    cout<<p[i];//afisez linia I

    fiecare p[i] este un cuvant in care te poti adresa elementului j din el cu p[i][j].

     
  3. corii

    20/02/2016 at 12:29

    Buna! am si eu nevoie de ajutor la informatica…am la tema o problema care suna cam asa: se da un vector v cu maxim 100 de componente.Sa se afiseze componentele vectorului astfel : primul si ultimul, al doilea si penultimul si tot asa.Va multumesc anticipat :>

     
  4. mchelariu71

    21/02/2016 at 11:41

    pornim cu 2 indici din STG si din DRP, pana se intalnesc.
    stg=1; drp=n;
    while ( stg < drp)
    {cout << v[stg] << " " << v[drp] << " " ;
    stg + +; drp – – ;
    }
    //la mijloc
    if (stg==drp) cout<<v[stg];

     
  5. alexandru

    08/03/2016 at 16:27

    Bună! am și eu o nelămurărire, îmi puteți explica metoda de sortare prin numărare și prin alegerea minimului? nu prea le-am înțeles

     

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: