Diferență între revizuiri ale paginii „PC Laborator 7”

De la WikiLabs
Jump to navigationJump to search
Linia 100: Linia 100:
 
<syntaxhighlight lang="C">
 
<syntaxhighlight lang="C">
 
  int v[100], n, i; /* vectorul a are maxim 100 de intregi */
 
  int v[100], n, i; /* vectorul a are maxim 100 de intregi */
 
 
   scanf("%d", &n); /* citeste nr de elemente */
 
   scanf("%d", &n); /* citeste nr de elemente */
 
   
 
   

Versiunea de la data 25 septembrie 2015 19:06

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


Citirea vectorilor

 int v[100], n, i; /* vectorul a are maxim 100 de intregi */
   scanf("%d", &n); /* citeste nr de elemente */
 
 for (i = 0; i < n; i++) {
   scanf("%d", &v[i]); /* citire elemente */
  }
 
 for (i = 0; i < n; i++) {
   printf("%d ", v[i]); /* scrie elemente */
  }

Matrici