Ce este un tablou unidimensional?
Tabloul unidimensional este o structura de date careia i se atribuie un nume. Este format dintr-o colectie de elemente de acelasi tip, asezate continuu in memorie. Elementele pot fi accesate individual prin indici. Toate elementele au un predecesor (cu exceptia primului element) si un succesor (cu exceptia ultimului element)
Cum declar un tablou unidimensional?
Pentru a declara un tablou unidimensional ai nevoie de 3 proprietati: tipul, numele si dimensiunea acestuia. Cateva exemple:
- int V[25]; // un tablou ce retine 25 de numere intregi
- char s[40]; // un tablou ce retine 40 de caractere
- float x[30]; // un tablou ce retine 30 de numere reale
Un element al unui tablou poate fi utilizat ca orice alta variabila. Ca sa accesezi un element dintr-un tablou trebuie sa faci referire la indicele acestuia, trecut intre paranteze drepte. Un aspect important este faptul ca poti efectua operatii doar asupra unui singur element, nu poti modifica tot tabloul deodata.
Tablou unidimensional = vector?
O greseala elementara ce o accepta toti profesorii este urmatoarea: permit elevilor sa numeasca aceasta structura de date “vector” – insa acest lucru este total gresit. Aceasta structura de date – tradusa corect in limba romana ar fi “multime”.
Deoarece o data declarat un tablou unidimensional – nu mai poti modifica numarul total de elemente ce este stocat in acesta. Pe cand intr-un vector, numarul total de elemente variaza pe parcursul rularii programului.
Initializarea tablourilor unidimensionale
Tablourile, la fel ca si variabilele pot fi initializate in trei moduri:
- Prin introducerea datelor de la tastatura
- Prin declararea acestuia global – toate elementele vor fi zero
- Imediat dupa declararea acestora
(vezi in video cum am intializat pe rand tablourile)
Accesul elementelor dintr-un tablou unidimensional
- Accesul fiecarui element al tabloului se face prin numele acestuia urmat intre paranteze drepte [ ] de indicele sau (adica pozitia pe care acesta o ocupa in tablou)
- In limbajul C++ , indicii tablourilor incep numaratoarea de la 0 si se termina la N – 1 (unde N este numarul total de elemente)
Primul element din vector are indicele zero. (Unii profesori invata elevii la clasa ca numaratoarea incepe de la 1 – DON’T DO THAT).
Inserarea si stergerea elementelor dintr-un “vector”
Adaugarea unui element nou
Pentru a adauga un element intr-un tablou unidimensional, tot ceea ce trebuie sa facem este sa marim dimensiunea logica n a vectorului, si sa memoram noul element in casuta ce am eliberat-o.
int V[10] = {4, 2, 1, 6}; int n = 4; V[n] = numar_nou; n++; //Prescurtat: V[n++] = numar_nou;
Inserarea unui element nou
Presupunand ca avem un sir “V” cu “n” elemente, si dorim sa inseram elementul “numar_nou” pe pozitia “p”.
In imaginea de mai sus, am inserat elementul “13” pe pozitia 3. Cum am procedat?
- Am marit mai intai dimensiunea logica (n) cu un element
- Am parcurs vectorul de la coada “si am tras” toate elementele dupa indicele 3 cu o pozitie la dreapta
- Am inlocuit valoarea din V[3]
int V[10] = {4, 2, 1, 6, 9}; int n = 5; n++; //Marim numarul total de elemente for(int i = n - 1 ; i > p ; i--) V[i] = V[i - 1]; //Mutam fiecare element intre p si capat la dreapta V[p] = numar_nou; //Inlocuim
Stergerea unui element
Presupunand ca avem un sir “V” cu “n” elemente, si dorim sa stergem elementul de pe pozitia “p”.
In imaginea de mai sus am sters elementul de pe pozitia 2. Cum am procedat?
- Am parcurs vectorul incepand de pe pozitia “p”
- Am tras toate elementele la stanga
- Am micsorat n cu o unitate
int V[10] = {4, 2, 1, 6, 9}; int n = 5; for(int i = p ; i < n - 1; i ++) // Parcurgem de la p V[i] = V[i+1]; // Tragem toate elementele la stanga n--; //Micsoram n cu o unitate
Tablouri unidimensionale – probleme rezolvate
1. Se citește un vector cu n elemente, numere naturale. Să se afișeze suma elementelor din vector.
int suma = 0; for(int i = 0; i < n; i++) suma = suma + V[i]; cout << suma;
2. Se citește un vector cu n elemente, numere naturale. Să se afișeze elementul maxim, si de cate ori apare acesta in vector.
int maxim = -9999999; int aparitii = 0; for(int i = 0; i < n; i++) { if(V[i] > maxim) maxim = V[i]; } for(int i = 0; i < n; i++) { if(V[i] == maxim) aparitii++; } cout << "Elementul maxim este " << maxim << " si apare de " << aparitii << " ori.";
3. Se citesc doi vectori cu n si m elemente. Sa se afiseze intersectia celor doua multimi.
#include <iostream> using namespace std; int main() { int V1[10] = {4, 2, 1, 9, 6, 8}; int n = 6; int V2[10] = {13, 4, 9, 5, 7}; int m = 5; cout << "Intersectia celor doua multimi este: "; for(int i = 0; i < n; i++) // Parcurgem fiecare element din vectrul V1 { for(int j = 0; j < m; j++) // Pentru fiecare element din vector V1, parcurgem vectorul V2 { if(V1[i] == V2[j]) cout << V1[i] << " "; } } return 0; }