====== Adattípusok. Állandók. Változók deklarálása. Összetett adattípusok. Rekord típus ====== ===== Állandók ===== Az állandók deklarálás a ''const'' szakaszban történik. const azonosító = érték; Példa. const pi = 3.14; avogadro = 6.022E23; ev = 2017; nev = 'Marci'; megfelelt = true; Típusos állandók const r : real = 20; ===== Változók ===== A változók deklarálás a ''var'' szakaszban történik. var azonosító : adattípus; ===== Adattípusok ===== A Pascal alapvető elemi típusai: * ''integer'' - egész: -32768-től 32767-ig * ''real'' - valós: 3.4x10-38-tól 3.4x1038-ig * ''char'' - karakter: pl. '' 'a' '', '' ' ' '', '' '+' '', '' '#9' '', '' '#$10' '' stb. * ''boolean'' - logikai: ''true'' (igaz) vagy ''false'' (hamis) A szöveges adattípusokat karakterláncokban tárolják, úgynevezett ''string'' típusban, melynek hossz maximum 255 karakter lehet. Példa var ev, ho, jegy : integer; trulet : real; betu : char; leadva : boolean; keresznev : string; Egyéb FreePascal szöveges adattípusok: * ''WideChar'' - két byte-os, azaz unicode vagy UTF-16 kódolású karakter * ''PChar'' - null-karakter ('' '#0' '') végződésű karakterlánc * ''ShortString'' - maximum 255 karakter hosszúságú karakterlánc * ''AnsiString'' - ennek a karakterlánc-típusnak a hossza nincs korlátozva * ''Widestrings'' - unicode vagy UTF-16 kódolású karaktereket tároló karakterlánc Egész típusok a FreePascal-ban ^ Típus ^ Értékhalmaz ^ Tárfoglalás bájtokban ^ | Byte | 0 .. 255 | 1 | | Shortint | -128 .. 127 | 1 | | Smallint | -32768 .. 32767 | 2 | | Word | 0 .. 65535 | 2 | | Integer | smallint vagy longint | 2 vagy 4 | | Cardinal | longword | 4 | | Longint | -2147483648 .. 2147483647 | 4 | | Longword | 0 .. 4294967295 | 4 | | Int64 | -9223372036854775808 .. 9223372036854775807 | 8 | | QWord | 0 .. 18446744073709551615 8 | Valós típusok a FreePascal-ban ^ Típus ^ Értékhalmaz ^ Értékes jegyek ^ Tárfoglalás bájtokban ^ | Real | platformfüggő | ??? | 4 vagy 8 | | Single | 1.5E-45 .. 3.4E38 | 7-8 | 4 | | Double | 5.0E-324 .. 1.7E308 | 15-16 | 8 | | Extended | 1.9E-4932 .. 1.1E4932 | 19-20 | 10 | | Comp | -2E64+1 .. 2E63-1 | 19-20 | 8 | | Currency | -922337203685477.5808 .. 922337203685477.5807 | 8 | ===== Saját típus deklarálása ===== type adattípus_azonosító = típus_specifikáció; ===== Felsorolás típus ===== Formátum type adattípus_azonosító = (azonosító_1, azonosító_2, ... , azonosító_n); Példa program kartyazas; type kartya_szin = (tok, makk, piros, zold); var piros_kartya : kartya_szin; begin piros_kartya := piros; end. ===== Tartomány típus ===== Formátum type tartomany_tipus_azonosító = alsó_korlát .. felső_korlát; Példa program kartyaszinek; type kartya_szin = (tok, makk, piros, zold); kartya_szin_tartomany = piros .. zold; var piros_kartya : kartya_szin_tartomany; begin piros_kartya := piros; end. ===== Halmaz típus ===== Formátum type halmaz_azonosito = set of alaptípus; Példa program halmazok; type abc = set of 'a'..'z'; szamok = set of 0..9; evszak = set of (tavasz, nyar, osz, tel); var a, b, c : szamok; begin {egyesítés} A := [0, 2, 5, 9]; B := [1, 2, 4, 6]; C := A + B; {eredmény: C = [ 0, 1, 2, 4, 5, 6, 9]} {metszet} A := [0, 2, 5, 9]; B := [1, 2, 4, 6]; C := A * B; {eredmény: C = [2]} {különbség} A := [0, 2, 5, 9]; B := [1, 2, 4, 6]; C := A - B; {eredmény: C = [0, 5, 9]} end. ===== Rekord típus ===== Formátum type rekordtpíus_azonosító = record mezőnév_1 : adattípus_1; ... mezőnév_n : adattípus_n; end; Rekord mezőhöz való hozzáférés: rekordtípus_azonosító.mezőnév_1 Példa rekordok kezelésére program rekord; type tanulo_tipus = record nev : string; szuletesi_ev : word; end; var tanulo: tanulo_tipus; begin tanulo.nev := 'Kelep Elek'; tanulo.szuletesi_ev := 2000; end. A ''With'' parancs segít leegyszerűsíteni a rekord mezőihez való hozzáférést. With rekord_változó do mezőnév_1 := érték_1; ... end; Példa a ''With'' parancs használatára With tanulo do nev := 'Kelep Elek'; szuletesi_ev := 2000; end; ===== Mutató adattípus ===== Formátum type mutató_típus = ^adattípus; Példa program mutatok; type egesz_mutato = ^integer; var p_egesz: egesz_mutato; begin Writeln('A lefoglalas elott: ',memavail); {Szabad memória: 262080} {A memória lefoglalása} New(p_egesz); Writeln('A lefoglalas utan: ',memavail); {Szabad memória: 262064} {Értékadás} p_egesz^ := 5; {A memória felszabadítása} Dispose(p_egesz); Writeln('A felszabaditas utan: ',memavail); {Szabad memória: 262080} Readln; end. Előre definiált mutató. type PLancoltLista = ^LancoltLista; LancoltLista = record adat : integer; next : PLancoltLista; end;