Ingineria Sistemelor de Programe - Capitolul 2

Curs
9.3/10 (3 voturi)
Conține 1 fișier: doc
Pagini : 27 în total
Cuvinte : 9965
Mărime: 174.57KB (arhivat)
Publicat de: Demetra Simon
Puncte necesare: 0
Profesor îndrumător / Prezentat Profesorului: Mihail Buricea

Extras din curs

Capitolul II

Structuri complexe de date in ingineria programarii

1. Generalitati

Variabilele utilizate in Limbajul C/C++, din punct de vedere al alocarii spatiului de memorie necesar sunt de doua feluri: variabile alocate in mod static si variabile alocate in mod dinamic. Variabilele alocate in mod static (tipurile intregi, reale, caracter, tipurile tablou de intregi, reale si caracter etc.) sunt alocate in zona de memorie a proramului, chiar in faza de compilare.

Structura, tipul si locul ocupat in memorie nu se pot modifica pe parcursul executarii programului. De asemenea, la declararea lor, toate caracteristicile trebuie sa fie bine precizate. Variabilele dinamice ofera posibilitatea alocarii memoriei aferente variabilelor referite de variabilele dinamice pe parcursul executiei programului (fiind cunoscuta sub numele de alocare dinamica), in functie de necesitati, permitand totodata eliberarea memoriei ocupate de acestea dupa ce nu mai sunt necesare in continuare.

Variabilele dinamice trebuie sa aiba tipul bine definit, si sunt identificate prin variabile de tip pointeri spre anumite tipuri de variabile. Alocarea dinamica este mijlocul prin care un program poate obtine memorie pe parcursul executiei sale intr-o zona de memorie speciala, diferita de zona de memoria a programului, numita zona heap. Se cunoaste ca declarararea unui tip de data nu necesita alocarea de memorie. Alocarea memoriei aferente se face in timpul compilarii programului in momentul intalnirii declaratiei unei variabile sau constante de un anumit timp, lungimea zonei alocate fiind calculata corespunzator tipului asociat variabilei. Un asemenea mod de alocare este specific variabilelor alocate in mod static.

In timpul compilarii, la intalnirea unei variabile alocate dinamic, se va aloca o zona de memorie de patru bytes care, dupa alocarea dinamica pe parcursul executarii programului, va contine adresa de memorie din zona heap a primei locatii de memorie libera unde se va aloca spatiul necesar pentru variabila referita sau adresata de variabila dinamica.

Dupa cum s-a precizat, alocarea dinamica a spatiului de memorie din zona heap pentru variabila referita de variabila dinamica (pointer catre variabila referita) se face cu functia malloc() dupa cum urmeaza:

tip_variabila_referita *ptr_variabila_reterita;

ptr_variabila_reterita = malloc(size_t numar_de_octeti);

unde:

- ptr_variabila_reterita – este un pointer (variabila dinamica) catre o variabila de un tip precizat de tip_variabila_referita.

- tip_variabila_referita – este tipul variabilei referita de variabila de tip pointer si poate fi un tip standard sau definit de utilizator.

- numar_de_octeti – este numarul de octeti precizat sau calculat ai zonei de memorie din zona heap, alocata dinamic, unde se va memora variabila referita de variabila dinamica (ptr_variabila_reterita).

Eliberarea spatiului de memorie ocupat de variabila referita prin variabila dinamica (ptr_variabila_reterita) se face cu functia free() cu sintaxa:

free(ptr_variabila_reterita).

2. Declararea si utilizarea listelor in ingineria programarii in C/C++.

In practica programarii calculatoarelor, de multe ori, apare necesitatea organizarii informatiilor de prelucrat sub forma unor liste. Pot fi date nenumarate exemple:lista produselor dintr-un magazin, lista persoanelor dintr-o asociatie de locatari, lista studentilor admisi la facultate etc. O lista, ca si un fisier, contine o multime de componente de acelasi tip. In general o componenta a unei liste contine, la randul sau, alte informatii (date) de acelasi tip sau de tipuri diferite. De exemplu, lista studentilor admisi la facultate contine urmatoarele informatii (date):cod student, nume, prenume, nota 1, nota 2, nota 3 si media. Din acest exemplu se constata ca, in majoritatea cazurilor, un element al listei trebuie reprezentat sub forma unui tip structurat de date (struct, tablou ).

In practica declararii si utilizarii listelor se pot consemna urmatoarele operatii: crearea listelor, actualizarea listelor (adaugarea, modificarea sau stergerea de componente) si exploatarea listelor (cautarea anumitor componente, listarea, calcule cu datele componentelor si furnizarea rezultatelor acestor calcule etc)

Cea mai simpla metoda de reprezentare a unei liste este sub forma unui tablou unidimensional (vector, sir) asa cum s-a vazut la datele de tip tablou. Solutia aceasta este convenabila atunci cand numarul componentelor din lista este fix si cunoscut apriori, sau cand se poate preciza numarul maxim de componente din lista si cand acesta are o valoare rezonabila. Sa presupunem, ca din lista studentilor admisi, dorim sa creem o lista cu studentii bursieri si o lista cu studentii nebursieri. Daca se noteaza cu N numarul studentilor dintr-un an de studiu rezulta ca dimensiunea maxima a fiecarei din aceste liste este N. Acest lucru inseamna ca trebuie rezervat spatiu de memorie pentru 2*N componente. Dar, tot timpul numarul studentilor bursieri + numarul studentilor nebursieri = N, prin urmare s-a alocat de 2 ori mai mult spatiu de memorie decat era necesar. Mai mult, inserarea unei componente noi in lista presupune deplasarea tuturor componentelor tabloului aflate dupa locul in care dorim sa inseram o noua componenta, spre dreapta, iar stergerea unei componente (scoaterea din lista) presupune deplasarea la stanga cu o pozitie a tuturor componentelor tabloului aflate dupa componenta care s-a scos, pentru ocuparea locului ramas gol.

Liste simplu inlantuite in Limbajul C/C++.

Eliminarea incovenientelor semnalate mai sus se poate face prin implemantarea listelor cu ajutorul structurilor de date dinamice. In aceste tipuri de liste componentele acestora se pot aloca in zone necontinue de memorie realizandu-se inlantuirea acestora printr-un sistem de adrese ca in exemplu urmator:

struct tipstudent

{

int matricol;

char nume[15]

char prenume[15];

float nota1;

float nota2;

float media;

struct tipstudent *urmator;

} varstudent, primul_student, ultimul student;

Tipul de data de mai sus, “tipstudent”, declara structuri recursive de tip strucura datorita campului "urmator" care furnizeaza adresa urmatoarei componente din lista (a urmatorului student). Acest camp nu este altceva decat un pointer (indicator) la o structura de date de tipul celei din care face parte insusi campul "urmator" si care va avea valoarea NULL pentru ultima componenta din lista. O asemenea lista poarta numele de lista simplu inlantuita, deoarece legatura dintre componente este facuta intr-un singur sens, de la prima la ultima componenta. Componentele unei liste se mai numesc noduri. Nodul este o structura recursiva care contine un pointer (adresa) catre urmatorul nod din lista. In acest caz exista un nod pentru care pointerul (adresa) spre urmatorul nod are valoarea NULL si care nu este altceva decat ultimul nod.

Liste dublu inlantuite in Limbajul C/C++.

O lista dublu inlantuita, spre deosebire de lista simplu inlantuita, presupune realizarea inlantuirii componentelor sale in ambele sensuri, de la prima componenta spre ultima si invers, de la ultima componenta spre prima componenta. In acest sens, in fiecare componenta, trebuie prevazute doua adrese de inlantuire (2 pointeri), una care sa precizeze adresa urmatoarei componente din lista, si alta care sa precizeze adresa componentei anterioare, ca in exemplul urmator:

struct tipstudent

{

int matricol;

char nume[15]

char prenume[15];

float nota1;

float nota2;

float media;

struct tipstudent *urmator;

struct tipstudent *anterior;

Preview document

Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 1
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 2
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 3
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 4
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 5
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 6
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 7
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 8
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 9
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 10
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 11
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 12
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 13
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 14
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 15
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 16
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 17
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 18
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 19
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 20
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 21
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 22
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 23
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 24
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 25
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 26
Ingineria Sistemelor de Programe - Capitolul 2 - Pagina 27

Conținut arhivă zip

  • Ingineria Sistemelor de Programe - Capitolul 2.doc

Alții au mai descărcat și

Referințe și pointeri

In C++ exista doua modalitati de lucra cu adrese de memomorie: pointeri si referinte. Pointeri Pointerii sunt variabile care contin adresa unei...

Curs HTML

Internetul a fost descris ca „o colectie larga de retele“ sau ca o „retea de retele“. Desi ambele definitii sînt corecte, nici una nu surprinde...

Pointeri

POINTERI Pointerul este o variabila care contine o adresa de memorie. Aceasta variabila contine adresa unei variabile. Avantajele utilizarii...

Limbajul C

În continuare vom defini un calculator, ca fiind un sistem electronic de foarte mare complexitate, capabil de prelucrarea automata a datelor de...

Organizarea informației în fișiere

Organizarea externă a datelorîn fişiere 1. Fişierul şi articolul 2. Moduri de acces la articole 3. Metode de organizare a fişierelor -...

Programare orientată obiect în C++

1. Redactarea programelor C 1.1. Generalitati Mediul Borland C a fost extins la Visual C si C++ Builder, adaptate programarii orientate obiect si...

Clase derivate. Moșteniri. funcții virtuale

CLASE DERIVATE.MOŞTENIRI.FUNCŢII VIRTUALE Derivarea claselor.Moşteniri Funcţii care nu se moştenesc integral Funcţii virtuale Derivarea...

Algoritmi și Structuri de Date

1. ALGORITMI SI MODURI DE REPREZENTARE Prelucrarea datelor cu ajutorul calculatorului se realizeazã prin executia unor operatii simple...

Te-ar putea interesa și

Proiectare și verificarea unui sașiu spațial folosind programe soft dedicate

Memoriu justificativ Tema lucrării de diplomă este “Proiectarea şi verificarea unui şasiu spatial sudat utilizând pachete software dedicate”. Ea...

Echipamente Birotice Utilizate în Munca de Secretariat

CAPITOLUL I BIROURILE DE SECRETARIAT – SPAŢII ALE ACTIVITĂŢLOR INFORMATIONALE ŞI COMUNICAŢIONALE 1.1. Birotica – ştiinţa automatizării...

Sistem Informatic pentru Creditarea Persoanelor Juridice

INTRODUCERE În conţinutul lucrării îmi propun să cuprind elementele de bază ale limbajului de programare C#.NET, a transferului de date între...

Ingineria Sistemelor de Producție

I. DATE INIŢIALE 1.1. Tema proiectului Programarea şi conducerea fabricaţiei a trei repere în condiţii de resurse nelimitate fără date impuse şi...

Clasificarea Virușilor

1.Istoria viruşilor Istoria viruşilor de calculatoare este lungă şi interesantă. Dar ea a devenit cu adevărat palpitantă abia din momentul în care...

Bazele Sistemelor Automatizate

Obiectivele urmarite - Obiectivele acestui curs se refera la sistemele care functioneaza in domeniul continuu de timp; - Sistemele care...

Fișiere în limbajul C

Capitolul I Fisiere in ingineria programarii in C 1.1 Generalitati Un fisier este o multime de informatii referitoare la o clasa de obiecte...

Ingineria Sistemelor de Programe - Capitolul 3

1. Definirea unui algoritm. Proprietati. Un algoritm reprezintă, în mod uzual, o metodă de descriere a rezolvării unor probleme. Mai exact, un...

Ai nevoie de altceva?