210 likes | 387 Views
Dynamické premenné. Doc. Ing. Juraj Vaculík, PhD., Mail : juvac@fpedas.utc.sk Web http://nf446.host.sk. Premenné. statické v danom segmente Max. veľkosť 64 kB dynamické v iných segmentoch dostupnej pamäte (heap, halda) veľkosť 250 - 400 kB smerník - typový, netypový. smerník.
E N D
Dynamické premenné Doc. Ing. Juraj Vaculík, PhD., Mail : juvac@fpedas.utc.sk Web http://nf446.host.sk
Premenné • statické • v danom segmente • Max. veľkosť 64 kB • dynamické • v iných segmentoch dostupnej pamäte (heap, halda) • veľkosť 250 - 400 kB • smerník - typový, netypový Progranmovanie 2006 smerník
Smerník - pointer • typový - ukazuje na premennú Syntax : ^bazový typ type osoba = record... pole = array... var x:^integer; x:^osoba; x:^pole; • netypový - ukazuje (obsahuje) adresu niečoho (objektu, podprogramu, premennej) Progranmovanie 2006 použitie
Použitie dynamických a statických type pole = array[1..1000] of real; var p1,p2 : pole; s1,s2 : ^pole; begin p1:=p2; {2 x 6000 bytov} s1:=@p1; s2:=@p2; s1:=@p2; s2:=@p1; {výmena premenných} s1^ je to isté ako p1 alebo prístup s1^[i| -> p1[i] Progranmovanie 2006 dynamické
Dynamické premenné • veľké množstvo dát >64 kB • zreťazené štruktúry • new(x); • dispose(x); - zruší dynamickú premennú ale v smerníku sa hodnota nezmení • x:=nil; zmení smerník - je to lepšie Progranmovanie 2006 príklady
var x:^integer; begin new(x); ... dispose(x); ... type pole:array[] of type; var x:^pole; begin new(x); ... x^[j]:=obsah; dispose(x); end; type osoba = record ... end; var x:^osoba; begin new(x); ... x^.meno:=hodnota; ... dispose(x); end; Príklad dynamických premenných Progranmovanie 2006 pamäť
Pridelenie pamäti zistenie veľkosti dostupnej pamäte (haldy) • maxavail - celkom voľne • memavail – najväčší súvislý celok • getmem – pridelenie pamäti Progranmovanie 2006 použitie
Použitie typem=array[1..50,1..1000] of real; {cca 300 kB} var a,b : m; {nie je možné pretože m>64 kB} a,b : ^m; begin new(a); new(b); prístupk premenej a[i,j] {nefunguje } a^[i,j]{v poriadku} Progranmovanie 2006 štruktúrované
Štrktúrované premenné type m=array[1..100, 1..200] of real; {120.000} type riad = array [1..200] of real; smer = array [1..100] of ^riad; mat = ^smer; var m : mat; r,s : word; begin readln(r,s); vytvor (x,r,s); použitie x^[i]^[j] Progranmovanie 2006 predstava
Predstava matice Progranmovanie 2006 vytvor
Štrktúrované premenné - vytvor procedure vyrvor (var a : mat; n,m : word;); var i : word; begin getmem(a, m*sizeof(pointer)); for i:=1 to m do getmem(^a[i],n*sizeof(real)); ... end; Progranmovanie 2006 zreťazené
Zreťazené štruktúry • lineárne smerník + obsah • stromové smerník, smerník, obsah • LIFO, FIFO, LIRO, FIRO ... Progranmovanie 2006 deklarácie
Zásobník LIFO - delkarácia program zasobnik_lifo; type prvok = record info : integer; {alebo niečo iné} next : smernik; end; smernik : ^prvok; var zac1, zac2: smernik; koniec : boolean; Progranmovanie 2006 program
Zásobník LIFO – výkonná časť begin zac:=nil; koniec :=false; repeat casereadkeyof #27 : koniec:=true; 'p' : pridaj(zac1); 'v' : vypis(zac1); 'u': uber(zac1); end; until koniec; end. Progranmovanie 2006 pridaj
Zásobník LIFO - pridaj procedurepridaj ( var zac : smernik); var pom : smernik; begin new(pom); write(text); readln(pom^.info); pom^.next:=zac; end; Progranmovanie 2006 postup
Postup Progranmovanie 2006 uber
Zásobník LIFO - uber procedureuber(var zac:smernik); var pom : smernik; begin if zac<>nil thenbegin writeln(text, zac^.info); pom:=zac; zac:=pom^.next; dispose(pom); endelse writeln(prazdny); end; Progranmovanie 2006 postup
Postup Progranmovanie 2006 uber
Zásobník LIFO - výpis procedure vypis(zac:smernik); var pom : smernik; begin while zac<>nil thenbegin writeln(text, zac^.info); zac:=zac^.next; end; end; Progranmovanie 2006 postup
Postup Progranmovanie 2006 koniec
Ďakujem za pozornosť Pokračovanie: Základnéoperácie