1.8. Variabile simple, tablouri si structuri

2018/12/21 in Programare in C

In programare utilizam alaturi de date constante si date variabile care isi schimba valorile in timpul executiei programului.

Daca la o data constanta ne putem referi folosind caracterele din compunerea ei, cel mai simplu mod de a ne referi la o data variabila este acela de a o denumi. Numele datei respective ne permite accesul la valoarea ei, precum si schimbarea valorii, daca este necesar.

In cazul in care o data nu are legatura cu alte date (de exemplu, de ordine), vom spune ca ea este o data izolata. Numele unei date izolate reprezinta o variabila simpla.

Unei date izolate ii corespunde un tip. In timpul executiei programului se pot schimba valorile unei date variabile, dar nu si tipul ei.

Corespondenta dintre numele unei date variabile si tipul ei se defineste printr-o declaratie.

Adesea, intr-un program este util sa consideram grupe de date. Gruparea datelor se poate face in mai multe moduri.

Gruparea datelor dupa tip

Un mod simplu de a grupa date este acela de a considera date de acelasi tip, in asa fel incat grupa respectiva sa formeze o multime ordonata de elemente la care sa ne putem referi folosind indici. O astfel de grupa se spune ca formeaza un tablou. Unui tablou i se da un nume. Tipul comun al elementelor unui tablou este si tipul tabloului respectiv. De exemplu, o multime ordonata de numere intregi reprezinta un tablou de tip intreg.

In cazul in care elementele care se grupeaza intr-un tablou sunt ele insele tablouri, vom avea nevoie de mai multi indici pentru a ne referi la ele. In cazul in care se utilizeaza un singur indice pentru a ne referi la elementele tabloului, spunem ca tabloul este unidimensional. Daca se folosesc n indici, se spune ca tabloul este n-dimensional.

Exemple simple de tablouri unidimensionale sunt vectorii care au componente de acelasi tip. Un vector de componente intregi este un tablou unidimensional de tip intreg.

O matrice de elemente intregi este un exemplu de tablou bidimensional de tip intreg.

Referirea la elementele unui tablou se face printr-o variabila cu indici.

O variabila cu indici se compune din numele tabloului urmat de valorile indicilor, fiecare indice fiind reprezentat printr-o expresie inclusa intre paranteze patrate.

Valoarea inferioara a indicilor este egala cu zero. De exemplu, daca vect este un tablou unidimensional de 10 elemente, atunci ne referim la elementele lui cu ajutorul variabilelor cu indici:

vect[0] primul element
vect[1] al doilea element
...
vect[9] ultimul element

Daca mat este un tablou bidimensional ce defineste o matrice de 3 linii si doua coloane fiecare, atunci elementele acestui tablou pot fi referite prin:

mat[0][0] mat[0][1] elementele primei linii
mat[1][0] mat[1][1] elementele celei de-a doua linii
mat[2][0] mat[2][1] elementele celei de-a treia linii

Gruparea datelor dupa relatii

Un alt mod de a grupa date are in vedere prezenta unor relatii intre datele care se grupeaza. In acest caz datele formeaaza o structura. Ele nu au neaparat acelasi tip.

Prin structura intelegem o multime ordonata de elemente "inrudite", ordonare definita de utilizator in vederea simplificarii utilizarii grupei de date respective.

Unei structuri i se ataseaza un nume. De asemenea se ataseaza cate un nume fiecarei componente ale unei structuri, nume care se utilizeaza la referirea componentelor respective.

Un exemplu de structura este data calendaristica. Aceasta este o grupa care se compune din trei date inrudite:

Aceste trei date nu neaparat au acelasi tip. De exemplu, ziua si anul pot fi de tip int, iar luna poate fi de tip nenumeric, daca ea se reprezinta prin denumire.

Un alt exemplu simplu de structura il reprezinta numerele complexe. Un numar complex este o multime ordonata de doua numere, fiecare de tip double. Primul numar reprezinta partea reala a numarului complex, al doilea partea lui imaginara.

Tipuri de date predefinite, tipuri utilizator

Structura, ca si variabilele simple si tablourile, corespunde si ea unui tip de data. Tipul unei structuri nu are nimic de a face cu tipurile componentelor sale. Ea este un tip nou, diferit de cele predefinite in limbaj. Un astfel de tip se spune ca este un tip definit de utilizator, sau mai scurt, tip utilizator. De exemplu, data calendaristica definita mai sus reprezinta un tip nou de date, diferit de cele predefinite. De asemenea, numerele complexe reprezentate prin structuri de perechi de numere flotante in dubla precizie definesc tipul complex.

Tipurile utilizator, dar si legatura dintre numele unei date structurate si tipul ei, se definesc printr-o declaratie.

In general, prin tip intelegem o multime de date impreuna cu operatiile care pot fi efectuate cu datele respective.

De exemplu, tipul int se defineste prin multimea numerelor intregi din intervalul [-32768, 32767] reprezentate prin complement fata de doi pe 16 biti, impreuna cu o serie de operatii, cum ar fi cele patru operatii aritmetice, operatii de comparatie, etc.

In cazul tipurilor predefinite sunt predefinite atat multimea si reprezentarea datelor respective, cat si operatiile cu aceste date.

In cazul tipurilor utilizator, multimea si reprezentarea datelor tipului respectiv se definesc de catre utilizator, prin intermediul constructiei struct. Utlizatorul defineste operatiile cu aceste date prin intermediul unor functii. De exemplu, in cazul tipului complex se defineste reprezentarea numerelor complexe printr-o constructie struct. Operatiile cu numere complexe se pot realiza apeland functii corespunzatoare.

In limbajul C nu se stabileste nicio legatura intre reprezentarea datelor de tip utilizator si functiile care definesc operatiile cu datele respective. In C++, acest lucru se realizeaza prin introducerea notiunii de clasa. Tipurile definite cu ajutorul claselor se numesc tipuri abstracte de date.

In cazul unui tip abstract de date se asigura legatura dintre reprezentarile datelor si functiile care definesc operatiile asupra lor. Ca rezultat al acestei legaturi se obtine protectia datelor, utilizatorul neavand acces direct la ele decat prin intermediul functiilor definite in acest scop.

1.9. Declaratia de variabila simpla