Sunteți pe pagina 1din 17

Tablouri unidimensionale (vectori)

PROGRAMAREA STRUCTURATĂ
• Operații posibile
• Accesul la elemente
• Inițializarea tabloului
• Declararea tabloului
• Definiție
• Introducere
Tablouri unidimensionale (vectori)
Tablouri unidimensionale

Numărul de variabile ce pot fi declarate și utilizate într-o aplicație


Necesitate este limitat. Există aplicații care necesită memorarea și
prelucrarea unor serii de sute și mii de valori. Accesarea unui număr mare de
variabile este anevoios și generator de erori. Pentru a rezolva această problemă au
fost create structuri de date (colecții de date) specializate ce ocupă spații de
memorie învecinate și în care aranjarea lor este interdependentă.

Exemple Memorarea și prelucrarea mediilor de absolvire pentru


totalitatea elevilor unui liceu

Memorarea și identificarea numerelor de înmatriculare ale

! autovehiculelor dintr-un raion


Evidența biletelor eliberate (vândute) către clienți cu ocazia
unui spectacol (de exemplul pe un stadion)
Tablouri unidimensionale

Structură de date căreia i se atribuie un nume. Este formată dintr-o


Definiție
colecție de elemente de același tip, dispuse continuu într-un bloc
de memorie. Elementele pot fi accesate individual prin indici sau ca un tot unitar.
Toate elementele au un predecesor (excepție primul) și un succesor (excepție ultimul)

Declarare Tip_de_bază nume_tablou [dimensiune_max]

Tip_de_bază - precizează tipul datelor (întregi, caracter, etc.)

!
Nume tablou – identificator, precizează numele dat tabloului

Dimensiune max – numărul maxim de componente (o constantă întreagă)

Dimensiune max = memoria fizică alocată. Dimens. logică ≤ dimens.max


Tablouri unidimensionale

Declararea tablourilor

int vec [3]; vectorul


vectorul (poate)
(poate) conține
conține 33 elemente
elemente de
de tip
tip int
int

const int maxi=99; int vec[maxi]; vectorul


vectorul (poate)
(poate) conține
conține 99
99 elem.
elem.

float vec [99] ; vectorul


vectorul (poate)
(poate) conține
conține 99
99 elem
elem de
de tip
tip float
float

char vec [3] ; vectorul


vectorul (poate)
(poate) conține
conține 33 elemente
elemente de
de tip
tip char
char

int sir[3*3+2] ; vectorul


vectorul “sir”(poate)
“sir”(poate) conține
conține 11
11 elemente
elemente de
de tip
tip intreg
intreg

int a[99], b[99] ; au


au fost
fost declarați
declarați doi
doi vectori
vectori a,
a, bb
Tablouri unidimensionale
Exemple incorecte de declarare pentru
că :

integer vec [99] ; tipul


tipul integer
integer nu
nu ee definit
definit in
in C++
C++

float vec [max] ; “max”


“max” este
este declarat
declarat ca
ca variabilă
variabilă

char vec 1 [3*9] ; în


în nume
nume există
există caracterul
caracterul “spațiu”
“spațiu”

int char[99] ; s-a


s-a folosit
folosit ca
ca nume
nume cuvântul
cuvântul rezervat
rezervat “char”
“char”

int char[3] ={“eroare”} ; lungimea


lungimea declarata
declarata este
este mai
mai mare
mare ca
ca max[3]
max[3]
Tablouri unidimensionale

Inițializarea tablourilor

int vec [3]; vectorul


vectorul (poate)
(poate) conține
conține 33 elemente
elemente de
de tip
tip int
int

int vec [3] = {5, 6, 7}; vectorul


vectorul conține
conține elementele
elementele din
din acoladă
acoladă

float vec [ ] = {1.4, -2, 1.2e+2}; conținutul


conținutul este
este indicat
indicat în
în acoladă
acoladă

char vec [3] = {‘a’, ‘b’, ‘c’}; vectorul


vectorul conține
conține caracterele
caracterele a,
a, bb ,c
,c

char sir[ ]={“vector”} ; vectorul


vectorul “sir”
“sir” conține
conține 66 elemente
elemente de
de tip
tip char
char

char sir[2]={char(97), char(98)} ; vectorul


vectorul conține
conține caracterele
caracterele a,
a, bb
Tablouri unidimensionale
Accesul la elementele
tabloului :

Se folosește numele tabloului urmat de indicele (numărul de ordine)


elementului referit, înscris între paranteze pătrate. Ex. nume[indice]

int V[4] = {12, 23, 34, 45}; 12 23 34 45

Referirea la elemente V[0] V[1] V[2] V[3]

Primul element din vector are numărul de ordine (indicele) zero !


Astfel, elementul cu număr de ordine 0 din vector este 12, elementul al 2-lea
este 23 și elementul 45 este al 4-lea element din vector (are indicele 3).
Tablouri unidimensionale

Operații posibile

Inițializarea (generarea) tabloului unidimensional


Mememorarea și afișarea elementelor unui tablou
Parcurgerea și căutarea elementelor memorate în tablou
Prelucrarea elementelor tabloului (sume,
(sume, medii
medii ,, căutări,
căutări, maxime,
maxime, verificări)
verificări)

Ștergerea sau adăugarea unui element din tablou


Sortarea elementelor unui tablou
Interclasarea (concatinarea) a doi vectori sortați anterior
Tablouri unidimensionale

Generarea tabloului #include<iostream.h>


int main()
{const int maxi=99;
int vec[maxi], i, n;
• Vectorul a fost declarat ca având lungimea “max”. do { cout<<"\nNr. elemente = ";
• “max” a fost declarat ca o constantă având valoarea 99 cin>>n;
• Numărul de elemente “n” al vectorului se citește repetat în }
instrucțiunea do – while atâta timp cât valoarea citită este mai while (n>99);
mare ca 99 for ( i=0; i<n; i++) vec[i]=i;
• În repetiția for, i se atribuie fiecărui element al vectorului }
valoarea i, astfel încât vectorul va avea forma :
0,1, 2, 3 ,4 ,..., n-1
Tablouri unidimensionale
#include<iostream.h>
Crearea și afișarea tabloului
void main()
{ int vec[99], i, n;

do { cout<<"\nNr. elemente = ";


• Numărul “n” de elemente al vectorului se citește de la tastatură cin>>n; }
în mod repetat atâta timp cât numărul citit este mai mare ca 99 while (n>99);
• În repetiția for, se citește de la tastatură valoarea fiecărui
element al vectorului (citirea se face simultan cu memorarea în for ( i=0; i<n; i++)
vector) { cout<<"\nElementul = ";
• Afișarea se face în interiorul structurii repetitive “for”, între cin>>vec[i];
elementele vectorului fiind un spațiu liber (cout<<vec[i]<<" “;) }
cout<<"\nVectorul este : ";
for (i=0; i<n; i++) cout<<vec[i]<<" ";
}
Tablouri unidimensionale
#include<iostream.h>
Căutarea unui element int main()
{ int vec[99], i, n, este=0, k, poz;
• Numărul “n” de elemente al vectorului se citește de la cout<<"\nNr. elemente = ";
cin>>n;
tastatură
• În repetiția for, se citește de la tastatură valoarea fiecărui for ( i=0;i<n;i++)
element al vectorului (citirea se face simultan cu memorarea { cout<<"\nElementul = ";
în vector) cin>>vec[i]; }
• Pentru căutarea elementului “k” se parcurge vectorul și cout<<"Cautam elementul : ";
fiecare element al său se compară dacă este egal cu “k”. cin>>k;
for (i=0;i<n;i++)
• Dacă se găsește o egalitate, variabila “este” se modifică din
if (vec[i]==k) { poz=i; este=1; }
0 în 1 și variabila “poz” memorează valoarea lui “i” (unde a if (este == 1)
fost găsit elementul). cout<<“Gasit pe pozitia "<<poz;
• Afișarea se face funcție de “este” . else cout<<k<<“ nu e in vector";
}
Tablouri unidimensionale

Sume în tablou
#include<iostream.h>
int main()
• Variabila “sum” este inițializată cu 0 { int vec[99], i, n, sum=0;
• În repetiția do-while, se citește numărul de elemente “n”
do { cout<<"\nNr. elemente = ";
până când acesea este mai mic ca 99 cin>>n; }
• Simultan cu citirea elementelor vectorului (în repetiția while (n>99);
“for”) suma se incrementează cu valoarea elementului de for ( i=0;i<n;i++)
vector citit adică altfel scris : suma = suma + vec[i] { cout<<"\nElementul = ";
• La terminarea repetiției, suma elementelor citite este cin>>vec[i];
afișată sum+=vec[i]; }
cout<<"\nSuma elementelor = "<<sum;
}
Tablouri unidimensionale
#include<iostream.h>
Numărarea unor elemente
int main()
{ int vec[99], i, n, par=0;
• Variabila “par” este inițializată cu 0. Ea va număra
câte elemente sunt pare do { cout<<"\nNr. elemente = ";
• În repetiția do-while, se citește numărul de elemente cin>>n; }
“n” până când acesta este mai mic ca 99 while (n>99);
for ( i=0;i<n;i++)
• După memorarea elementelor, parcurgem vectorul (cu
{ cout<<"\nElementul = ";
repetiția“for”) și comparăm pentru fiecare element dacă cin>>vec[i]; }
restul împărțirii lui la 2 este 0. (vec[i] % 2 == 0). for (i=0; i<n; i++)
• Dacă da, (restul = 0) atunci înseamnă că elementul if (vec[i]%2 == 0) par++;
este par și contorul “par” crește cu o unitate. cout<<"\nElem. pare = "<<par;
• Număr impare = total – par cout<<"Elem. impare = "<<n-par;
}
Tablouri unidimensionale
Determinare min, max #include<iostream.h>
int main()
{ int i, n, max, min;
cout<<"\nNr. elemente = ";
• Variabilele “min” și “max” sunt inițializate cu valoarea cin>>n;
primului element de vector “vec[0]”. int vec[n];
• După memorarea elementelor, parcurgem vectorul (cu for ( i=0; i<n; i++) {
repetiția“for”) cout<<"\nElementul = "
• Comparăm pentru fiecare element dacă este mai mic ca cin>>vec[i];
}
“min”. Dacă da, atunci acesta devine “min” min=vec[i]) max = min = vec[0];
• Comparăm și dacă este mai mare ca “max”. Dacă dacă da, for (i=0; i<n; i++)
acestuia i se atribuie valoarea lui “max” (max=vec[i]). { if (vec[i]>max) max = vec[i];
• La terminarea parcurgerii, valorile “min” și “max” sunt if (vec[i]<min) min = vec[i]; }
afișate cout<<"\nElement max = "<<max;
cout<<"\nElement min = "<<min;
}
Tablouri unidimensionale
Ștergere element din poz. k #include<iostream.h>
int main()
{ int vec[9]={1,2,3,4,5,6,7,8,9};
int i=0, capat, k;
• Vectorul este afișat folosind instrucțiunea “while” în mod while (vec[i]!=NULL)
repetat, atâta timp cât elementul de afișat este diferit de NULL { cout<<vec[i]<<" ";
• Variabila “capat” reține lungimea vectorului inițial, fiind “i” i++; }
• Elementul se șterge de pe poziția k capat=i;
• Fiecare element, începând de la poziția k, până la “capat” ia cout<<"Pozitia din care stergem = ";
valoarea următorului element : vec[i]=vec[i+1] cin>>k;
• Prin suprascriere, elementele de la capăt până pe poziția k for (i=k; i<capat; i++) vec[i]=vec[i+1];
sunt deplasate spre stânga. capat--;
• Lungimea vectorului scade cu 1 (capat--) for (i=0; i<capat; i++)
cout<<“ ”<<vec[i] ;
}
Tablouri unidimensionale
#include<iostream.h>
Interclasare vectori (sortați) void main()
{ int a[9]={3,5,9,19,99}, b[9]={1,7,33};
int c[99], i, j, n=5, m=3, k;
• Intreclasarea presupune reuniunea a doi vectori i=0; j=0; k=0;
care au fost sortați anterior. while ((i<n) && (j<m))
• Algoritmul parcurge cei doi vectori sursă a și b și { if (a[i]<b[j]) { c[k]=a[i]; i++; k++;}
compară elementele. else { c[k]=b[j]; j++; k++; }
• Elementul determinat a avea valoarea cea mai }
mică din sursă este memorat în vectorul destinație c if (i<n)
• Operația de comparare și memorare în destinație while (i<n) {
continuă până când se ajunge la capătul unuia dintre c[k]=a[i]; k++; i++; }
cele două surse else
• Elementele rămase în celălalt vector sunt while (j<m) {
memorate la capătul vectorului destinație c c[k]=b[i]; k++; j++; }
for (i=0;i<k;i++)
cout<<" "<<c[i];
}

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