Extras din seminar
Masivele sunt structuri de date omogene cu un numar finit si cunoscut de elemente, ce ocupa un spatiu contiguu de memorie. Structurile de date de tip masiv reprezinta instrumente de stocare a datelor sub forma de zone compacte si continue din memoria calculatorului.
Un masiv este caracterizat de urmatoarele elemente:
- numele;
- tipul de data asociat;
- numarul de dimensiuni;
- numarul de elemente pentru fiecare dimensiune.
Masivele sunt:
- unidimensionale;
- bidimensionale;
- multidimensionale.
Deoarece elementele unui masiv sunt omogene din punct de vedere al tipului lor, dimensiunea in octeti a unui masiv este data de relatia:
dim_masiv = nr_elem * dim_elem
1. Alocarea de memorie
Se efectueaza static prin instructiuni de forma:
tip nume_masiv[dim_1];
tip nume_masiv[dim_1][dim_2];
tip nume_masiv[dim_1][dim_2][dim_3];
tip nume_masiv[dim_1][dim_2][dim_3]...[dim_n];
Lungimea zonei de memorie alocata este:
L=lg(tip)*dim_1*dim_2*dim_3*....*dim_n
Pentru definirea: float alfa[10][14]; L(alfa)=lg(float)*10 * 14= 4*10*14=560 baiti.
2. Masive unidimensionale (vectori)
Vectorii sunt masive unidimensionale. In C++ vectorii se declara folosind sintaxa:
tip nume[n];
unde:
- tip – tipul de data folosit; poate fi unul din tipurile de baza (int, float, char, …) sau un tip definit de utilizator (articole, obiecte);
- nume – numele prin care va fi referit vectorul;
- n – numarul de elemente ale vectorului.
In varianta statica, un masiv unidimensional v cu maxim 100 de elemente se defineste astfel:
int v[100];
In varianta dinamica, definirea este realizata printr-un pointer la masivul unidimensional v:
int *v;
Exemple de declaratii:
// vector de 100 valori intregi
int vanzari[100];
// vector de 15 valori reale
float temperaturi[15];
Numerotarea elementelor incepe cu 0, de aceea nu trebuie sa se confunde declaratia de masiv cu adresarea indexata a elementului:
int v[100]; //declaratia unui vector cu 100 componente;
v[100]=10; //atribuire incorecta, deoarece nu exista elementul cu nr. 100
Alocarea zonei de memorie aferenta masivului unidimensional v cu n elemente de tip int se face astfel:
int *v = (int*)malloc(n * sizeof(int));
Memorarea vectorilor se face intr-un spatiu continuu de memorie. Numele vectorului este de fapt un pointer catre adresa primului element. Pentru o declaratie de forma:
int v[5]; reprezentarea in memoria interna este:
Dimensiunea totala a vectorului este calculata ca produs intre numarul de elemente si dimensiunea unui element. Initializarea vectorului se poate face la declarare printr-o constructie de forma:
tip nume[ ] = {lista_valori};
Se observa ca, in acest caz, nu este necesara precizarea numarului de elemente. Acesta va fi dedus automat de compilator din dimensiunea listei cu care se face initializarea.
In cazul in care numarul de elemente precizat este mai mare decat numarul de elemente din lista se va realiza o initializare partiala a vectorului.
Preview document
Conținut arhivă zip
- Masive - Seminar
- ex1.cpp
- ex2.cpp
- ex3.cpp
- Seminar_2.doc