Material didactic pentru Informatic pentru clasa a XI-a.
Obiectivele care au fost urmrite sunt:
O1 - s cunoasc no釘iunea de variabil dinamic;
O2 - s creeze i s distrug variabile dinamice;
O3 - s efectuieze opera釘ii cu variabile dinamice;
O4 - s poat s utilize tipul de date articol;
O5 - s fie capabil de a elabora programe, 樽n care s utilizeze tipul de date referin釘.
2. Mul釘imea de valori ale tipului predefinit de date
pointer (indicator) const din adrese i
valoarea special nil.
Opera釘iile care se pot face cu valori de tipul de
date pointer s樽nt = i <>. Valorile de acest tip
nu pot fi citite de la tastatur i afiate pe
ecran.
O variabil de tip pointer se introduce printr-o
declara釘ie forma:
var p : pointer;
3. Program PI 34; { Tipul de date pointer }
var p : pointer;
i, j : ^integer;
x, y : ^ real;
r, s : ^ string;
begin
{ p va identifica o variabil dinamic de tipul integer }
new(i); i^:=1;
P^ = i ;
new(i); i ^ :=2;
j :=p;
writeln('j^=', j^);
{ p va identifica o variabil de tip real }
new (x); x^: =1 ;
p:=x;
new (x); x^:=2;
y:=p;
Writeln(y^=' y^); {se afieaz 1.OOOOOOOOOOE+00 }
{ p va identifica o variabil dinamic de tipul string }
new (r); r^: = 'AAA';
p:=r;
new (r); r^:=BBB';
s:=p;
writeln ('s^=', s^); { se afieaz AAA }
end.
4. Domeniul principal de utilizare a variabilelor de
tip pointer este gestionarea memoriei interne
a calculatorului.
Alocarea variabilelor dinamice se execut 樽ntro zon special a memoriei interne numit
heap (grmad). Adresa de 樽nceput a heapuluii este depus 樽n variabila predefinit de
tip pointer HeapOrg. Variabila de tip pointer
HeapPtr con釘ine adresa
primei loca釘ii libere, numit v樽rful heap-ului.
5. Apelul procedurii mark are forma:
mark(p)
unde p este o variabil de tip pointer. Procedura
memoreaz adresa v樽rfului din HeapPtr 樽n
variabila p.
Apelul procedurii release are forma:
release(p)
Aceast procedur reface adresa v樽rfului 樽n
starea 樽nregistrat anterior cu procedura mark:
valoarea con釘inut 樽n variabila de tip pointer p
este depus 樽n indicatorul HeapPtr.
6. 1) se memoreaz adresa v樽rfului cu procedura
mark;
2) se creeaz variabilele dinamice cu procedura
new;
3) se utilizeaz variabilele dinamice create;
4) c樽nd variabilele dinamice nu mai s樽nt necesare,
spa釘iul ocupat din heap este eliberat cu
procedura release.
7. 1. Care este mul釘imea de valori ale tipului de date pointer?
Ce opera釘ii pot fi
efectuate cu aceste valori?
2. Comenta釘i urmtorul program:
Program PI36;
{ Eroare }
var i : ^integer;
j, k : integer;
p : pointer;
begin
new (i); i^:=1;
p:=i;
new (i) ; i^ :=2;
j:=i^; k:=p^;
writeln('j+k=', j+k);
end.
8. Program P137;
var i, j, k, m, n : ^integer;
p : pointer;
begin
{ crearea variabilelor i^, j^, k^ }
new(i); new(j); new(k);
i^:=1; j^:=2; k^:=3;
p:=j; { p re綻ine adresa din j }
{ distrugerea variabilei j^ 尊i crearea
variabilei m^ }
dispose(j); new(m); m^:=4;
j:=p; { refacerea adresei din j }
writeln('i^=', i^, ' j^=', j^, ' k^=', k^);
{ distrugerea variabilei m^ si crearea
variabilei n^ }
dispose(m); new(n); n^:=5;
writeln('i^=', i^, ' j^=', j^, ' k^=', k^);
readln;
end.
Program P138;
var i, j, k, m : ^integer;
begin
{ crearea variabilelor i^, j^ }
new(i); new(j);
i^:=1; j^:=2;
{ eliberarea memoriei heap-ului }
release(HeapOrg);
{ crearea variabilelor k^ 淡i m^ }
new(k); new(m);
k^:=1; m^:=2;
writeln('k^=', k^, ' m^=', m^);
i^:=3; j^:=4;
writeln('k^=', k^, ' m^=', m^);
readln;
end.