26
Egyszerű típusok Egyszerű típusok csoportosítása csoportosítása Sorszámozott típusok Sorszámozott típusok egész típusok (byte, shortint, egész típusok (byte, shortint, word, integer, longint) word, integer, longint) karakteres típus (char) karakteres típus (char) logikai típus (boolean) logikai típus (boolean) felsorolt típus felsorolt típus intervallum típus intervallum típus Nem sorszámozott típusok: Nem sorszámozott típusok: valós típusok (real) valós típusok (real)

Egyszerű típusok csoportosítása

  • Upload
    flynn

  • View
    54

  • Download
    6

Embed Size (px)

DESCRIPTION

Egyszerű típusok csoportosítása . Sorszámozott típusok egész típusok (byte, shortint, word, integer, longint) karakteres típus (char) logikai típus (boolean) felsorolt típus intervallum típus Nem sorszámozott típusok: valós típusok (real). - PowerPoint PPT Presentation

Citation preview

Page 1: Egyszerű típusok csoportosítása

Egyszerű típusok Egyszerű típusok csoportosítása csoportosítása

Sorszámozott típusokSorszámozott típusok egész típusok (byte, shortint, word, egész típusok (byte, shortint, word,

integer, longint)integer, longint) karakteres típus (char)karakteres típus (char) logikai típus (boolean)logikai típus (boolean) felsorolt típusfelsorolt típus intervallum típusintervallum típus

Nem sorszámozott típusok: Nem sorszámozott típusok: valós típusok (real)valós típusok (real)

Page 2: Egyszerű típusok csoportosítása

Felsorolt típus:Felsorolt típus:var Tantargy: (Magyar, Tori, Matek, Tesi);var Tantargy: (Magyar, Tori, Matek, Tesi);

Intervallum típus:Intervallum típus:var Szamjegy: '0'.. '9';var Szamjegy: '0'.. '9';Honap: 1..12; Honap: 1..12;

Page 3: Egyszerű típusok csoportosítása

Összetett típusokÖsszetett típusok StringString TömbTömb RekordRekord HalmazHalmaz Fájl (külön tétel)Fájl (külön tétel)

Page 4: Egyszerű típusok csoportosítása

A rekord - Record típusA rekord - Record típus A rekord strukturált adattípus, amelyben különböző típusú A rekord strukturált adattípus, amelyben különböző típusú

adatokat (mezőket) fogunk össze. adatokat (mezőket) fogunk össze. Deklarálásakor a Deklarálásakor a RecordRecord és és EndEnd kulcsszavak között fel kell kulcsszavak között fel kell

sorolnunk az egyes mezők neveit valamint típusait. sorolnunk az egyes mezők neveit valamint típusait. RECORD RECORD

mezőazonosító mezőazonosító [[,mezőazonosító,mezőazonosító...]...]:: típus típus [ [;;mezőazonosító mezőazonosító [[,,mezőazonosítómezőazonosító...]...]::típustípus...] ...] END END

type DolgozoTip = record type DolgozoTip = record          Nev: string;         Nev: string;         Hazas:boolean;         Hazas:boolean;         Fizetes: longint;         Fizetes: longint;     end;     end;

var Dolgozok: array[1..50]of DolgozoTip;var Dolgozok: array[1..50]of DolgozoTip;    d1, d2: DolgozoTip;    d1, d2: DolgozoTip;

A rekord tartalmazhat egy változó részt is A rekord tartalmazhat egy változó részt is

Page 5: Egyszerű típusok csoportosítása

Hivatkozás a rekord egy mezőjére: Hivatkozás a rekord egy mezőjére: rekordazonosítórekordazonosító..mezőazonosítómezőazonosító

Pl. Pl. d1.Nev d1.Nev Dolgozok[5].HazasDolgozok[5].Hazas

A With utasítás A With utasítás Ha egy programrészletben gyakran hivatkozunk egy (vagy Ha egy programrészletben gyakran hivatkozunk egy (vagy több) rekord mezőire, akkor a With utasítással ez több) rekord mezőire, akkor a With utasítással ez leegyszerűsíthető, a rekordazonosító elhagyható. leegyszerűsíthető, a rekordazonosító elhagyható.

Szintaktikája: Szintaktikája: WITH WITH rekordazonosító rekordazonosító DO DO utasításutasítás

Pl. Pl. with d1 dowith d1 do begin begin    ReadLn(Nev);    ReadLn(Nev);    ReadLn(Fizetes)    ReadLn(Fizetes) end; end;

Page 6: Egyszerű típusok csoportosítása

A halmaz - Set típusA halmaz - Set típus A programozásban a halmaz azonos A programozásban a halmaz azonos

típusú különböző elemek összességét típusú különböző elemek összességét jelenti. jelenti.

A halmazt az elemek felsorolásával A halmazt az elemek felsorolásával adhatjuk meg. adhatjuk meg.

Az elemek rendezetlenek. Az elemek rendezetlenek. Az összetett adattípusokhoz soroljuk, Az összetett adattípusokhoz soroljuk,

bár a halmaz egy elemére nem tudunk bár a halmaz egy elemére nem tudunk hivatkozni. hivatkozni.

Page 7: Egyszerű típusok csoportosítása

Deklarálása: Deklarálása: SET OF SET OF alaptípusalaptípus ahol az ahol az alaptípus alaptípus csak olyan sorszámozott csak olyan sorszámozott típus lehet, amelynek maximálisan 256 típus lehet, amelynek maximálisan 256 eleme vaneleme van

Halmaz típusú konstans:Halmaz típusú konstans:const Betuk = ['A'..'Z', 'a'..'z']; const Betuk = ['A'..'Z', 'a'..'z'];

H1 := [1, 4, 6, 8..12] H1 := [1, 4, 6, 8..12]

H2 := [] {üres halmaz}H2 := [] {üres halmaz}

Page 8: Egyszerű típusok csoportosítása

Műveletek:Műveletek: * metszet* metszet + egyesítés+ egyesítés - különbség- különbség Logikai típusú eredményt Logikai típusú eredményt

szolgáltatnak:szolgáltatnak: = egyenlőség= egyenlőség <> különbözőség<> különbözőség <=, >= tartalmazás (részhalmaz)<=, >= tartalmazás (részhalmaz) IN elemvizsgálat IN elemvizsgálat

Page 9: Egyszerű típusok csoportosítása

... ... WriteLn('1: Adatfelvitel');WriteLn('1: Adatfelvitel');WriteLn('2: Módosítás');WriteLn('2: Módosítás');WriteLn('3: Listázás');WriteLn('3: Listázás');WriteLn('4: Kilépés'); WriteLn('4: Kilépés'); WriteLn('Válasszon!);WriteLn('Válasszon!);repeat repeat Valasz := ReadKey Valasz := ReadKey until Valasz in ['1'..'4']; until Valasz in ['1'..'4'];

case Valasz of case Valasz of '1': ...; '1': ...; '2': ...; '2': ...; '3': ...; '3': ...; ... ...

Page 10: Egyszerű típusok csoportosítása

program lotto;program lotto;uses crt;uses crt;var h:set of byte;var h:set of byte; i, szam, n:integer;i, szam, n:integer;beginbeginclrscr; randomize;clrscr; randomize;h:=[]; n:=0;h:=[]; n:=0;

repeatrepeat szam:=random(90)+1;szam:=random(90)+1; if not (szam in h) thenif not (szam in h) then beginbegin h:=h+[szam];h:=h+[szam]; inc(n)inc(n) end;end;until n=5;until n=5;

for i:=1 to 90 dofor i:=1 to 90 do if i in h thenif i in h then writeln(i);writeln(i);end.end.

Page 11: Egyszerű típusok csoportosítása

ÁllománykezelésÁllománykezelés A programok a bemeneti adataikat nem csak A programok a bemeneti adataikat nem csak

a billentyűzetről, hanem a háttértárolókon a billentyűzetről, hanem a háttértárolókon lévő állományokból is kaphatják, valamint lévő állományokból is kaphatják, valamint kimeneti adataikat a képernyőn történő kimeneti adataikat a képernyőn történő megjelenítés mellett állományokban is megjelenítés mellett állományokban is tárolhatják. tárolhatják.

A Pascal nyelvben három összetett típus és A Pascal nyelvben három összetett típus és az ezekhez kapcsolódó szabványos eljárások az ezekhez kapcsolódó szabványos eljárások és függvények valósítják meg az állományok és függvények valósítják meg az állományok kezelését.kezelését. Típusos állományTípusos állomány Szöveges állománySzöveges állomány Típus nélküli állományTípus nélküli állomány

Page 12: Egyszerű típusok csoportosítása

Típusos állományTípusos állomány Deklarálása: Deklarálása: FILE OFFILE OF alaptípusalaptípus Összetett típus, fizikailag egy lemezes Összetett típus, fizikailag egy lemezes

állomány.állomány. Egyforma méretű elemekből Egyforma méretű elemekből

(komponensekből) áll. Az elemek számának (komponensekből) áll. Az elemek számának csak a lemez mérete szab határt.csak a lemez mérete szab határt.

A típusos állományból való olvasás illetve az A típusos állományból való olvasás illetve az állományba való írás egysége a komponens.állományba való írás egysége a komponens.

Az elemekhez a rendszer sorszámot rendel 0-Az elemekhez a rendszer sorszámot rendel 0-tól kezdődően. tól kezdődően.

Az elérés szekvenciálisa (Az elérés szekvenciálisa (ReadRead, , WriteWrite) vagy a ) vagy a komponensek sorszáma szerint direkt módon komponensek sorszáma szerint direkt módon történhet (az állomány mutató mozgatásával). történhet (az állomány mutató mozgatásával).

Page 13: Egyszerű típusok csoportosítása

A program mindig egy logikai állományt A program mindig egy logikai állományt kezel, melyet hozzá kell rendelnünk egy kezel, melyet hozzá kell rendelnünk egy fizikai állományhoz (fizikai állományhoz (AssignAssign), majd ), majd használat előtt meg kell nyitnunk. használat előtt meg kell nyitnunk.

A A RewriteRewrite eljárás létrehozza, és megnyitja eljárás létrehozza, és megnyitja a logikai fájlhoz rendelt fizikai állomány. a logikai fájlhoz rendelt fizikai állomány. Ha a fizikai fájl már létezett, akkor törli Ha a fizikai fájl már létezett, akkor törli annak tartalmát. annak tartalmát.

A A ResetReset eljárással egy már létező eljárással egy már létező állományt nyithatunk meg. Ekkor az állományt nyithatunk meg. Ekkor az állománymutató az 0. komponensre áll. állománymutató az 0. komponensre áll.

Használat után a Használat után a CloseClose eljárással zárjuk le eljárással zárjuk le fájlunkat!fájlunkat!

Page 14: Egyszerű típusok csoportosítása

ReadRead: a változó típusa egyezzen meg a fájl : a változó típusa egyezzen meg a fájl alaptípusával! Beolvasás után az állomány mutató alaptípusával! Beolvasás után az állomány mutató automatikusan a következő komponensre lép automatikusan a következő komponensre lép (szekvenciális elérés). (szekvenciális elérés).

WriteWrite: a változó típusának meg kell egyeznie a fájl : a változó típusának meg kell egyeznie a fájl elemeinek a típusával, valamint az eljárás után az elemeinek a típusával, valamint az eljárás után az állomány mutató továbblép. állomány mutató továbblép.

EofEof

a fájl szekvenciális feldolgozására: a fájl szekvenciális feldolgozására:

Reset(f)Reset(f)while not Eof(f) dowhile not Eof(f) do begin begin  Read(f,v);   Read(f,v); {a v változóban lévő adat feldolgozása} {a v változóban lévő adat feldolgozása}  end;  end;

Page 15: Egyszerű típusok csoportosítása

Az állomány mutató direkt Az állomány mutató direkt pozicionálását a Seek eljárás valósítja pozicionálását a Seek eljárás valósítja meg. meg.

A FilePos függvénnyel lekérdezhetjük az A FilePos függvénnyel lekérdezhetjük az aktuális pozíciót, a FileSize függvény aktuális pozíciót, a FileSize függvény pedig az állomány elemeinek a számát pedig az állomány elemeinek a számát (méretét) adja vissza.(méretét) adja vissza.

Példák:Példák: Seek(f, FileSize(f)); Seek(f, FileSize(f)); Seek(f, FileSize(f) - 1); Seek(f, FileSize(f) - 1); Seek(f, FileSize(f) - 1); Seek(f, FileSize(f) - 1);

Page 16: Egyszerű típusok csoportosítása

Típusnélküli állományTípusnélküli állomány Deklarálása: Deklarálása: FILEFILE Általában gyors adatmozgatás vagy Általában gyors adatmozgatás vagy

ismeretlen állomány esetén használjuk. ismeretlen állomány esetén használjuk. Hasonló a típusos állományhoz, de az Hasonló a típusos állományhoz, de az

elemeinek nem a típusa, hanem a hossza a elemeinek nem a típusa, hanem a hossza a lényeges. lényeges.

A komponensek hosszát a fájl megnyitásakor A komponensek hosszát a fájl megnyitásakor adhatjuk meg (Reset, Rewrite), az adhatjuk meg (Reset, Rewrite), az alapértelmezés 128 bájt. alapértelmezés 128 bájt.

Az állomány írható, olvasható, az elérés Az állomány írható, olvasható, az elérés szekvenciálisan (BlockRead, BlockWrite szekvenciálisan (BlockRead, BlockWrite eljárásokkal) vagy az elemek sorszáma eljárásokkal) vagy az elemek sorszáma szerint direkt módon történhet.szerint direkt módon történhet.

Page 17: Egyszerű típusok csoportosítása

Típusos mutatóTípusos mutató Deklarálása: Deklarálása: azonosítóazonosító: ^: ^alaptípusalaptípus Pl. Var p1, p2: ^real; Pl. Var p1, p2: ^real;

A mutató egy memóriacímet (4 bájtos: szegmens, A mutató egy memóriacímet (4 bájtos: szegmens, ofszet) tartalmaz, egy ofszet) tartalmaz, egy alaptípusúalaptípusú változóra mutat. változóra mutat.

A mutatóhoz futás közben rendelhetünk A mutatóhoz futás közben rendelhetünk memóriacímet és így tárterületet (dinamikus memóriacímet és így tárterületet (dinamikus adattárolás).adattárolás).

A A NewNew eljárás a heap memóriában foglal területet eljárás a heap memóriában foglal területet a mutatott változó számára, a a mutatott változó számára, a DisposeDispose eljárás eljárás pedig felszabadítja a lefoglalt területet. pedig felszabadítja a lefoglalt területet.

Így lehetővé válik, hogy egy nagy helyfoglalású Így lehetővé válik, hogy egy nagy helyfoglalású adatstruktúra számára csak akkor kössünk le adatstruktúra számára csak akkor kössünk le memóriát, amikor használjuk a változót.memóriát, amikor használjuk a változót.

Page 18: Egyszerű típusok csoportosítása

type TTomb = array[1..1000]of real;type TTomb = array[1..1000]of real;var t: TTomb;var t: TTomb;{A rendszer már a program indításakor lefoglal 6000 {A rendszer már a program indításakor lefoglal 6000 bájtot az adatszegmensben}bájtot az adatszegmensben}

pt: ^TTomb;pt: ^TTomb;{A rendszer a program indításakor csak 4 bájtot foglal {A rendszer a program indításakor csak 4 bájtot foglal le a mutató számára}le a mutató számára}

beginbegin ...... New(pt); New(pt); {A heap-ben létrejön a mutatott változó}{A heap-ben létrejön a mutatott változó}......{Használhatom a pt által mutatott változót (pt^)}{Használhatom a pt által mutatott változót (pt^)}

Dispose(pt)Dispose(pt){A terület felszabadul a heap-ben}{A terület felszabadul a heap-ben}end. end.

Page 19: Egyszerű típusok csoportosítása

Hivatkozás a mutatott változóra:Hivatkozás a mutatott változóra: mutató-azonosítómutató-azonosító^̂ (pl.: pt^[12] := 1) (pl.: pt^[12] := 1)

Mutató típusú konstans: Mutató típusú konstans: NilNil. . A A NilNil nem mutat sehová. (Pl. láncolt nem mutat sehová. (Pl. láncolt lista végének a jelzésére lista végének a jelzésére használhatjuk). használhatjuk).

Page 20: Egyszerű típusok csoportosítása

Láncolt listák Láncolt listák A különböző típusú láncolt listák nagyon A különböző típusú láncolt listák nagyon

fontos adatszerkezetek a fontos adatszerkezetek a számítástechnikában. számítástechnikában.

Az egyes adatelemek (rekordok) közötti Az egyes adatelemek (rekordok) közötti csatolást mutatókkal valósíthatjuk meg, így csatolást mutatókkal valósíthatjuk meg, így a rekordnak van egy mutató típusú a rekordnak van egy mutató típusú mezője, melynek alaptípusa maga a rekordmezője, melynek alaptípusa maga a rekord

Pl:Pl:type Mutato = ^Adatelem;type Mutato = ^Adatelem;

          Adatelem = recordAdatelem = record       Adat: real;       Adat: real;       Kovetkezo: Mutato;       Kovetkezo: Mutato;     end;     end;

var Elso, Uj, Aktualis: Mutato;var Elso, Uj, Aktualis: Mutato;

Page 21: Egyszerű típusok csoportosítása

Fűzzük fel láncolt listára a billentyűzetről Fűzzük fel láncolt listára a billentyűzetről beolvasott számokat. Írassuk ki a listát!beolvasott számokat. Írassuk ki a listát!

program Lista1;program Lista1;uses Crt;uses Crt;type TMutato = ^TAdatElem; type TMutato = ^TAdatElem; TAdatElem = record TAdatElem = record Adat: integer; Adat: integer; Kovetkezo: TMutato; Kovetkezo: TMutato; end; end;var Elso, Aktualis, Uj: TMutato; var Elso, Aktualis, Uj: TMutato; a: integer; a: integer;

begin begin ClrScr; ClrScr;

Page 22: Egyszerű típusok csoportosítása

ReadLn(a);ReadLn(a);Elso := nil;Elso := nil;while a <> 0 do while a <> 0 do begin begin New(Uj); {Az Uj mutatóhoz memóriaterületNew(Uj); {Az Uj mutatóhoz memóriaterület rendelése} rendelése} Uj^.Adat := a; Uj^.Adat := a; Uj^.Kovetkezo := nil; Uj^.Kovetkezo := nil; if Elso = nil then if Elso = nil then Elso:=uj {Első rekord, az Elso mutat az Uj-ra} Elso:=uj {Első rekord, az Elso mutat az Uj-ra} else else Aktualis^.Kovetkezo := Uj; Aktualis^.Kovetkezo := Uj; {Az Aktualis-hoz csatoljuk az Uj-at} {Az Aktualis-hoz csatoljuk az Uj-at} Aktualis := Uj; {Az Aktualis léptetése}Aktualis := Uj; {Az Aktualis léptetése} ReadLn(a)ReadLn(a) end; end;

Page 23: Egyszerű típusok csoportosítása

{A lista megjelenítése}{A lista megjelenítése}WriteLn;WriteLn;Aktualis := Elso;Aktualis := Elso;while Aktualis <> nil dowhile Aktualis <> nil do begin begin WriteLn(Aktualis^.Adat); WriteLn(Aktualis^.Adat); Aktualis := Aktualis^.Kovetkezo Aktualis := Aktualis^.Kovetkezo end; end; end. end.

Page 24: Egyszerű típusok csoportosítása

Típusnélküli mutató - PointerTípusnélküli mutató - Pointer

Deklarálása: Deklarálása: POINTERPOINTER Egy négy bájtos memóriacímet tartalmaz. Egy négy bájtos memóriacímet tartalmaz. A mutatott változónak nincs típusa. A mutatott változónak nincs típusa. A típusnélküli műveleteknél használjuk (pl. A típusnélküli műveleteknél használjuk (pl.

adatmozgatás).adatmozgatás). A A GetMemGetMem eljárással foglalhatunk le egy eljárással foglalhatunk le egy

megadott méretű területet a heap-ben a megadott méretű területet a heap-ben a mutatónk számára. mutatónk számára.

Ha a memóriaterületre már nincs Ha a memóriaterületre már nincs szükségünk a szükségünk a FreeMemFreeMem eljárással azt eljárással azt felszabadíthatjuk. felszabadíthatjuk.

Page 25: Egyszerű típusok csoportosítása

Saját unit készítéseSaját unit készítése Az egységek (unitok) előre lefordított Az egységek (unitok) előre lefordított

programmodulok. programmodulok. Általában egy adott területhez tartozó Általában egy adott területhez tartozó

eljárásokat, függvényeket tartalmaznak, eljárásokat, függvényeket tartalmaznak, illetve deklarálják az általuk használt illetve deklarálják az általuk használt konstansokat, típusokat, változókat. konstansokat, típusokat, változókat.

Mivel a kódszegmens maximálisan 64 kB Mivel a kódszegmens maximálisan 64 kB lehet, így programunk nagysága is lehet, így programunk nagysága is korlátozott. Ha elértük a határt (kb. 2-3000 korlátozott. Ha elértük a határt (kb. 2-3000 programsor), akkor programunk egyes részeit programsor), akkor programunk egyes részeit saját unitokban helyezhetjük el, melyek saját unitokban helyezhetjük el, melyek külön-külön szintén 64 kB méretűek lehetnek.külön-külön szintén 64 kB méretűek lehetnek.

Page 26: Egyszerű típusok csoportosítása

Az egység felépítése:Az egység felépítése:

Egységfej:Egységfej:Unit Unit azonosítóazonosító;;

Illesztő rész:Illesztő rész:INTERFACEINTERFACE

Kifejtő rész:Kifejtő rész:IMPLEMENTATION IMPLEMENTATION

Inicializáló rész:Inicializáló rész:[BEGIN [BEGIN [[utasítás utasítás [; [; utasításutasítás...]] ...]]

END. END.

PéldaPélda