Analiza eficientei prelucrarii structurilor de date cu pointeri

Imagine preview
(5/10 din 2 voturi)

Acest laborator prezinta Analiza eficientei prelucrarii structurilor de date cu pointeri.
Mai jos poate fi vizualizat un extras din document (aprox. 2 pagini).

Arhiva contine 1 fisier doc de 20 pagini .

Redactat in Republica Moldova

Iti recomandam sa te uiti bine pe extras si pe imaginile oferite iar daca este ceea ce-ti trebuie pentru documentarea ta, il poti descarca.

Fratele cel mare te iubeste, acest download este gratuit. Yupyy!

Domeniu: Calculatoare

Extras din document

Scopul lucrării: însuşirea tehnicilor de algoritmizare şi programare cu pointeri în prelucrarea structurilor complexe în TP şi C.

Obiectivele temei

1. De studiat şi însuşit materialul teoretic din lucrarea dată prin lansarea exerciţiilor la execuţie pentru analiza şi evidenţierea esenţialului prelucrării structurilor de date cu pointeri în elaborarea modelelor soluţiei prin explicaţii, argumentări şi organigrame.

2. Să se recapituleze materialul teoretic din lucrările de lab. 5 (PC) din semestrul I şi să se analizeze algoritmii şi programele cu şi fără pointeri (declarări şi parcurgeri). Pentru aprofundarea înţelegerii să se dezvolte algoritmii şi programele cu pointeri pentru condiţiile problemelor din Anexe şi să se elaboreze scenariile succinte de soluţionare prin pointeri cu calculele de verificare şi explicaţii. Rularea programelor în limbajul C cu afişarea tuturor variabilor de intrare, intermediare şi finale.

3. În raport să fie expuse toate programele şi calculele efectuate. Să se analizeze tehnica programării eficiente cu pointeri în baza exerciţiilor şi variantelor problemelor efectuate pentru diverse situaţii cu argumentări.

Fiecare temă conţine două probleme care vor fi rezolvare cu mijloacele limbajului C (diferite modele de date şi obiecte). Temele se iau în conformitate compartimentele propuse.

Lucrarea se consideră efecutată după ce studenţii demonstrează profesorului funcţionarea corectă a programelor la calculator şi apoi prezintă darea de seamă cu analiza rezultatelor. Darea de seamă include: foaia de titlu şi pentru fiecare lucrare să se descrie algoritmul de rezolvare a problemei, listingul programului, dotat cu comentariile de rigoare, Datele de intrare şi rezultatele să fie folosite în simularea numerică şi să fie analizate în comparaţie cu rezultatele obţinute, concluzia şi bibliografia studiată.

Consideraţiile teoretice şi exemple

1.1. Noţiunea de pointer

Un pointer este o variabilă care reţine o adresă de memorie.

În C, un pointer poate reprezenta:

1. adresa unor date de un anumit tip

tip elementar, structură, şir de caractere etc.

operațiile cu pointeri sunt determinate de dimensiunea tipului de date

2. adresa unei funcții

adresa la care punctul curent de execuţie va sări, în cazul în care acea funcţie este apelată

3. adresa unei adrese de memorie

acest tip de pointer poate fi redus la prima situaţie

4. adresa unei zone cu conţinut necunoscut (pointer către void)

1.1.2 Variabile statice şi variabile dinamice.

Variabilele pot fi statice sau dinamice. Cele statice au o zonă de memorie bine definită. Structura, locul, tipul acestei zone nu poate fi schimbată în procesul execuţiei programului. Accesul la variabilele statice se face direct, după nume. Structurile statice de date au un număr fix de elemente, care nu poate fi modificat. Alocarea memoriei se face într-un spaţiu strict determinat al memoriei, care permite adresarea directă.

O altă categorie de variabile, accesibile în limbaje este cea dinamică. Pentru acest tip de variabile poate fi modificat volumul de memorie rezervat, ceea ce face mai flexibilă alocarea memoriei în procesul de lucru al programului. Structurile dinamice pot acumula elemente în procesul de funcţionare al programului, sau pot lichida elementele ce au devenit neutilizabile. Accesul la aceste variabile şi declararea lor se face în mod diferit de cel al variabilelor statice. Accesarea (definirea) este indirectă, prin intermediul unui tip mediator de variabile – tipul referinţă.

Variabile de tip referinţă conţin referiri (adresări indirecte) la variabilele dinamice. Referirea se realizează prin memorarea în variabila referinţă a adresei unde e stocată variabila dinamică.

Pentru variabilele tip referinţă se alocă un spaţiu de memorie de 4 octeţi, care conţin adresa variabilei dinamice. Memoria pentru variabilele dinamice se alocă dintr-o zonă specială, care foloseşte adresarea indirectă, numită heap. Această zonă este diferită de zona pentru variabilele statice.

Variabilele dinamice ocupă un spaţiu de memorie în corespundere cu tipul lor: întreg (int), float (real), şiruri de caractere (string) etc.

• Zona de memorie este o succesiune de 1 , 2 , 4 , 8 sau mai multe locaţii ( octeţi ) consecutive de memorie. Adresa unei zone de memorie este numarul de ordine a primei locatii de memorie ( cea mai din stinga ) . Sunt doua mari categorii de pointeri : pointeri catre variabile si pointeri catre functii .

Mulţimea valorilor variabilelor tip referinţă este formată dintr-o mulţime de adrese, fiecare din ele identificînd o variabilă dinamică. Mulţimea de valori mai e completată prin valoarea NULL, care nu conţine nici o adresă.

1.2 DECLARAREA POINTERILOR

Ca si in cazul oricaror tipuri de variabile si pointerii trebuie declarati. Ei se declara la fel, cu deosebirea ca numele pointerului este precedat de caracterul *.

Declaraţia de pointer este: tip *nume; si prin aceasta se precizeaza ca nume este un pointer catre o zona de memorie care contine valoarea unei variabile de tipul tip.

In declaratia de mai sus tip poate fi : int, unsigned, char, float, double etc. sau un sablon de structura. Deci constructia tip * introduce un nou tip de date anume pointer la tip.

In afara de tipul int, long, float etc., exista si un pointer special, anume de tip void (mai precis fara tip). care se refera la o zona de memorie ce poate contine orice tip de variabila.

Exemple

long *pl ; /* pointer la long; */

char *pc; /* pointer la char; */

double *x; /* pointer la double; */

void *v ; /* pointer fara tip ; */

int *pi[ 8 ]; /* sir de 8 pointeri la int; */

unsigned *pm [ 5 ][ 2 ]; /*masiv bidimensional de pointer la unsigned. */

int *p; /* pointeri la int; */

*p++ operatorul ++ incrementeaza pointerul

(*p)++ operatorul ++ incrementeaza continutul pointerului

*++p operatorul ++ incrementeaza pointerul

++(*p) operatorul ++ incrementeaza continutul pointerului

Dimensiunea unui pointer depinde de arhitectura și sistemul de operare pe care a fost compilat programul. Dimensiunea unui pointer se determină cu sizeof(void *) și nu este în mod necesar egală cu dimensiunea unui tip de date întreg.

1.3 Operatori

Operatorul de referențiere

& - apare în fața variabilei asupra căreia acționează

Este aplicat unei variabile de un anumit tip de date și are funcția de a obține adresa de memorie a variabilei respective.

Operatorul de dereferențiere

* - apare în fața variabilei asupra căreia acționează

Este aplicat unei variabile de tip pointer și are funcția de a obține valoarea stocată la adresa respectivă.

Declararea unui pointer nu înseamnă alocarea unei zone de memorie în care pot fi stocate date. Un pointer este tot un tip de date, a cărui valoare este un număr ce reprezintă o adresă de memorie.

Pentru ca dereferențierea să aibă loc cu succes, pointer-ul trebuie să indice o adresă de memorie validă, la care programul are acces. Această adresă poate fi adresa unei variabile declarate în prealabil sau adresa unui bloc de memorie alocat dinamic (după cum vom vedea mai departe).

Este indicată inițializarea pointerilor cu constanta NULL, compatibilă cu orice tip de pointer, care indica, prin convenție, un pointer neinițializat.

Fisiere in arhiva (1):

  • Analiza eficientei prelucrarii structurilor de date cu pointeri.doc

Alte informatii

Universitatea Tehnică a Moldovei FCIM Catedra Informatica Aplicativă