Diferență între revizuiri ale paginii „PC Laborator 7”
De la WikiLabs
Jump to navigationJump to searchLinia 64: | Linia 64: | ||
<div class="regula">'''<font color="red"> Observatie:</font>''' ''Se poate ingnora poziția zero,însă daca avem un vector de 100 elemente declararea uzuală ar fi int v[100];, gândim valorile de la v[0] la v[99]. Daca folosim numărarea de la 1, vom avea doar 99 de locații de memorie disponibile pentru cele 100 de valori. În acest caz declararea corecta ar fi int v[101];.''</div> | <div class="regula">'''<font color="red"> Observatie:</font>''' ''Se poate ingnora poziția zero,însă daca avem un vector de 100 elemente declararea uzuală ar fi int v[100];, gândim valorile de la v[0] la v[99]. Daca folosim numărarea de la 1, vom avea doar 99 de locații de memorie disponibile pentru cele 100 de valori. În acest caz declararea corecta ar fi int v[101];.''</div> | ||
+ | |||
+ | ==== Modul de adresare ==== | ||
+ | |||
+ | {| class="wikitable" | ||
+ | ! Indici | ||
+ | ! 0 | ||
+ | ! 1 | ||
+ | ! 2 | ||
+ | ! 3 | ||
+ | |- | ||
+ | | colspan="5" | | ||
+ | |- | ||
+ | | Valoare | ||
+ | | 12 | ||
+ | | 33 | ||
+ | | 120 | ||
+ | | 460 | ||
+ | |- | ||
+ | | Adresa | ||
+ | | N | ||
+ | | N+1 | ||
+ | | N+2 | ||
+ | | N+3 | ||
+ | |} | ||
+ | <syntaxhighlight lang="C"> | ||
+ | printf("%d",v); // v stochează adresa primul element adică N | ||
+ | printf("%d",v[1]); // reprezintă valoarea din a 2a locație de memorie a vectoritului v adică 33 | ||
+ | printf("%d",&v[2]); // operatorul & returnează adresa din memorie a variabilei ce urmează adică N+2 | ||
+ | </syntaxhighlight> | ||
=== Matrici === | === Matrici === |
Versiunea de la data 25 septembrie 2015 18:58
Obiectiv
La încheierea acestui laborator studentul va fi capabil:
- să înteleagă modul de utilizare a tablourilor de memorie
- să declare şi să iniţializeze vectori/matrici
- să implementeze algoritmi simpli în lucru cu vectori pentru rezolvarea diverselor probleme
Tablouri
Tablou de memorie este o colecţie de date stocate în locaţii succesive din memorie. Toate elementele acestuia au acelaşi tip de dată numit de obicei tip de bază.
Tablourile pot fi :
- vectori (tablouri unidimensionale): șiruri de valori
- matrici (tablouri bidimensionale): catalogul cu note
- multidimensionale: pixeli unui imagini în timp
Vectori
Un vector reprezintă o colecție de date de acelaşi tip reprezentate sub forma unei linii sau coloane.
Declarația unei variabile de tip vector
<tip_elemente> <nume_vector>[<număr_maxim_elemente>];
Exemplul 1
int v[10]; /* astfel se alocă 10 locații de memorie consecutive de tip int, ce vor corespunde valorilor vectorului v */
float nume_vector[100]; /* vector de tip float cu 100 elemente */
Observatie: Vectori sunt denumiți statici (static arrays) deoarece numărul de elemente şi spaţiul de memorie ocupat este constant în timpul compilării. (număr_maxim_elemente trebuie să fie o constantă).
#define MAX 100
...
unsigned long nume_vector[MAX]
Observatie: Numărătoarea elementelor începe de la 0.
int v[10]; // primul element va fi v[0],iar ultimul element v[9]
Vectorii se pot iniţializa cu valori constante, în acest caz, compilatorul care va determina dimensiunea vectorului din numărul elementelor din listă.
Exemplul 2
int v[10] = {1, 5, 6, 8, 6, 10, 22, 32, 34, 13}; // Toate elemente sunt initializate
float nume_vector[] = {1.2, 2.2, 6.1, -9.3}; // Compilatorul determina dimensiunea vectorului=4
int vect[1000] = {0, 1, 2, 3, 5}; // Sunt initializate doar primele 5 elemente
Parcurgerea vectorilor
Cum deja am discutat prima poziție dintr-un vector este v[0]. Presupunem un vector are N elemente, constatăm că 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]. Acest lucru este posibil prin:
for(i=0; i < N; i++)
// instrucțiune v[i];
Observatie: Se poate ingnora poziția zero,însă daca avem un vector de 100 elemente declararea uzuală ar fi int v[100];, gândim valorile de la v[0] la v[99]. Daca folosim numărarea de la 1, vom avea doar 99 de locații de memorie disponibile pentru cele 100 de valori. În acest caz declararea corecta ar fi int v[101];.
Modul de adresare
Indici | 0 | 1 | 2 | 3 |
---|---|---|---|---|
Valoare | 12 | 33 | 120 | 460 |
Adresa | N | N+1 | N+2 | N+3 |
printf("%d",v); // v stochează adresa primul element adică N
printf("%d",v[1]); // reprezintă valoarea din a 2a locație de memorie a vectoritului v adică 33
printf("%d",&v[2]); // operatorul & returnează adresa din memorie a variabilei ce urmează adică N+2