1 / 21

Dynamické premenné

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.

karl
Download Presentation

Dynamické premenné

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Dynamické premenné Doc. Ing. Juraj Vaculík, PhD., Mail : juvac@fpedas.utc.sk Web http://nf446.host.sk

  2. 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

  3. 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

  4. 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é

  5. 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

  6. 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äť

  7. 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

  8. 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é

  9. Š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

  10. Predstava matice Progranmovanie 2006 vytvor

  11. Š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é

  12. Zreťazené štruktúry • lineárne smerník + obsah • stromové smerník, smerník, obsah • LIFO, FIFO, LIRO, FIRO ... Progranmovanie 2006 deklarácie

  13. 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

  14. 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

  15. 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

  16. Postup Progranmovanie 2006 uber

  17. 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

  18. Postup Progranmovanie 2006 uber

  19. 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

  20. Postup Progranmovanie 2006 koniec

  21. Ďakujem za pozornosť Pokračovanie: Základnéoperácie

More Related