====== 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;