SlideShare a Scribd company logo
1 of 27
M a r i a G u t u
Material didactic pentru Informatică
(În corespondență cu curriculum-ul la Informatică)
Clasa a XI-a
M a r i a G u t u
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ţă.
M a r i a G u t u
Programarea clasică structurată are la bază
celebra ecuație a lui Nikolaus Wirth:
Program = Structuri de date + Algoritmi
M a r i a G u t u
PROGRAM Test;
VAR A, B: Integer;
BEGIN
. . .
A := 12;
B := – 5;
. . .
END.
MEMORIA CALCULATORULUI
12A
–5B
A
B
Declarare
variabile
Atribuire
valori
M a r i a G u t u
 Variabilele declarate în program şi notate
printr-un identificator (nume) se numesc
variabile statice;
 Variabilele care există pe toată durata de
execuţie a blocului în care au fost declarate se
numesc variabile statice.
Variabila DINAMICĂVariabila REFERINŢĂ
p p^
M a r i a G u t u
Accesul la variabilele dinamice se face prin
intermediul variabilelor de tip referință, care
se definește printr-o declarație de forma:
Type Tᵣ = ˆ Tᵦ
numele tipul de bază
tipului adresă
referință
POINTER
Identificator_tip_de_baza
^
TYPE Identificator_tip_Referinta = ^ Identificator_tip_de_baza;
VAR Identificator_Variabila : Identificator_tip_Referinta;
VAR Identificator_Variabila : ^ Identificator_tip_Referinta;
M a r i a G u t u
Variabilele i, r, c sunt variabile referinţă, sau variabile
reper. Pentru ele se alocă la compilare un spaţiu de
memorie de 4 bytes (conţine adresa de memorie a
variabilei dinamice referite).
Type IdentificatorInteger = ˆ integer;
IdentificatorChar = ˆ char;
var i: IdentificatorInteger;
r: ˆreal;
c: IdentificatorChar;
M a r i a G u t u
Variabilele referinţă (reper) pot să primească trei
tipuri de valori (să se afle în trei stări):
• să fie neiniţializate,
nedefinite, nedeterminate
(nu au nici o valoare);
• să conţină referinţa
(adresa) la o variabilă
dinamică;
• să păstreze valoarea NIL
(o constantă predefinită
Pascal);
?p
p p^
p sau p NIL
M a r i a G u t u
1. ATRIBUIREA
Variabila referinţă poate primi
valoarea unei alte variabile sau
funcţie de acelaşi tip referinţă cu ea,
sau poate fi iniţializată cu constanta
NIL.
VAR p, q : ^ real;
BEGIN
p := q;
p := NIL;
...
...
...
END.
p
q Locaţie de
memorie
p
M a r i a G u t u
R3 : ^ Integer;
BEGIN
logic := R3 <> NIL;
If (R1=R2) Then ... ;
...
...
...
END.
VAR R1, R2 : ^ Real;
logic : Boolean;
Variabilele referinţă pot să
apară în expresii relaţionale,
operatori relaţionali admişi
fiind “=“ şi “ <>“.
2. COMPARATIA
M a r i a G u t u
3. PARAMETRI
Variabilele referinţă
pot fi parametri ai
unor proceduri sau
funcţii.
Procedure Suma(x,y:^real; var s:real);
Begin
s:=x^+y^;
End;
M a r i a G u t u
Variabilele dinamice sunt variabilele de un tip oarecare simplu sau
structurat pentru care se poate aloca memorie numai în faza de execuţie a
programului în funcţie de necesitate.
Type RefTip = ^Real;
Var p: RefTip;
Begin
NEW(p);...
End.
Zonă variabile
statice
Zonă variabile
dinamice (HEAP)
p p^MEMORIA
Program
Adresa lui p^
p p^
M a r i a G u t u
Eliberarea zonelor de memorie, ocupată de variabilele
dinamice, create prin execuţia procedurii NEW, pentru a
nu deveni “gunoi” se realizează prin execuţia procedurii
predefinite DISPOSE.
Type RefTip = ^Real;
Var p: RefTip;
Begin
DISPOSE(p);
...
End.
p
p:=NIL;
p
?
M a r i a G u t u
VAR A, B: ^Integer;
NEW (A);
1. Declarare
2. Creare
NEW (B);
A A^
B B^
3. Atribuire de valori
A^ := 8;
B^ := – 6;
A
B
?
?
A A^
B B^
8
-6
M a r i a G u t u
A^ := B^;
4. Copiere valori
5. Atribuire NIL
B := NIL;
6. Atribuire de valori
A^ := Round(3.14)+2;
A A^5
A A^
B B^
-6
-6
B
A A^
-6
B
M a r i a G u t u
B := A;
7. Schimb adrese
8. Schimb valori
Var aux:Real;
{2} A^:=B^;
A
A A^
A^5
B
B B^
aux
A,B:^Real;
Begin
NEW(A); NEW(B); ...
{1} aux:=A^;
{3} B^:=aux; ...
End.
1
2
3
M a r i a G u t u
NODURI INACCESIBILE – Structuri dinamice cu referinţe la
cele pierdute (lădiţa încuiată cu cheia pierdută) – apar după utilizarea
procedurii NEW sau instrucţiunii de atribuire.
A A^7
A^
7A
A A^
B B^
7
4
A 7
A^B
B^
4
PÂNĂ DUPĂ
NEW(A);
A := B;
M a r i a G u t u
REFERINŢE SUSPENDATE – Indicatori ce conţin
referinţe la locaţii de memorie eliberate cu DISPOSE.
PÂNĂ DUPĂ
DISPOSE(A);
A^B
B^
4
A ?
B ?
A
M a r i a G u t u
M a r i a G u t u
Program Exemplu;
{Operatii cu variabile dinamice}
Type AdresaInteger=ˆinteger;
Var i,j,k:AdresaInteger;
r, s, t: ˆreal;
Begin
{crearea variabilelor dinamice de tip integer}
new(i); new(j); new(k);
{Operatii cu variabilele create}
i ˆ:=1; j ˆ:=2; k ˆ:=i ˆ+j ˆ;
Writeln(k ˆ);
{Crearea variabilelor dinamice de tip real}
new(r); new(s); new(t);
{Operarii cu variabilele create}
r ˆ:=1.0; s ˆ:=2.0; t ˆ:=r ˆ/s ˆ;
Writeln(t ˆ);
M a r i a G u t u
{Distrugerea variabilelor
dinamice}
dispose(i);
dispose(j);
dispose(k);
dispose(r);
dispose(s);
dispose(t);
end.
M a r i a G u t u
Variabilele care sunt create şi distruse pe
parcursul execuţiei programului se numesc
variabile dinamice.
M a r i a G u t u
Alocarea dinamică a memoriei necesită o
atenție sporită din partea programatorului care
este obligat să asigure crearea, distrugerea și
referirea corectă a variabilelor dinamice.
M a r i a G u t u
Ţine minte!!!
1. Variabilele dinamice nu se declară într-o secţiune VAR
deci nu se pot identifica prin nume.
2. Nu există pe toată durata de execuţie a programului
sau activării blocului în care s-au creat.
3. Variabilele dinamice se alocă dinamic într-o zonă
specială de memorie, numită memorie HEAP şi se
distrug la cererea programatorului.
4. Accesul la variabilele dinamice se poate face prin
intermediul altor variabile speciale, numite variabile
REPER, REFERINŢĂ, INDICATOR, ADRESĂ, POINTER.
M a r i a G u t u
1. Tema 2.1. de studiat.
2. De analizat PPT din GitHub.
3. Ex. 7 - 10 (pag. 33).

More Related Content

More from m_gutu

Jeopardy Vocabularul și sintaxa limbajului Pascal
Jeopardy  Vocabularul și sintaxa limbajului PascalJeopardy  Vocabularul și sintaxa limbajului Pascal
Jeopardy Vocabularul și sintaxa limbajului Pascalm_gutu
 
Flipped Classroom
Flipped ClassroomFlipped Classroom
Flipped Classroomm_gutu
 
Tip de date String Pascal
Tip de date String PascalTip de date String Pascal
Tip de date String Pascalm_gutu
 
Java While Loop
Java While LoopJava While Loop
Java While Loopm_gutu
 
Parcurgerea arborilor binari
Parcurgerea arborilor binariParcurgerea arborilor binari
Parcurgerea arborilor binarim_gutu
 
Java IF Statement
Java IF StatementJava IF Statement
Java IF Statementm_gutu
 
Java For Loop
Java For LoopJava For Loop
Java For Loopm_gutu
 
Scanner class and Decimal Format in Java
Scanner class and Decimal Format in JavaScanner class and Decimal Format in Java
Scanner class and Decimal Format in Javam_gutu
 
Functii in pascal
Functii in pascalFunctii in pascal
Functii in pascalm_gutu
 

More from m_gutu (9)

Jeopardy Vocabularul și sintaxa limbajului Pascal
Jeopardy  Vocabularul și sintaxa limbajului PascalJeopardy  Vocabularul și sintaxa limbajului Pascal
Jeopardy Vocabularul și sintaxa limbajului Pascal
 
Flipped Classroom
Flipped ClassroomFlipped Classroom
Flipped Classroom
 
Tip de date String Pascal
Tip de date String PascalTip de date String Pascal
Tip de date String Pascal
 
Java While Loop
Java While LoopJava While Loop
Java While Loop
 
Parcurgerea arborilor binari
Parcurgerea arborilor binariParcurgerea arborilor binari
Parcurgerea arborilor binari
 
Java IF Statement
Java IF StatementJava IF Statement
Java IF Statement
 
Java For Loop
Java For LoopJava For Loop
Java For Loop
 
Scanner class and Decimal Format in Java
Scanner class and Decimal Format in JavaScanner class and Decimal Format in Java
Scanner class and Decimal Format in Java
 
Functii in pascal
Functii in pascalFunctii in pascal
Functii in pascal
 

Variabile dinamice. Tipul referinta.

  • 1. M a r i a G u t u Material didactic pentru Informatică (În corespondență cu curriculum-ul la Informatică) Clasa a XI-a
  • 2. M a r i a G u t u 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ţă.
  • 3. M a r i a G u t u Programarea clasică structurată are la bază celebra ecuație a lui Nikolaus Wirth: Program = Structuri de date + Algoritmi
  • 4. M a r i a G u t u PROGRAM Test; VAR A, B: Integer; BEGIN . . . A := 12; B := – 5; . . . END. MEMORIA CALCULATORULUI 12A –5B A B Declarare variabile Atribuire valori
  • 5. M a r i a G u t u  Variabilele declarate în program şi notate printr-un identificator (nume) se numesc variabile statice;  Variabilele care există pe toată durata de execuţie a blocului în care au fost declarate se numesc variabile statice.
  • 7. M a r i a G u t u Accesul la variabilele dinamice se face prin intermediul variabilelor de tip referință, care se definește printr-o declarație de forma: Type Tᵣ = ˆ Tᵦ numele tipul de bază tipului adresă referință
  • 8. POINTER Identificator_tip_de_baza ^ TYPE Identificator_tip_Referinta = ^ Identificator_tip_de_baza; VAR Identificator_Variabila : Identificator_tip_Referinta; VAR Identificator_Variabila : ^ Identificator_tip_Referinta;
  • 9. M a r i a G u t u Variabilele i, r, c sunt variabile referinţă, sau variabile reper. Pentru ele se alocă la compilare un spaţiu de memorie de 4 bytes (conţine adresa de memorie a variabilei dinamice referite). Type IdentificatorInteger = ˆ integer; IdentificatorChar = ˆ char; var i: IdentificatorInteger; r: ˆreal; c: IdentificatorChar;
  • 10. M a r i a G u t u Variabilele referinţă (reper) pot să primească trei tipuri de valori (să se afle în trei stări): • să fie neiniţializate, nedefinite, nedeterminate (nu au nici o valoare); • să conţină referinţa (adresa) la o variabilă dinamică; • să păstreze valoarea NIL (o constantă predefinită Pascal); ?p p p^ p sau p NIL
  • 11. M a r i a G u t u 1. ATRIBUIREA Variabila referinţă poate primi valoarea unei alte variabile sau funcţie de acelaşi tip referinţă cu ea, sau poate fi iniţializată cu constanta NIL. VAR p, q : ^ real; BEGIN p := q; p := NIL; ... ... ... END. p q Locaţie de memorie p
  • 12. M a r i a G u t u R3 : ^ Integer; BEGIN logic := R3 <> NIL; If (R1=R2) Then ... ; ... ... ... END. VAR R1, R2 : ^ Real; logic : Boolean; Variabilele referinţă pot să apară în expresii relaţionale, operatori relaţionali admişi fiind “=“ şi “ <>“. 2. COMPARATIA
  • 13. M a r i a G u t u 3. PARAMETRI Variabilele referinţă pot fi parametri ai unor proceduri sau funcţii. Procedure Suma(x,y:^real; var s:real); Begin s:=x^+y^; End;
  • 14. M a r i a G u t u Variabilele dinamice sunt variabilele de un tip oarecare simplu sau structurat pentru care se poate aloca memorie numai în faza de execuţie a programului în funcţie de necesitate. Type RefTip = ^Real; Var p: RefTip; Begin NEW(p);... End. Zonă variabile statice Zonă variabile dinamice (HEAP) p p^MEMORIA Program Adresa lui p^ p p^
  • 15. M a r i a G u t u Eliberarea zonelor de memorie, ocupată de variabilele dinamice, create prin execuţia procedurii NEW, pentru a nu deveni “gunoi” se realizează prin execuţia procedurii predefinite DISPOSE. Type RefTip = ^Real; Var p: RefTip; Begin DISPOSE(p); ... End. p p:=NIL; p ?
  • 16. M a r i a G u t u VAR A, B: ^Integer; NEW (A); 1. Declarare 2. Creare NEW (B); A A^ B B^ 3. Atribuire de valori A^ := 8; B^ := – 6; A B ? ? A A^ B B^ 8 -6
  • 17. M a r i a G u t u A^ := B^; 4. Copiere valori 5. Atribuire NIL B := NIL; 6. Atribuire de valori A^ := Round(3.14)+2; A A^5 A A^ B B^ -6 -6 B A A^ -6 B
  • 18. M a r i a G u t u B := A; 7. Schimb adrese 8. Schimb valori Var aux:Real; {2} A^:=B^; A A A^ A^5 B B B^ aux A,B:^Real; Begin NEW(A); NEW(B); ... {1} aux:=A^; {3} B^:=aux; ... End. 1 2 3
  • 19. M a r i a G u t u NODURI INACCESIBILE – Structuri dinamice cu referinţe la cele pierdute (lădiţa încuiată cu cheia pierdută) – apar după utilizarea procedurii NEW sau instrucţiunii de atribuire. A A^7 A^ 7A A A^ B B^ 7 4 A 7 A^B B^ 4 PÂNĂ DUPĂ NEW(A); A := B;
  • 20. M a r i a G u t u REFERINŢE SUSPENDATE – Indicatori ce conţin referinţe la locaţii de memorie eliberate cu DISPOSE. PÂNĂ DUPĂ DISPOSE(A); A^B B^ 4 A ? B ? A
  • 21. M a r i a G u t u
  • 22. M a r i a G u t u
  • 23. Program Exemplu; {Operatii cu variabile dinamice} Type AdresaInteger=ˆinteger; Var i,j,k:AdresaInteger; r, s, t: ˆreal; Begin {crearea variabilelor dinamice de tip integer} new(i); new(j); new(k); {Operatii cu variabilele create} i ˆ:=1; j ˆ:=2; k ˆ:=i ˆ+j ˆ; Writeln(k ˆ); {Crearea variabilelor dinamice de tip real} new(r); new(s); new(t); {Operarii cu variabilele create} r ˆ:=1.0; s ˆ:=2.0; t ˆ:=r ˆ/s ˆ; Writeln(t ˆ); M a r i a G u t u {Distrugerea variabilelor dinamice} dispose(i); dispose(j); dispose(k); dispose(r); dispose(s); dispose(t); end.
  • 24. M a r i a G u t u Variabilele care sunt create şi distruse pe parcursul execuţiei programului se numesc variabile dinamice.
  • 25. M a r i a G u t u Alocarea dinamică a memoriei necesită o atenție sporită din partea programatorului care este obligat să asigure crearea, distrugerea și referirea corectă a variabilelor dinamice.
  • 26. M a r i a G u t u Ţine minte!!! 1. Variabilele dinamice nu se declară într-o secţiune VAR deci nu se pot identifica prin nume. 2. Nu există pe toată durata de execuţie a programului sau activării blocului în care s-au creat. 3. Variabilele dinamice se alocă dinamic într-o zonă specială de memorie, numită memorie HEAP şi se distrug la cererea programatorului. 4. Accesul la variabilele dinamice se poate face prin intermediul altor variabile speciale, numite variabile REPER, REFERINŢĂ, INDICATOR, ADRESĂ, POINTER.
  • 27. M a r i a G u t u 1. Tema 2.1. de studiat. 2. De analizat PPT din GitHub. 3. Ex. 7 - 10 (pag. 33).