Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Programozás és programozás módszertan. 3. Feladatmegoldás számítógéppel – részletesen az egyes lépésekről - KÓDOLÁS Programozási nyelvek csoportosítási.

Hasonló előadás


Az előadások a következő témára: "Programozás és programozás módszertan. 3. Feladatmegoldás számítógéppel – részletesen az egyes lépésekről - KÓDOLÁS Programozási nyelvek csoportosítási."— Előadás másolata:

1 Programozás és programozás módszertan

2 3. Feladatmegoldás számítógéppel – részletesen az egyes lépésekről - KÓDOLÁS Programozási nyelvek csoportosítási szempontjai Programozási nyelvek csoportosítási szempontjai I. Emberközeliség szerint 1.Alacsony szintű a) Gépi kód Az utasítások és az adatok is számok Az utasítások és az adatok is számok Az ember számára szinte kezelhetetlen Az ember számára szinte kezelhetetlen A programozó közvetlenül a processzor utasításait írja A programozó közvetlenül a processzor utasításait írja b) Assembly A gépi kódú utasításoknak pár karakterből álló szimbólumok felelnek meg (mnemonik) A gépi kódú utasításoknak pár karakterből álló szimbólumok felelnek meg (mnemonik)

3 3. Feladatmegoldás számítógéppel – részletesen az egyes lépésekről - KÓDOLÁS Programozási nyelvek csoportosítási szempontjai Programozási nyelvek csoportosítási szempontjai I. Emberközeliség szerint 2.Magas szintű A beszélt emberi nyelvhez (általában angolhoz) közeli programozási nyelvek A beszélt emberi nyelvhez (általában angolhoz) közeli programozási nyelvek Az ipari méretű programozás hívta életre őket Az ipari méretű programozás hívta életre őket Néhány példa: BASIC, Pascal, Java, PL-1, C, Ada… Néhány példa: BASIC, Pascal, Java, PL-1, C, Ada…

4 3. Feladatmegoldás számítógéppel – részletesen az egyes lépésekről - KÓDOLÁS Programozási nyelvek csoportosítási szempontjai Programozási nyelvek csoportosítási szempontjai II. Strukturáltság szerint 1.Strukturált Csak a strukturált programozás eszközeit megvalósító utasításai vannak Csak a strukturált programozás eszközeit megvalósító utasításai vannak Támogatja a program részekre, alprogramokra bontását (eljárások, függvények) Támogatja a program részekre, alprogramokra bontását (eljárások, függvények) Pl.: C, Pascal, Java Pl.: C, Pascal, Java 2.Nem strukturált Pl.: Assembly, eredeti BASIC nyelv Pl.: Assembly, eredeti BASIC nyelv

5 3. Feladatmegoldás számítógéppel – részletesen az egyes lépésekről - KÓDOLÁS Programozási nyelvek csoportosítási szempontjai Programozási nyelvek csoportosítási szempontjai III. Alkalmazási kör szerint 1.Általános célú Elméletileg bármilyen programozási feladat megoldására alkalmas Elméletileg bármilyen programozási feladat megoldására alkalmas Emiatt azonban nincs optimalizálva egy speciális feladatra Emiatt azonban nincs optimalizálva egy speciális feladatra Pl.: C, Pascal, BASIC Pl.: C, Pascal, BASIC 2.Speciális célú nyelvek Általában egy feladatra optimalizáltak, pl. szövegfeldolgozás, szimuláció, adatbáziskezelés Általában egy feladatra optimalizáltak, pl. szövegfeldolgozás, szimuláció, adatbáziskezelés Pl.: PROLOG, SIMULA, SQL, dBase Pl.: PROLOG, SIMULA, SQL, dBase

6 3. Feladatmegoldás számítógéppel – részletesen az egyes lépésekről - KÓDOLÁS Programozási nyelvek csoportosítási szempontjai Programozási nyelvek csoportosítási szempontjai IV. Fejlettség szerint 1. Generációs nyelvek 1. Generációs nyelvek Gépi kód Gépi kód 2. Generációs nyelvek 2. Generációs nyelvek Már vannak benne vezérlési szerkezetek, az utasítások el vannak nevezve Már vannak benne vezérlési szerkezetek, az utasítások el vannak nevezve Pl. Assembly, ALGOL60, FORTRAN Pl. Assembly, ALGOL60, FORTRAN 3. Generációs nyelvek 3. Generációs nyelvek A magas szintű programnyelvek többsége, struktúrált utasításaival, alprogramok lehetőségével A magas szintű programnyelvek többsége, struktúrált utasításaival, alprogramok lehetőségével 4. Generációs nyelvek 4. Generációs nyelvek Programgenerátorok, beépített adatbáziskezelőt tartalmaznak, a szoftver a háttérben írja a kódot helyettünk Programgenerátorok, beépített adatbáziskezelőt tartalmaznak, a szoftver a háttérben írja a kódot helyettünk Pl.: Visual Basic, Visual C++, Delphi Pl.: Visual Basic, Visual C++, Delphi

7 3. Feladatmegoldás számítógéppel – részletesen az egyes lépésekről - KÓDOLÁS Programozási nyelvek csoportosítási szempontjai Programozási nyelvek csoportosítási szempontjai V. Fordítás típusa szerint A forráskódot, amit a programozó létrehoz, a futtatáshoz gépi kódba kell alakítani, ez a fordítás A forráskódot, amit a programozó létrehoz, a futtatáshoz gépi kódba kell alakítani, ez a fordítás a)Értelmező (interpreter) típusú nyelvek A fordítás a program futása közben, az adott sor lefuttatása előtt történik A fordítás a program futása közben, az adott sor lefuttatása előtt történik A futtatás emiatt lassúbb A futtatás emiatt lassúbb A szintaktikai (nyelvtani) programhibák is csak futás közben derülnek ki A szintaktikai (nyelvtani) programhibák is csak futás közben derülnek ki Pl. : korai BASIC-ek (Commodore 64, ZX Spectrum, Quick Basic) Pl. : korai BASIC-ek (Commodore 64, ZX Spectrum, Quick Basic)

8 3. Feladatmegoldás számítógéppel – részletesen az egyes lépésekről - KÓDOLÁS Programozási nyelvek csoportosítási szempontjai Programozási nyelvek csoportosítási szempontjai V. Fordítás típusa szerint b)Fordító (compiler) típusú nyelvek A fordítás a program futása előtt történik A fordítás a program futása előtt történik A futtatás emiatt gyorsabb (a gépi kódú program fut) A futtatás emiatt gyorsabb (a gépi kódú program fut) A szintaktikai (nyelvtani) programhibák már futás előtt kiderülnek A szintaktikai (nyelvtani) programhibák már futás előtt kiderülnek Pl. : Pascal, C, C++, Delphi… Pl. : Pascal, C, C++, Delphi…

9 4. A Turbo Pascal nyelv alapjai Névadó: Blaise Pascal, XVII. Századi matematikus, filozófus, teológus. (Pascal-háromszög ->binomiális együtthatók; Pascal-tétel: a nyomás egyenletes terjedésének törvénye, róla nevezték el a nyomás SI mértékegységét is) Miért névadó: mert ő készítette az első működő mechanikus számológépet Névadó: Blaise Pascal, XVII. Századi matematikus, filozófus, teológus. (Pascal-háromszög ->binomiális együtthatók; Pascal-tétel: a nyomás egyenletes terjedésének törvénye, róla nevezték el a nyomás SI mértékegységét is) Miért névadó: mert ő készítette az első működő mechanikus számológépet Megalkotója: Niklaus Wirth, a zürichi Műszaki egyetem tanára (1968), első fordítóprogram: 1970 (őse: ALGOL- 60) Megalkotója: Niklaus Wirth, a zürichi Műszaki egyetem tanára (1968), első fordítóprogram: 1970 (őse: ALGOL- 60) 1973: szabványos Pascal nyelv definiálása 1973: szabványos Pascal nyelv definiálása 1983: Borland – Turbo Pascal (mert gyors a fordítóprogram) 1983: Borland – Turbo Pascal (mert gyors a fordítóprogram) 1991: Turbo Pascal for Windows 1991: Turbo Pascal for Windows 1992: Borland Pascal (védett módú programozás) 1992: Borland Pascal (védett módú programozás) 1995: Object Pascal, Delphi 1995: Object Pascal, Delphi

10 4. A Turbo Pascal nyelv alapjai Besorolása: Besorolása: –Magas szintű nyelv (az angol nyelv logikáját követi, de szigorúan kötött szintaktikai szabályai vannak) –Struktúrált nyelv (vannak nem struktúrált utasításai is – goto, halt, exit - de ezeket nem fogjuk tanulni) –Általános célú nyelv (különösen ajánlják első nyelvként, programozást tanulóknak) –TP: 3. generációs, Delphi: 4. generációs nyelv –Neumann-elvű nyelv, de tartalmaz objektum-elvű kiegészítést, ami az eredeti Pascalban nem volt –Erősen típusos nyelv – minden azonosítót, amit használunk, deklarálni kell. (Egyetlen hátránya is ebből adódik: az első működő programhoz viszonylag sok ismeretet kell elsajátítani.)

11 4.1. A Turbo Pascal program általános szerkezete – csak alapok Program ;{programfej} Var {Változó deklarációk}{deklarációs rész} {egyéb deklarációk} Begin {utasítások}{programtörzs} End.

12 4.2. A Turbo Pascal fejlesztői környezete, menűrendszere Mi a Turbo Pascal 7.0 változatát használjuk Mi a Turbo Pascal 7.0 változatát használjuk A futtatható állomány a c:\TP\bin\turbo.exe, de az asztalon van hozzá parancsikon. A futtatható állomány a c:\TP\bin\turbo.exe, de az asztalon van hozzá parancsikon. c:\TP\bin\turbo.exe

13 4.3. A Turbo Pascal nyelv nyelvi elemei 1. A nyelv jelkészlete –Az angol ABC betűi (A..Z, a..z) (a kis-és nagybetűket a Pascal nem különbözteti meg!!!) –Decimális számjegyek (0..9) –Hexadecimális számjegyek (0..9,a..z,A..z) –Szóköz (ASCII 32) és a többi vezérlőkarakter (ASCII 0..31) –Egyéb speciális jelek: + - * / =. ; ‘ ^ $ # [ ] ( ) { } –Bizonyos karakterpárok speciális jelentést hordoznak, ezek közé nem szabad szóközt tenni, és nem szabad a sorrendjüket felcserélni: := = <>.. (* *)

14 4.3. A Turbo Pascal nyelv nyelvi elemei 2. A foglalt szavak –A foglalt (fenntartott) szavak a Pascal nyelv utasításaiban és deklarációiban szereplő kulcsszavak, más célra használni őket tilos. –Néhány példa: program, begin, end, for, while, repeat, do, if, then, else (a teljes lista a könyvben található) –Vannak még ún. szabványos direktívák, ezeket lehet saját névként használni, de nem ajánlott (absolute, private, public, virtual, stb.)

15 4.3. A Turbo Pascal nyelv nyelvi elemei 3. A program utasításai és sorai –A Pascal program utasításokból áll, az utasításokat pontosvessző választja el (;) –Kivétel: a program végét záró end, aminek a végén pont (.) van! –Az utasítások a program soraiban vannak (a program egy szabványos szöveges fájl), de egy sor nem feltétlenül egy utasítás, és egy sorba több utasítás is írható –Az utasítások a foglalt szavakon kívül egyéb elemeket is tartalmazhatnak (ld. később)

16 4.3. A Turbo Pascal nyelv nyelvi elemei 4. Megjegyzések –A programban megjegyzéseket helyezhetünk el, amelyeket a fordítóprogram nem vesz figyelembe, csak a programozónak jelentenek a program későbbi olvasásánál könnyebbséget –Megjegyzéseket a programban { } vagy (* *) zárójelpárok között helyezhetünk el –Speciális megjegyzések a programban az ún. fordítói direktívák, amelyek a fordítóprogramnak adott utasítások. Ezek szintaxisa: {$...} –A fordítói direktívák lehetnek kapcsolódirektívák, amelyek a fordító valamely tulajdonságát (pl. értékhatár-ellenőrzés) kapcsolják ki v be. (példa: {R-}, értékhatár-ellenőrzés kikapcsolása –Léteznek ún. paraméter direktívák, amelyek a fordítóprogram valamely paraméterét állítják be, pl. a memória egyes területének méretei (ld. Később, a memóriakezelésnél) –A fordítói direktívák vonatkozhatnak a forrásszöveg egészére (globális direktívák), vagy annak egy részére (lokális direktívák) –Pl. a {$R+} globális, míg a {$I+} lokális direktíva

17 4.3. A Turbo Pascal nyelv nyelvi elemei 5. Azonosítók –A Pascal programban az általunk létrehozott elemeknek (változó, konstans, típus, eljárás, függvény, objektum, metódus, unit, rekord- és objektummezők, és maga a program) nevet kell adni, hogy később hivatkozni lehessen rájuk. –A névnek egyedinek kell lennie –Az azonosító bármilyen hosszú lehet, de csak az első 63 karaktert veszi figyelembe a fordító –Az azonosítónak betűvel vagy aláhúzás karakterrel(_) kell kezdődnie –A további karakterek betűk, számok és aláhúzásjelek lehetnek –A név lehetőleg utaljon a tartalomra („beszélő” nevek, azonosítók) –Ajánlás: ha több szóból állna a név, a szavak kezdőbetűit írjuk nagybetűvel (pl. FajlBeolvas)

18 4.3. A Turbo Pascal nyelv nyelvi elemei 6. Számok –Egész és valós számokat egyaránt használhatunk, és nem csak a tízes, hanem a tizenhatos számrendszert is használhatjuk –A programban elhelyezett számértékeket számkonstansnak nevezzük –Egész megadása: előjel és számjegyek –Hexadecimális egész: $ vezeti be, és $ és $FFFFFFFF közé kell esnie –Valós számok megadása: tizedes törtként adjuk meg, vagy pedig hatványkitevős (exponenciális) alakban –A tizedest a PONT (.) jelöli, az egészrész elhagyható –A hatványkitevő előtt e vagy E áll, a kitevő pedig tetszőleges egész szám lehet

19 4.3. A Turbo Pascal nyelv nyelvi elemei 7. Szövegkonstansok –A programban elhelyezett karakterlánc (karaktersorozat, sztring) tipusú állandókat nevezzük így –A szövegkonstansban tetszőleges karakter előfordulhat –Aposztróf (egyszeres idézőjel, felsővessző, ‘, Shift+1) határolja –Ha a szövegben is szerepel felsővessző, a karaktert duplázni kell (‘Rock’’n’’roll ’) –Az üres karakterlánc jele a ‘’ –Vezérlőkaraktereket is adhatunk meg, ASCII kódjukkal, de ezeknek az aposztrófokon kívül kell lenniük, és a kódjuk elé kettőskeresztet (hash) kell tenni (#7=csengő; #13=kocsivissza, #10=soremelés) –Ha a billentyűzeten nem szereplő karaktert akarunk beírni, itt is használható a jobb oldali Alt+ a numerikus billentyűzeten a karakter kódja

20 4.3. A Turbo Pascal nyelv nyelvi elemei 8. Operandusok –A program kifejezéseiben elhelyezett állandókat, változókat és függvényhívásokat nevezzük így –Pl. a+b/sqr(x)+1.34 A,b,c,x: változók 1.34: állandó Sqr: függvényhívás (négyzetre emelés)

21 4.3. A Turbo Pascal nyelv nyelvi elemei 9. Operátorok –A program kifejezéseiben elhelyezett állandókat, változókat és függyvényhívásokat összekapcsoló műveleti jeleket nevezzük így –Jelölhetnek aritmetikai (+,-,*,/), logikai (and, or, not), és relációs (,=,>=, ) műveletet –Köztük: elsőbbségi (precedencia) szabályok –Pl. a+b/sqr(x) ,-,*,/: operátorok +,-,*,/: operátorok

22 4.3. A Turbo Pascal nyelv nyelvi elemei 9. Kifejezések –A kifejezések operátorokból és operandusokból állnak, ezen kívül zárójeleket tartalmazhatnak –Két alapvető fajtájuk az aritmetikai kifejezés és a logikai kifejezés –A logikai kifejezések értéke egy logikai érték (igaz vagy hamis) –Az aritmetikai kifejezések értéke egy számérték

23 4.4. A Pascal kifejezésekről részletesen 1. Egyoperandusú és kétoperandusú operátorok –Azt a műveleti jelet, amely egyetlen operandusa előtt szerepel, egyoperandusú operátornak nevezzük –Ilyen az előjel, és a tagadás (not) –Amennyiben az operandusok közrefogják az operátort, kétoperandusú műveletről, operátorról beszélünk –Ilyen pl. az összes aritmetikai operátor, a logikai „és” és „vagy” (and, or)

24 4.4. A Pascal kifejezésekről részletesen 2. Elsőbbségi (precedencia) szabályok –A műveletek kiértékelési sorrendjét határozzák meg –A Pascalban négy precedenciaszint van a zárójelezésen kívül, ami mindent felülbírál –Két különböző precedenciájú művelet közül mindig az erősebb hajtódik végre először –Azonos precedenciájú műveletek között a balról jobbra szabály érvényes

25 4.4. A Pascal kifejezésekről részletesen 2. Elsőbbségi (precedencia) szabályok –Legerősebbek az egyoperandusú műveletek (+,- előjelként, not, (memóriacím lekérdezés) ) –Második szint: *,/ div, mod, and, shr, shl), ezek a multiplikatív műveletek –Harmadik szint a +,- or, xor (additív műveletek) –A legutolsó szinten a relációs, összehasonlító műveletek állnak (=,,>=,, in )

26 4.4. A Pascal kifejezésekről részletesen 3. A műveletekről részletesen az adott típus tulajdonságainál beszélünk, mert: Típus= adatstruktúra a memóriában + műveletei

27 4.5. A Turbo Pascal utasításai I. Egyszerű utasítások Az egyszerű utasítások segítségével egyetlen lépésben elvégezhető műveleteket írhatunk elő a program számára

28 4.5. A Turbo Pascal utasításai I. Egyszerű utasítások 1. Üres utasítás: ; akkor használjuk, ha a nyelv szabályai miatt kell egy utasítást elhelyeznünk 2. Értékadó utasítás := 3. Eljáráshívó utasítás ;);

29 4.5. A Turbo Pascal utasításai II. Strukturált utasítások Ezekkel az utasításokkal valósíthatóak meg a tanult vezérlési szerkezetek 1. Utasításblokk (összetett utasítás): Akkor használjuk, ha a nyelv szabályai szerint CSAK EGY utasítást írhatnánk, de mégis több utasítást kell írnunk. begin ; ; … end;

30 4.5. A Turbo Pascal utasításai II. Strukturált utasítások 1. Feltételes utasítások a)Az IF utasítás – egy- és kétirányú elágazás megvalósítása if then [else ]; Feltétel: logikai kifejezés Mindkét ágban csak EGY utasítás állhat Az ELSE ág elhagyható Az ELSE előtt soha nem állhat pontosvessző

31 4.5. A Turbo Pascal utasításai II. Strukturált utasítások 1. Feltételes utasítások a)Az IF utasítás – egy- és kétirányú elágazás megvalósítása Speciális esetek (1): Egyirányú elágazás: If then ;

32 4.5. A Turbo Pascal utasításai II. Strukturált utasítások 1. Feltételes utasítások a)Az IF utasítás – egy- és kétirányú elágazás megvalósítása Speciális esetek (2): Több utasítás az egyes ágakban: If thenIf then beginbegin {utasítások}{utasítások} endend; else elsebegin{utasítások}end;

33 4.5. A Turbo Pascal utasításai II. Strukturált utasítások 1. Feltételes utasítások a)Az IF utasítás – egy- és kétirányú elágazás megvalósítása Speciális esetek (3): If utasítások egymásba ágyazása If then If then else else If then If then else else ; else ;

34 4.5. A Turbo Pascal utasításai II. Strukturált utasítások 1. Feltételes utasítások b)A CASE utasítás Többirányú utasítás megvalósítására Többirányú utasítás megvalósítására Általános alakja: Általános alakja: Case of <érték1>:;<érték2>:;..<értékN>: Else ; Else ;End;{case}

35 4.5. A Turbo Pascal utasításai II. Strukturált utasítások 1. Feltételes utasítások b)A CASE utasítás Tudnivalók: Tudnivalók: –A végén álló end-nek nincs begin párja!!! –Minden utasítás helyére utasításblokk is írható –A feltétel helyén álló kifejezés csak sorszámozott tipusú lehet (pl: nem lehet valós, karakterlánc)

36 4.5. A Turbo Pascal utasításai II. Strukturált utasítások 1. Feltételes utasítások b)A CASE utasítás Müködése Müködése –Az utasítás kiértékeli a feltételt –Annak az ágnak az utasítása(i) hajtódnak végre, amely a kiszámított érték ágán van –Ha a kiszámított érték nincs a case ágai előtt felsorolt értékek között, akkor az else ág hajtódik végre (ha van). Ha nincs, akkor nem hajtódik végre semmi

37 4.5. A Turbo Pascal utasításai II. Strukturált utasítások 2. Ciklusutasítások a)A WHILE.. DO utasítás Elöltesztelő utasítás megvalósítására Elöltesztelő utasítás megvalósítására Általános alakja: Általános alakja: While do ; Tudnivalók: –Az utasítás helyére utasításblokk is írható –A feltétel a ciklusba való belépés feltétele –Ha a feltétel hamis, a ciklusmag utasítása egyszer sem hajtódik végre –Ha a feltétel igaz, akkor a ciklusmagban el kell helyezni olyan utasítást, ami megváltoztatja a feltételben szereplő kifejezés értékét, mert ha ilyen nincs, végtelen ciklus keletkezhet

38 4.5. A Turbo Pascal utasításai II. Strukturált utasítások 2. Ciklusutasítások b)A REPEAT.. UNTIL utasítás Hátultesztelő utasítás megvalósítására Hátultesztelő utasítás megvalósítására Általános alakja: Általános alakja: Repeat until ; Tudnivalók: –A ciklusmagba több utasítás is írható, nem kell begin-end –A feltétel a ciklusból való kilépés feltétele –A ciklusmag egyszer mindenképpen végrehajtódik –Ha a feltétel hamis, akkor a ciklusmagban el kell helyezni olyan utasítást, ami megváltoztatja a feltételben szereplő kifejezés értékét, mert ha ilyen nincs, végtelen ciklus keletkezhet

39 4.5. A Turbo Pascal utasításai II. Strukturált utasítások 2. Ciklusutasítások c)A FOR.. TO/DOWNTO.. DO utasítás Hátultesztelő utasítás megvalósítására Hátultesztelő utasítás megvalósítására Általános alakja: Általános alakja: For := to do ; For := downto do ; Tudnivalók: –To esetén a ciklusváltozó egyesével növekszik, downto esetén egyesével csökken, más lehetőség nincs –A ciklusmag ismétléseinek száma: |végérték-kezdőérték| –Ha to szerepel, és végérték

40 4.6. A Turbo Pascal adattípusai Adattípusok Egyszerűtípusok String(karakterlánc)ValósakSorszámozotttípusok Boolean(logikai)EgészekChar(karakter)FelsoroltRész-tartomány MutatótípusokStruktúrálttípusok Array(tömb)File(fájl)Record(rekord)Set(halmaz)Object(objektum)

41 I. Egyszerű típusok 1. Numerikus típusok a.Egész típusok 5 féle egész típus létezik: byte, word, shortint, integer, longint 5 féle egész típus létezik: byte, word, shortint, integer, longint Az egészek sorszámozott típusúak, a legkisebb érték sorszáma 0 Az egészek sorszámozott típusúak, a legkisebb érték sorszáma 0 TípusnévÉrtéktartományHelyfoglalásTárolás Byte byte Bináris Word byte Bináris Shortint byte Kettes komplemens Integer byte Kettes komplemens Longint byte Kettes komplemens

42 4.6. A Turbo Pascal adattípusai I. Egyszerű típusok 1. Numerikus típusok a.Egész típusok Műveleteik: Műveleteik: Aritmetikai műveletek: +, -, * (+ és – előjelként is), DIV (osztás egészrésze), MOD (osztás maradéka) Aritmetikai műveletek: +, -, * (+ és – előjelként is), DIV (osztás egészrésze), MOD (osztás maradéka) Bitenkénti logikai műveletek (AND, OR, XOR) Bitenkénti logikai műveletek (AND, OR, XOR) Bitenkénti eltolás (SHL, SHR) Bitenkénti eltolás (SHL, SHR)

43 4.6. A Turbo Pascal adattípusai I. Egyszerű típusok 1. Numerikus típusok a.Egész típusok A kettes komplemens ábrázolás: A kettes komplemens ábrázolás: Probléma: negatív értékeket nem tudunk a sima kettes számrendszerbeli tárolással leképezni a memóriában Probléma: negatív értékeket nem tudunk a sima kettes számrendszerbeli tárolással leképezni a memóriában Pozitív értékekre kettes számrendszerbeli tárolás Pozitív értékekre kettes számrendszerbeli tárolás Negatív értékekre feltétel az, hogy ugyanazt az értéket és a negatív megfelelőjét összeadva 0-t kapjunk. Ezért az pl. nem jó, hogy 7 biten a szám, és a legfelső bit az előjel (előjel-abszolútértékes ábrázolás) Negatív értékekre feltétel az, hogy ugyanazt az értéket és a negatív megfelelőjét összeadva 0-t kapjunk. Ezért az pl. nem jó, hogy 7 biten a szám, és a legfelső bit az előjel (előjel-abszolútértékes ábrázolás) Más megoldás: inverz kódú ábrázolás: minden bitet invertálunk, a legfelső bit 1 (ez jelzi a negatívot) (ezt az ábrázolást bizonyos lyukszalag vezérlésű szerszámgépekben alkalmazzák) Más megoldás: inverz kódú ábrázolás: minden bitet invertálunk, a legfelső bit 1 (ez jelzi a negatívot) (ezt az ábrázolást bizonyos lyukszalag vezérlésű szerszámgépekben alkalmazzák)

44 4.6. A Turbo Pascal adattípusai I. Egyszerű típusok 1. Numerikus típusok a.Egész típusok A kettes komplemens ábrázolás: A kettes komplemens ábrázolás: A jó megoldás: vegyük a szám inverzét, és adjunk hozzá 1- t, ez a kettes komplemens. Ezzel ábrázoljuk a negatív számokat. A jó megoldás: vegyük a szám inverzét, és adjunk hozzá 1- t, ez a kettes komplemens. Ezzel ábrázoljuk a negatív számokat. Példa: Példa: 9= Inverze: binárisan Eredmény: -9= kettes komplemensben Decimális értékének kiszámítása: az alsó 7 bit bináris formájából el kell venni a legfelső bit értékét, vagyis: -9=

45 4.6. A Turbo Pascal adattípusai I. Egyszerű típusok 1. Numerikus típusok a.Egész típusok A kettes komplemens ábrázolás: A kettes komplemens ábrázolás: Összeadva a pozitívot és a negatívot: 9= binárisan -9 = kettes komplemensben Eredmény maradék 1, de azt nem vesszük figyelembe

46 4.6. A Turbo Pascal adattípusai I. Egyszerű típusok 1. Numerikus típusok b.Valós típusok 5 féle egész típus létezik: real, single, double, extended, comp 5 féle egész típus létezik: real, single, double, extended, comp A valósak nem sorszámozott típusok A valósak nem sorszámozott típusok Tárolásuk úgynevezett lebegőpontos formában történik Tárolásuk úgynevezett lebegőpontos formában történik A második négy valós típus csak a {N+} fordítói direktíva mellett lehetséges (8087-es mód bekapcsolása) A második négy valós típus csak a {N+} fordítói direktíva mellett lehetséges (8087-es mód bekapcsolása) TípusnévÉrtéktartományHelyfoglalásPontosság real 2.9* * byte jegy single 4 byte 7-8 jegy double 8 byte jegy extended 10 byte jegy comp EZ 64 BITES EGÉSZ TÍPUS!!! 8 byte

47 4.6. A Turbo Pascal adattípusai I. Egyszerű típusok 1. Numerikus típusok b.Valós típusok Műveleteik: Műveleteik: Aritmetikai műveletek: +, -, *, /, (+ és – előjelként is) Aritmetikai műveletek: +, -, *, /, (+ és – előjelként is)

48 4.6. A Turbo Pascal adattípusai I. Egyszerű típusok 1. Numerikus típusok b.Valós típusok A lebegőpontos ábrázolás A lebegőpontos ábrázolás Exponenciális alakban tároljuk a számot Exponenciális alakban tároljuk a számot Pl.: 3.14*10 -8 Pl.: 3.14*10 -8 Ebben a kifejezésben a részek neve: Ebben a kifejezésben a részek neve: –3.14: mantissza –-8: exponens, kitevő v. karakterisztika A valós típusok nem 10-es számrendszerbeli exponenciális alakban, hanem kettes számrendszerbeli exponenciális alakban tárolódnak A valós típusok nem 10-es számrendszerbeli exponenciális alakban, hanem kettes számrendszerbeli exponenciális alakban tárolódnak

49 4.6. A Turbo Pascal adattípusai I. Egyszerű típusok 1. Numerikus típusok b.Valós típusok A lebegőpontos ábrázolás A lebegőpontos ábrázolás Real esetben: 1 bit előjel, 39 bit mantissza és 8 bit kitevő tárolódik Real esetben: 1 bit előjel, 39 bit mantissza és 8 bit kitevő tárolódik Előjel (1 bit) Mantissza (39 bit) Exponens (8 bit)

50 4.6. A Turbo Pascal adattípusai I. Egyszerű típusok 1. Numerikus típusok b.Valós típusok A lebegőpontos ábrázolás A lebegőpontos ábrázolás További specialitások: További specialitások: –A valóságban az exponens alapja nem 2, hanem 16 (ezt 16 alapú ábrázolásnak hívják –Hogy ne kelljen negatív kitevőt tárolni, a kitevőt eltolják, real esetében 64-gyel, tehát a kitevő-64 számértékét tárolják

51 4.6. A Turbo Pascal adattípusai I. Egyszerű típusok 1. Numerikus típusok b.Valós típusok A lebegőpontos ábrázolás A lebegőpontos ábrázolás A 10-es számrendszerbeli alak kiszámításának képlete: N=(-1) S *0.F*10 E-64 ahol: N – a szám S – előjel F – mantissza E – exponens

52 4.6. A Turbo Pascal adattípusai I. Egyszerű típusok 1. Numerikus típusok b.Valós típusok A lebegőpontos ábrázolás A lebegőpontos ábrázolás Egy példa: N=-17.25N=(-1) S *0.F*10 E-64 S= = binárisan, ezt úgy alakítjuk, hogy az egészrésze 0 legyen, és 16 hatványával legyen megszorozva. Ehhez 8 bittel kell eltolni jobbra (16*16-tal való osztás Eredmény: *16 2 Ebből következik, hogy E=64+2=66, binárisan Ezeket összerakva:

53 4.6. A Turbo Pascal adattípusai I. Egyszerű típusok 2. Logikai (boolean) típus –Csak két értéket vehet fel: igaz (true), hamis (false) –Helyfoglalása a memóriában: 1 byte –Tárolása: False: 0, true: nem 0 érték –Deklarálása: Var L:Boolean –Sorszámozott típus, a false sorszáma 0, a true sorszáma 1

54 4.6. A Turbo Pascal adattípusai I. Egyszerű típusok 3. Szöveges típusok a.Karakter típus (char) –Csak egyetlen karakter tárolására alkalmas –Helyfoglalása a memóriában: 1 byte –Tárolása: az adott karakter ASCII kódjával –Deklarálása: Var ch:char; –Sorszámozott típus, a sorszám a tárolt karakter ASCII kódja –A karakterkonstanst aposztrófok közé kell tenni, pl.: ch:=‘a’;

55 4.6. A Turbo Pascal adattípusai I. Egyszerű típusok 3. Szöveges típusok b.Karakterlánc típus (string) –Maximálisan 255 karakter tárolására alkalmas –Helyfoglalása a memóriában: 256 byte –Tárolása: az első byteon (0. sorszám) az aktuális hossz, az ezt követő byteokon a karakterek ASCII kódjai –Deklarálása: Var s:string; –Ha tudjuk, hogy biztosan nem lesz a tartalma egy bizonyos hossznál hosszabb, akkor rövidebbre is lehet deklarálni: Var s1:string[25]; Ekkor a helyfoglalás a megadott hossz+1 byte

56 4.6. A Turbo Pascal adattípusai I. Egyszerű típusok 3. Szöveges típusok b.Karakterlánc típus (string) –Műveletei: Egy karakter kiemelése a karakterláncból: Egy karakter kiemelése a karakterláncból:S[3] Karakterláncok összefűzése: + Karakterláncok összefűzése: +

57 4.6. A Turbo Pascal adattípusai I. Egyszerű típusok 4. Sorszámozott típusok közös jellemzői –Az eddigiekből nem sorszámozott a string, és a valós típusok –A sorszámozott típusok lehetséges értékei kölcsönösen egyértelműen hozzárendelhetőek a természetes számokhoz –A legkisebb sorszám mindig 0 –A sorszámozott típusoknak vannak közös függvényeik: Ord( : megadja az adott érték sorszámát a típuson belül Ord( : megadja az adott érték sorszámát a típuson belül Succ( : megadja az adott típuson belül a következő értéket Succ( : megadja az adott típuson belül a következő értéket Pred( : megadja az adott típuson belül az előző értéket Pred( : megadja az adott típuson belül az előző értéket Low(

58 4.6. A Turbo Pascal adattípusai I. Egyszerű típusok 4. Sorszámozott típusok közös jellemzői – a felsorolás típus –Magunk is hozhatunk létre tetszőleges sorszámozott típusokat, ennek neve felsorolás (felsorolt) típus –Deklarációjuk két példa alapján: Var nyelv: (angol, nemet, spanyol, olasz); Var nyelv: (angol, nemet, spanyol, olasz); Var evszak: (tavasz, nyar, osz, tel); Var evszak: (tavasz, nyar, osz, tel); –Tudnivalók: A felsorolt értékek azonosítók, így rájuk az azonosítókra vonatkozó szabályok érvényesek A felsorolt értékek azonosítók, így rájuk az azonosítókra vonatkozó szabályok érvényesek A felsorolt értékeknek egyedieknek kell lenniük, mert ha nem azok, bizonyos függvények kiértékelése gondot okozhat: A felsorolt értékeknek egyedieknek kell lenniük, mert ha nem azok, bizonyos függvények kiértékelése gondot okozhat: –pl. az előzőhöz: –Var tantargy (magyar, matek, angol, nemet); –Az angol és nemet értékek sorszáma nem egyértelmű!!!! A felsorolás típusra használhatók az ord, succ, pred, low és high függvények A felsorolás típusra használhatók az ord, succ, pred, low és high függvények

59 4.6. A Turbo Pascal adattípusai I. Egyszerű típusok 4. Sorszámozott típusok közös jellemzői – a résztartomány típus –Egy létező sorszámozott típusból hozhatunk létre annak egy szűkebb tartományát tartalmazó típust, ez a résztartomány (intervallum) típus –Deklarációjuk két példa alapján: Var egyjegyu: 0..9; Var egyjegyu: 0..9; Var kisbetu:’a’..’z’; Var kisbetu:’a’..’z’; –Tudnivalók: A résztartomány típusra használhatók az ord, succ, pred, low és high függvények A résztartomány típusra használhatók az ord, succ, pred, low és high függvények Ha futás közben ellenőrizni kívánjuk azt, hogy átléptük-e a típus határát, akkor a programot a {R+} fordítói direktívával kell lefordítani Ha futás közben ellenőrizni kívánjuk azt, hogy átléptük-e a típus határát, akkor a programot a {R+} fordítói direktívával kell lefordítani

60 4.7. Alprogramok a Turbo Pascalban I. Alapok Alprogramot akkor használunk, amikor ugyanazt a tevékenységet a program különböző helyein kell elvégezni (eddigi tudásunkkal ez csak másolással oldható meg) Alprogramot akkor használunk, amikor ugyanazt a tevékenységet a program különböző helyein kell elvégezni (eddigi tudásunkkal ez csak másolással oldható meg) Az alprogramokat a nevük segítségével aktivizáljuk (hívjuk meg). Az alprogramokat a nevük segítségével aktivizáljuk (hívjuk meg). Az alprogram a hívás hatására elvégzi az algoritmusrészében leírt tevékenységet, majd visszaadja a vezérlést a főprogramnak vagy az őt hívó alprogramnak. Az alprogram a hívás hatására elvégzi az algoritmusrészében leírt tevékenységet, majd visszaadja a vezérlést a főprogramnak vagy az őt hívó alprogramnak.

61 4.7. Alprogramok a Turbo Pascalban II. Előnyeik Az alprogramban a tevékenységet leíró programrészlet csak egyszer szerepel a programban, ezért az rövidebb és áttekinthetőbb lesz. Emiatt egyszerűbb a hibajavítás, módosítás is. Az alprogramban a tevékenységet leíró programrészlet csak egyszer szerepel a programban, ezért az rövidebb és áttekinthetőbb lesz. Emiatt egyszerűbb a hibajavítás, módosítás is. Az alprogram a struktúrált programozási nyelvek egyik legfontosabb eleme. Segítségével egy bonyolult feladat részekre bontható, és könnyebben kezelhető (ez a „felülről lefelé” (top-down) programtervezési módszer) Az alprogram a struktúrált programozási nyelvek egyik legfontosabb eleme. Segítségével egy bonyolult feladat részekre bontható, és könnyebben kezelhető (ez a „felülről lefelé” (top-down) programtervezési módszer) Az alprogram segítségével megvalósítható a program moduláris szerkezete az eddig megismert monolitikus (egy blokkból álló) programhoz képest. Az alprogram külön működő egész, amelynek saját változói, típusai, akár alprogramjai vannak, ezeket a külvilág nem ismeri, csak egy kapcsolódási felületen (interfész) kapcsolódik az őt hívó modulhoz. Az alprogram segítségével megvalósítható a program moduláris szerkezete az eddig megismert monolitikus (egy blokkból álló) programhoz képest. Az alprogram külön működő egész, amelynek saját változói, típusai, akár alprogramjai vannak, ezeket a külvilág nem ismeri, csak egy kapcsolódási felületen (interfész) kapcsolódik az őt hívó modulhoz. Az alprogramok segítségével művelet-orientált programozás valósítható meg, a későbbi felhasználás szempontjából az alprogramok belső működése közömbös. Az alprogramok segítségével művelet-orientált programozás valósítható meg, a későbbi felhasználás szempontjából az alprogramok belső működése közömbös.

62 4.7. Alprogramok a Turbo Pascalban III. Az alprogramok helye a Pascal programban Az alprogramokat a program deklarációs részében kell megírni Az alprogramokat a program deklarációs részében kell megírni Két különböző fajtájú alprogram létezik: Két különböző fajtájú alprogram létezik: –Eljárás: a procedure foglalt szóval deklarálható, és úgy hívható, mintha a Pascal nyelvhez saját „utasítást” írtunk volna –Függvény: a function foglalt szóval deklarálható, a neve meghatározott típusú értéket hordoz, ezért csak kifejezésekben használható –Az eljárások és függvények paramétereiken keresztül kapcsolódnak a program többi részéhez

63 4.7. Alprogramok a Turbo Pascalban III. Az alprogramok helye a Pascal programban Program ; Uses {használt unitok}; {globális deklarációk:} {globális deklarációk:} Const {konstansdeklarációk}; Type {típusdeklarációk}; Var {változódeklarációk}; Procedure ( ); {lokális deklarációk,lehet const, type, var, procedure, function is} Begin {az eljárás törzsének utasításai} End; Function ( ): ; {lokális deklarációk,lehet const, type, var, procedure, function is} Begin {a függvény törzsének utasításai} :=;End;Begin {a főprogram utasításai} End.

64 4.7. Alprogramok a Turbo Pascalban IV. Az eljárásokról részletesen Az eljárás névvel ellátott programrész, amely egy jól meghatározott részfeladat megoldására készül Az eljárás névvel ellátott programrész, amely egy jól meghatározott részfeladat megoldására készül Általános szerkezete: Általános szerkezete: Procedure [(formális paraméter[lista])]; {lokális deklarációk, lehet benne bármilyen deklaráció, const, type, var, procedure, function} Begin {az eljárás törzse, utasítások} End;

65 4.7. Alprogramok a Turbo Pascalban IV. Az eljárásokról részletesen A paraméterek elmaradhatnak, ilyenkor paraméter nélküli eljárásról beszélünk. A paraméterek elmaradhatnak, ilyenkor paraméter nélküli eljárásról beszélünk. Az eljárást a nevével hívjuk meg, a következő módon: Az eljárást a nevével hívjuk meg, a következő módon: ( ); ( ); A hívás hatására a vezérlés az alprogramhoz kerül, végrehajtódnak a benne foglalt utasítások, majd a vezérlés visszakerül a hívó programhoz A hívás hatására a vezérlés az alprogramhoz kerül, végrehajtódnak a benne foglalt utasítások, majd a vezérlés visszakerül a hívó programhoz

66 4.7. Alprogramok a Turbo Pascalban IV. Az eljárásokról részletesen Az eljáráshívás mechanizmusa Hívó program..;...;.. Eljárás

67 4.7. Alprogramok a Turbo Pascalban V. Az eljárás paraméterei Az eljárások paramétereit az eljárásnév után közvetlenül, kerek zárójelek között, típusmegadással kell megadni. Az eljárások paramétereit az eljárásnév után közvetlenül, kerek zárójelek között, típusmegadással kell megadni. A paraméterek lehetővé teszik, hogy az eljárást más adatokkal hívjuk meg A paraméterek lehetővé teszik, hogy az eljárást más adatokkal hívjuk meg Nem kötelező paramétert megadnunk Nem kötelező paramétert megadnunk Két különböző paramétertípus létezik, az értékparaméter, és a változó paraméter Két különböző paramétertípus létezik, az értékparaméter, és a változó paraméter A deklaráció általános alakja: A deklaráció általános alakja: Procedure ( : ;var : ); Az első az értékparaméter, a második a változó paraméter Az első az értékparaméter, a második a változó paraméter

68 4.7. Alprogramok a Turbo Pascalban V. Az eljárás paraméterei 1.Értékparaméterek Akkor használjuk, ha azt szeretnénk, hogy a paraméter értékét a program ne tudja megváltoztatni (elsősorban bemenő paraméterként) Akkor használjuk, ha azt szeretnénk, hogy a paraméter értékét a program ne tudja megváltoztatni (elsősorban bemenő paraméterként) Az alprogram számára csak a paraméter értéke adódik át, az, hogy az eredeti érték a memóriában hol van, NEM. Ezért az alprogram nem tudja az eredetit felülírni Az alprogram számára csak a paraméter értéke adódik át, az, hogy az eredeti érték a memóriában hol van, NEM. Ezért az alprogram nem tudja az eredetit felülírni Ennek a mechanizmusnak érték szerinti paraméterátadás a neve Ennek a mechanizmusnak érték szerinti paraméterátadás a neve A deklarációban (formális paraméterlista) csak típusnév szerepelhet, típusleírás nem A deklarációban (formális paraméterlista) csak típusnév szerepelhet, típusleírás nem Az aktuális paraméterlistában az értékparaméter helyén lehet konstans, kifejezés és változónév is. Az aktuális paraméterlistában az értékparaméter helyén lehet konstans, kifejezés és változónév is. A formális és aktuális paramétereknek értékadás- kompatibilisnek kell lenniük (pl. longint paraméter helyére írhatunk byte típusú értéket, de real típusút nem) A formális és aktuális paramétereknek értékadás- kompatibilisnek kell lenniük (pl. longint paraméter helyére írhatunk byte típusú értéket, de real típusút nem) Az eljárás hívásakor az aktuális paraméterek értéke a formális paraméterekbe másolódik Az eljárás hívásakor az aktuális paraméterek értéke a formális paraméterekbe másolódik A formális paraméterek az alprogram törzsében változókként használhatók A formális paraméterek az alprogram törzsében változókként használhatók Azonban, ha megváltoztatjuk ezek értékét, a változás nem látszik a hívó program számára Azonban, ha megváltoztatjuk ezek értékét, a változás nem látszik a hívó program számára

69 4.7. Alprogramok a Turbo Pascalban V. Az eljárás paraméterei 2.Változó paraméterek Akkor használjuk, ha azt szeretnénk, hogy a paraméter értékét a program meg tudja változtatni (pl. kimenő paraméterként) Akkor használjuk, ha azt szeretnénk, hogy a paraméter értékét a program meg tudja változtatni (pl. kimenő paraméterként) Az alprogram számára átadódik a paraméterként megadott változó címe is, ezért az alprogram felül tudja írni Az alprogram számára átadódik a paraméterként megadott változó címe is, ezért az alprogram felül tudja írni Ennek a mechanizmusnak cím szerinti paraméterátadás a neve Ennek a mechanizmusnak cím szerinti paraméterátadás a neve A deklarációban (formális paraméterlista) csak típusnév szerepelhet, típusleírás nem A deklarációban (formális paraméterlista) csak típusnév szerepelhet, típusleírás nem Az aktuális paraméterlistában az értékparaméter helyén csak változónév lehet Az aktuális paraméterlistában az értékparaméter helyén csak változónév lehet A formális és aktuális paramétereknek értékadás- kompatibilisnek kell lenniük (pl. longint paraméter helyére írhatunk byte típusú értéket, de real típusút nem) A formális és aktuális paramétereknek értékadás- kompatibilisnek kell lenniük (pl. longint paraméter helyére írhatunk byte típusú értéket, de real típusút nem) Az eljárás hívásakor az aktuális paraméterek értéke a formális paraméterekbe másolódik Az eljárás hívásakor az aktuális paraméterek értéke a formális paraméterekbe másolódik A formális paraméterek az alprogram törzsében változókként használhatók A formális paraméterek az alprogram törzsében változókként használhatók Ha megváltoztatjuk ezek értékét, a változás látszik a hívó program számára Ha megváltoztatjuk ezek értékét, a változás látszik a hívó program számára

70 4.7. Alprogramok a Turbo Pascalban VI. A lokális deklarációk Minden eljárásnak lehetnek saját változói, típusai, konstansai, és akár saját eljárásai és függvényei is Minden eljárásnak lehetnek saját változói, típusai, konstansai, és akár saját eljárásai és függvényei is Ezek deklarációja az eljárás fejléce és törzse között helyezkedik el Ezek deklarációja az eljárás fejléce és törzse között helyezkedik el A lokálisan deklarált azonosítók az eljáráson kívül nem látszanak A lokálisan deklarált azonosítók az eljáráson kívül nem látszanak A lokális változók csak az eljárás meghívásakor jönnek létre a memóriában, és amikor az eljárásból kilép a program, a változó megszűnik létezni A lokális változók csak az eljárás meghívásakor jönnek létre a memóriában, és amikor az eljárásból kilép a program, a változó megszűnik létezni A lokális változók a program veremterületén tárolódnak, amelynek mérete alapértelmezetten 16 K. (A veremterület maximuma 64 K) A lokális változók a program veremterületén tárolódnak, amelynek mérete alapértelmezetten 16 K. (A veremterület maximuma 64 K) A főprogram változói máshol tárolódnak, a program adatterületén, amelynek mérete 64 K (ez minden esetben lefoglalódik a program futásának kezdetekor) A főprogram változói máshol tárolódnak, a program adatterületén, amelynek mérete 64 K (ez minden esetben lefoglalódik a program futásának kezdetekor)

71 4.7. Alprogramok a Turbo Pascalban VII. A pascal program blokkszerkezete A Pascal programot a főprogram és tetszőleges mélységben egymásba ágyazott alprogramok (blokkok) alkotják A Pascal programot a főprogram és tetszőleges mélységben egymásba ágyazott alprogramok (blokkok) alkotják Bármelyik blokkban deklarálhatunk azonosítókat Bármelyik blokkban deklarálhatunk azonosítókat Kérdések: Kérdések: –Mikor jön létre és mikor szűnik meg egy deklarált objektum? (élettartam) –A program mely részeiből érhető el (látható) az objektum azonosítója (érvényességi kör) Válaszok: Válaszok: –Élettartam: Egy azonosító akkor létezik, ha a program belép abba a blokkba, ahol deklarálták, a blokkból való kilépéskor megsemmisül. A főprogram változói a program egész futása alatt léteznek.

72 4.7. Alprogramok a Turbo Pascalban VII. A pascal program blokkszerkezete A Válaszok: A Válaszok: –Érvényességi kör: Minden azonosítót a felhasználási helye előtt deklarálni kell Minden azonosítót a felhasználási helye előtt deklarálni kell Abban a blokkban érvényes az azonosító, ahol deklaráltuk Abban a blokkban érvényes az azonosító, ahol deklaráltuk Minden azonosítónak egyedinek kell lennie Minden azonosítónak egyedinek kell lennie Ugyanazzal a névvel különböző blokkokban lehet azonosítót deklarálni Ugyanazzal a névvel különböző blokkokban lehet azonosítót deklarálni Ha egy beépített azonosítóval azonos nevet adunk, akkor az eredeti néven elérhetetlenné válik abban a blokkban (van egy lehetőség, a system előtag, pl. system.writeln(‘szia’); ezzel jelezzük, hogy a system unit beli eljárást hívjuk) Ha egy beépített azonosítóval azonos nevet adunk, akkor az eredeti néven elérhetetlenné válik abban a blokkban (van egy lehetőség, a system előtag, pl. system.writeln(‘szia’); ezzel jelezzük, hogy a system unit beli eljárást hívjuk) PÉLDA PÉLDA

73 4.7. Alprogramok a Turbo Pascalban VII. Függvények Minden érvényes rájuk, amit az eljárásokról elmondtunk Minden érvényes rájuk, amit az eljárásokról elmondtunk A nevük értéket ad vissza, ezért deklarálásukkor meg kell adni a visszatérési érték típusát A nevük értéket ad vissza, ezért deklarálásukkor meg kell adni a visszatérési érték típusát A visszatérési érték típusának megadásakor csak típusnév adható meg, típusleírás nem A visszatérési érték típusának megadásakor csak típusnév adható meg, típusleírás nem Kötelezően kell szerepelnie bennük legalább egy olyan sornak, ahol a függvény neve értéket kap Kötelezően kell szerepelnie bennük legalább egy olyan sornak, ahol a függvény neve értéket kap A visszatérési érték típusa emiatt egyszerű típus kell, hogy legyen A visszatérési érték típusa emiatt egyszerű típus kell, hogy legyen

74 4.8. Adatszerkezetek – összetett adattípusok a TP-ban I. Általános tudnivalók Az összetett adattípusoknak belső szerkezetük van Az összetett adattípusoknak belső szerkezetük van Általában több egyszerű adattípussal írhatók le Általában több egyszerű adattípussal írhatók le Minden adatszerkezetnél megtanuljuk nem csak a szerkezetét, Pascal-beli deklarálásának szabályait, hanem a rá vonatkozó speciális műveleteket is Minden adatszerkezetnél megtanuljuk nem csak a szerkezetét, Pascal-beli deklarálásának szabályait, hanem a rá vonatkozó speciális műveleteket is

75 4.8. Adatszerkezetek – összetett adattípusok a TP-ban II. A tömb típus A tömb előre meghatározott számú, azonos típusú elemből álló adatszerkezet A tömb előre meghatározott számú, azonos típusú elemből álló adatszerkezet Úgy képzelhető el, mint egy egyszerű vagy összetett típusokból felépített valahány dimenziós táblázat Úgy képzelhető el, mint egy egyszerű vagy összetett típusokból felépített valahány dimenziós táblázat Az elemekre való hivatkozást indexelésnek nevezzük, ez az egy speciális művelete van ennek az adattípusnak (szelekciós vagy kiválasztó művelet) Az elemekre való hivatkozást indexelésnek nevezzük, ez az egy speciális művelete van ennek az adattípusnak (szelekciós vagy kiválasztó művelet) Két típussal írható le: az egyik az indexeléshez használt típus, a másik pedig az elemek típusa Két típussal írható le: az egyik az indexeléshez használt típus, a másik pedig az elemek típusa

76 4.8. Adatszerkezetek – összetett adattípusok a TP-ban II. A tömb típus Deklarálása a Turbo Pascalban: Deklarálása a Turbo Pascalban: Var :Array [ ] of Var :Array [ ] of Az indextípus mindig valamilyen sorszámozott típus, általában intervallumtípus Az indextípus mindig valamilyen sorszámozott típus, általában intervallumtípus Ha felsorolunk több indextípust, vesszővel kell elválasztani, és az eredmény többdimenziós tömb lesz Ha felsorolunk több indextípust, vesszővel kell elválasztani, és az eredmény többdimenziós tömb lesz Az, hogy egy elemet hány indexszel tudunk azonosítani (hány indexszel hivatkozunk), megadja a tömb dimenziószámát Az, hogy egy elemet hány indexszel tudunk azonosítani (hány indexszel hivatkozunk), megadja a tömb dimenziószámát Az egydimenziós tömb neve vektor Az egydimenziós tömb neve vektor Az elemtípus tetszőleges típus lehet, névvel vagy akár leírással megadva Az elemtípus tetszőleges típus lehet, névvel vagy akár leírással megadva

77 4.8. Adatszerkezetek – összetett adattípusok a TP-ban II. A tömb típus Példák: Példák: Var T1:Array [1..10] of integer; (Ez egy tízelemű, egészekből álló tömb) Hivatkozás a tömb elemeire: T1[5]:=23; (Ezzel a tömb 5. elemébe, ami egy integer típusú változó, 23-at tettünk)

78 4.8. Adatszerkezetek – összetett adattípusok a TP-ban II. A tömb típus Példák: Példák: Var T2:Array [1..10,1..20] of integer; (Ez egy tíz sorból, minden sorban 20 egész elemből álló tömb) Hivatkozás a tömb elemeire: T2[5,16]:=23; (Ezzel a tömb 5. sorának 16. elemébe, ami egy integer típusú változó, 23-at tettünk) Természetesen többdimenziós tömböt is használhatunk, a háromdimenziósat még könnyű elképzelni, de a többit már nem egyszerű…

79 4.8. Adatszerkezetek – összetett adattípusok a TP-ban II. A tömb típus Példák: Példák: Var T3:Array [byte] of real; (Ez egy 256 elemű, valós elemű tömb, ahol az indexelés 0-tól 255- ig tart) Var T4:Array [Boolean] of Byte; (Ez egy kételemű tömb, van egy false és egy true indexű eleme) Típusként is deklarálhatunk tömböt: Type Tomb=Array [1..100,1..10] of byte; Az indextípusokat külön szögletes zárójelbe is tehetjük mind a deklaráláskor, mind a tömbelemre történő hivatkozáskor: Var T5:Array [1..5][1..7] of longint;...T5[1][1]:=22;

80 4.8. Adatszerkezetek – összetett adattípusok a TP-ban II. A tömb típus Helyfoglalása a memóriában Helyfoglalása a memóriában –A tömb helyfoglalása az elemtípus helyfoglalásának szorzata az elemek darabszámával –Pl. Var T6:Array[1..100,1..5] of byte; Ebben az esetben a helyfoglalás 100*5*1 byte –Vigyázni kell, hogy a változóink összmérete ne haladja meg a 64 Kbyte-ot, mert a program adatszegmense minden esetben maximálisan ekkora lehet

81 4.8. Adatszerkezetek – összetett adattípusok a TP-ban II. A tömb típus Típusfeladatok tömbökkel Típusfeladatok tömbökkel 1.Egydimenziós tömb feltöltése, kiíratása Ehhez mindig for ciklust használunk, mivel tudjuk előre, hogy hány elemet kell feltölteni Ehhez mindig for ciklust használunk, mivel tudjuk előre, hogy hány elemet kell feltölteniPl: Var T7:Array [1..10] of integer; i:byte;.. For i:=1 to 10 do T7[i]:=Random(100); (Kiíratás ugyanígy, csak Writeln(T7[i]); szerepel)

82 4.8. Adatszerkezetek – összetett adattípusok a TP-ban II. A tömb típus Típusfeladatok tömbökkel Típusfeladatok tömbökkel 2.Kétdimenziós tömb feltöltése, kiíratása Ehhez mindig két egymásba ágyazott for ciklust használunk Ehhez mindig két egymásba ágyazott for ciklust használunkPl: Var T7:Array [1..10,1..20] of integer; i,j:byte;.. For i:=1 to 10 do For j:=1 to 20 do T7[i,j]:=Random(100); (Kiíratás ugyanígy, csak Writeln(T7[i,j]); szerepel, többdimenziós esetben )

83 Kitekintés: Programozási tételek I. Mik is ezek? –A programozásban előforduló típusfeladatokra adnak általános megoldást –Az adott feladattípusnak matematikailag bizonyíthatóan helyes és a legoptimálisabb megoldását adják II. Miért most tanuljuk? –A tételek többsége több bemenő adattal végez el valamilyen átalakítást, és ehhez a tömb adatszerkezet ismerete szükséges

84 Kitekintés: Programozási tételek III. Csoportosításuk –Aszerint csoportosítjuk őket, hogy mi a bemenő és kimenő adatuk, eszerint megkülönböztetünk: a)adatsorozathoz egy adatot rendelő tételeket; b)adatsorozathoz adatsorozatot rendelő tételeket

85 Kitekintés: Programozási tételek IV. Adatsorozathoz egy értéket rendelő tételek 1.Sorozatszámítás tétel Bemenő adat: egy N elemű adatsorozat (A tömb) Bemenő adat: egy N elemű adatsorozat (A tömb) Kimenő adat: Egy érték, amelynek kiszámításához az adatsorozat minden elemét felhasználjuk Kimenő adat: Egy érték, amelynek kiszámításához az adatsorozat minden elemét felhasználjuk Szükséges hozzá még egy kiszámítási szabály, amely megmondja, hogy az értéket hogy kapjuk meg a sorozat elemeiből (F) Szükséges hozzá még egy kiszámítási szabály, amely megmondja, hogy az értéket hogy kapjuk meg a sorozat elemeiből (F) Példák: összeg, számtani közép (átlag), mértani közép, négyzetösszeg, harmonikus közép, stb. Példák: összeg, számtani közép (átlag), mértani közép, négyzetösszeg, harmonikus közép, stb.

86 Kitekintés: Programozási tételek IV. Adatsorozathoz egy értéket rendelő tételek 1.Sorozatszámítás tétel Általános algoritmusa (összegre megírva): Általános algoritmusa (összegre megírva): Eljárás Sorozatszámítás Összeg:=0 Ciklus i:=1-től N-ig Összeg:=Összeg+A(i) Ciklus vége Eljárás vége

87 Kitekintés: Programozási tételek IV. Adatsorozathoz egy értéket rendelő tételek 2.Eldöntés tétel Bemenő adat: egy N elemű adatsorozat (A tömb) Bemenő adat: egy N elemű adatsorozat (A tömb) Kimenő adat: Egy logikai érték, amely megmondja, hogy egy adott T tulajdonságú elem előfordul-e az adatsorozatban Kimenő adat: Egy logikai érték, amely megmondja, hogy egy adott T tulajdonságú elem előfordul-e az adatsorozatban Példák: van-e páros, páratlan, hárommal osztható, vagy olyan elem, aminek az előző eleme páratlan, stb. (tetszőlegesen bonyolultat ki lehet találni) Példák: van-e páros, páratlan, hárommal osztható, vagy olyan elem, aminek az előző eleme páratlan, stb. (tetszőlegesen bonyolultat ki lehet találni)

88 Kitekintés: Programozási tételek IV. Adatsorozathoz egy értéket rendelő tételek 2.Eldöntés tétel Általános algoritmusa: Általános algoritmusa: Eljárás Eldöntés i:=1 Ciklus amíg i<=N és A[i] nem T tulajdonságú i:=i+1 Ciklus vége VAN:=i<=N Eljárás vége

89 Kitekintés: Programozási tételek IV. Adatsorozathoz egy értéket rendelő tételek 3.Kiválasztás tétel Bemenő adat: egy N elemű adatsorozat (A tömb) Bemenő adat: egy N elemű adatsorozat (A tömb) Kimenő adat: Egy adott T tulajdonságú elem sorszáma Kimenő adat: Egy adott T tulajdonságú elem sorszáma Előfeltétel: VAN T tulajdonságú elem az adatsorozatban Előfeltétel: VAN T tulajdonságú elem az adatsorozatban Példák: számelméleti feladatok, amelyekhez nem kell tömb: keressük meg egy pozitív természetes szám legkisebb prímosztóját, stb. Példák: számelméleti feladatok, amelyekhez nem kell tömb: keressük meg egy pozitív természetes szám legkisebb prímosztóját, stb.

90 Kitekintés: Programozási tételek IV. Adatsorozathoz egy értéket rendelő tételek 3.Kiválasztás tétel Általános algoritmusa: Általános algoritmusa: Eljárás Kiválasztás i:=1 Ciklus amíg A[i] nem T tulajdonságú i:=i+1 Ciklus vége SORSZÁM:=i Eljárás vége

91 Kitekintés: Programozási tételek IV. Adatsorozathoz egy értéket rendelő tételek 4.(Lineáris) keresés tétel Bemenő adat: egy N elemű adatsorozat (A tömb) Bemenő adat: egy N elemű adatsorozat (A tömb) Kimenő adat: Egy adott T tulajdonságú elem sorszáma, és egy logikai érték, amely megmondja, volt-e T tulajdonságú elem Kimenő adat: Egy adott T tulajdonságú elem sorszáma, és egy logikai érték, amely megmondja, volt-e T tulajdonságú elem Példák: tömbben páros elem keresése, olyan elem keresése, amely két szomszédjának számtani közepe, stb.

92 Kitekintés: Programozási tételek IV. Adatsorozathoz egy értéket rendelő tételek 5.Megszámolás tétel Bemenő adat: egy N elemű adatsorozat (A tömb) Bemenő adat: egy N elemű adatsorozat (A tömb) Kimenő adat: Annak darabszáma, hogy egy adott T tulajdonságú elemből mennyi van Kimenő adat: Annak darabszáma, hogy egy adott T tulajdonságú elemből mennyi van Példák: tömbben páros elemek megszámolása, karakterláncban magánhangzószámolás, stb. Példák: tömbben páros elemek megszámolása, karakterláncban magánhangzószámolás, stb.

93 Kitekintés: Programozási tételek IV. Adatsorozathoz egy értéket rendelő tételek 5.Megszámolás tétel Általános algoritmusa: Általános algoritmusa: Eljárás Megszámolás DB:=0 Ciklus i:=1-től N-ig Ha A(i) T tulajdonságú, akkor DB:=DB+1 Ciklus vége Eljárás vége

94 Kitekintés: Programozási tételek IV. Adatsorozathoz egy értéket rendelő tételek 6.Maximum(minimum)kiválasztás tétel Bemenő adat: egy N elemű adatsorozat (A tömb) Bemenő adat: egy N elemű adatsorozat (A tömb) Szükséges hozzá egy olyan összehasonlíthatósági tulajdonság, amely szerint a kisebb és nagyobb reláció értelmezve van Szükséges hozzá egy olyan összehasonlíthatósági tulajdonság, amely szerint a kisebb és nagyobb reláció értelmezve van Kimenő adat: Valamilyen szempontból a legnagyobb(legkisebb) elem értéke és/vagy sorszáma Kimenő adat: Valamilyen szempontból a legnagyobb(legkisebb) elem értéke és/vagy sorszáma

95 Kitekintés: Programozási tételek IV. Adatsorozathoz egy értéket rendelő tételek 6.Maximum(minimum)kiválasztás tétel Általános algoritmusa (1. változat): Általános algoritmusa (1. változat): Eljárás Maximumkiválasztás MAXIMUM:=A(1)INDEX:=1 Ciklus i:=2-től N-ig Ha A(i)>MAXIMUM akkor MAXIMUM:=A(i) INDEX:=i Ciklus vége Eljárás vége

96 Kitekintés: Programozási tételek IV. Adatsorozathoz egy értéket rendelő tételek 6.Maximum(minimum)kiválasztás tétel Általános algoritmusa (2. változat): Általános algoritmusa (2. változat): Eljárás Maximumkiválasztás INDEX:=1 Ciklus i:=2-től N-ig Ha A(i)>A(INDEX) akkor INDEX:=i Ciklus vége MAXIMUM:=A(INDEX) Eljárás vége

97 Kitekintés: Programozási tételek V. Rendezések Az alapfeladat: N elemű adatsorozat (A tömb) nagyság szerinti sorbarendezése(szükséges, hogy létezzen a <,<= reláció a sorozat elemtípusára) Az alapfeladat: N elemű adatsorozat (A tömb) nagyság szerinti sorbarendezése(szükséges, hogy létezzen a <,<= reláció a sorozat elemtípusára) Léteznek olyan módszerek, amelyek új tömbbe rendezik az adatsorozatot, vagy létrehoznak egy számsorozatot, amely leírja a sorrendet (indexelés) Léteznek olyan módszerek, amelyek új tömbbe rendezik az adatsorozatot, vagy létrehoznak egy számsorozatot, amely leírja a sorrendet (indexelés) A következő algoritmusok azonban helyben rendeznek, a rendezett sorozat magában az eredeti tömbben keletkezik A következő algoritmusok azonban helyben rendeznek, a rendezett sorozat magában az eredeti tömbben keletkezik Minden esetben, ha két elemet ezek során fel kell cserélni, a következő eljárást alkalmazzuk: Minden esetben, ha két elemet ezek során fel kell cserélni, a következő eljárást alkalmazzuk: Eljárás Csere(A,B) Seged:=AA:=BB:=Seged Eljárás vége Eljárás vége

98 Kitekintés: Programozási tételek V. Rendezések 1.Egyszerű cserés rendezés Alapelv: hasonlítsuk össze a sorozat első elemét sorban minden utána következő elemmel, és ha szükséges (nála kisebbet találtunk), akkor cseréljünk. Ezzel elérjük, hogy a sorozat legkisebb eleme az első helyre kerül. Alapelv: hasonlítsuk össze a sorozat első elemét sorban minden utána következő elemmel, és ha szükséges (nála kisebbet találtunk), akkor cseréljünk. Ezzel elérjük, hogy a sorozat legkisebb eleme az első helyre kerül. Folytassuk ugyanezt a módszert a második, harmadik…stb. elemekre Folytassuk ugyanezt a módszert a második, harmadik…stb. elemekre A rendezéseket aszerint jellemezzük, hogy mekkora a helyfoglalása a memóriában, hány összehasonlítás és hány mozgatás szükséges hozzá. Ezek a jellemzők az egyszerű cserés rendezésre: A rendezéseket aszerint jellemezzük, hogy mekkora a helyfoglalása a memóriában, hány összehasonlítás és hány mozgatás szükséges hozzá. Ezek a jellemzők az egyszerű cserés rendezésre: Helyfoglalás: N+1 elem Helyfoglalás: N+1 elem Összehasonlítások száma: N*(N-1)/2 (N*N-nel arányos) Összehasonlítások száma: N*(N-1)/2 (N*N-nel arányos) Mozgatások száma: 0 – 3*N*(N-1)/2, függ az eredeti sorozat rendezettségétől Mozgatások száma: 0 – 3*N*(N-1)/2, függ az eredeti sorozat rendezettségétől

99 Kitekintés: Programozási tételek VI. Rendezések 1.Egyszerű cserés rendezés Általános algoritmusa Általános algoritmusa Eljárás Egyszerű cserés rendezés Ciklus i:=1-től N-1-ig Ciklus j:=i+1-től N-ig Ha A(i)>A(j) akkor Csere(A(i),A(j)) Ciklus vége Eljárás vége

100 Kitekintés: Programozási tételek V. Rendezések 2.Minimumkiválasztásos rendezés Az előző módszer hátránya a sok felesleges csere. Az előző módszer hátránya a sok felesleges csere. Ennek csökkentésére új elv: keressük meg a sorozat legkisebb elemét, majd cseréljük fel az első elemmel Ennek csökkentésére új elv: keressük meg a sorozat legkisebb elemét, majd cseréljük fel az első elemmel Ezután keressük meg a második elemmel kezdődő sorozat legkisebb elemét, és ezt cseréljük fel a második elemmel Ezután keressük meg a második elemmel kezdődő sorozat legkisebb elemét, és ezt cseréljük fel a második elemmel Helyfoglalás: N+1 elem Helyfoglalás: N+1 elem Összehasonlítások száma: N*(N-1)/2 (N*N-nel arányos) Összehasonlítások száma: N*(N-1)/2 (N*N-nel arányos) Mozgatások száma: 3*(N-1), nem függ az eredeti sorozat rendezettségétől Mozgatások száma: 3*(N-1), nem függ az eredeti sorozat rendezettségétől

101 Kitekintés: Programozási tételek VI. Rendezések 2.Minimumkiválasztásos rendezés Általános algoritmusa Általános algoritmusa Eljárás Minimumkiválasztásos rendezés Ciklus i:=1-től N-1-ig MIN:=I Ciklus j:=i+1-től N-ig Ha A(MIN)>A(j) akkor MIN:=j Ciklus vége Csere(A(i),A(MIN) Eljárás vége

102 Kitekintés: Programozási tételek V. Rendezések 3.Buborékrendezés Új alapelv: mindig szomszédos elemeket cseréljünk Új alapelv: mindig szomszédos elemeket cseréljünk Először induljunk az első elemtől, és csináljuk a szomszédok hasonlítását a sorozat végéig. Ekkor a legnagyobb elem az utolsó helyre kerül, a többi pedig a helye felé mozdul el ( a kisebbek az eleje, a nagyobbak a vége felé, innen a buborékmódszer elnevezés) Először induljunk az első elemtől, és csináljuk a szomszédok hasonlítását a sorozat végéig. Ekkor a legnagyobb elem az utolsó helyre kerül, a többi pedig a helye felé mozdul el ( a kisebbek az eleje, a nagyobbak a vége felé, innen a buborékmódszer elnevezés) Ezután ismételjük meg a cseréket, de most már csak az elsőtől az utolsó előtti elemig, mert az utolsó már jó helyen van, és így tovább Ezután ismételjük meg a cseréket, de most már csak az elsőtől az utolsó előtti elemig, mert az utolsó már jó helyen van, és így tovább Helyfoglalás: N+1 elem Helyfoglalás: N+1 elem Összehasonlítások száma: N*(N-1)/2 (N*N-nel arányos) Összehasonlítások száma: N*(N-1)/2 (N*N-nel arányos) Mozgatások száma: 0 -3*N*(N-1), függ az eredeti sorozat rendezettségétől Mozgatások száma: 0 -3*N*(N-1), függ az eredeti sorozat rendezettségétől

103 Kitekintés: Programozási tételek VI. Rendezések 3.Buborékrendezés Általános algoritmusa Általános algoritmusa Eljárás Buborékrendezés Ciklus i:=N-től 2-ig -1-esével Ciklus j:=1-től i-1-ig Ha A(j)>A(j+1) akkor Csere(A(j,A(j+1)) Ciklus vége Eljárás vége

104 Kitekintés: Programozási tételek V. Rendezések 4.Beillesztéses rendezés Új alapelv: egyetlen elem mindig rendezett, és ha van egy rendezett részsorozatunk, abba illesszük be a megfelelő helyre az aktuális elemet Új alapelv: egyetlen elem mindig rendezett, és ha van egy rendezett részsorozatunk, abba illesszük be a megfelelő helyre az aktuális elemet Ez a beillesztés úgy működik, hogy az útban lévő elemeket a sorozat vége felé léptetjük Ez a beillesztés úgy működik, hogy az útban lévő elemeket a sorozat vége felé léptetjük Helyfoglalás: N+1 elem Helyfoglalás: N+1 elem Összehasonlítások száma: 0 - N*(N-1)/2 (N*N-nel arányos, függ a rendezettségtől) Összehasonlítások száma: 0 - N*(N-1)/2 (N*N-nel arányos, függ a rendezettségtől) Mozgatások száma: 0 -3*N*(N-1), függ az eredeti sorozat rendezettségétől Mozgatások száma: 0 -3*N*(N-1), függ az eredeti sorozat rendezettségétől

105 Kitekintés: Programozási tételek V. Rendezések 4.Beillesztéses rendezés Általános algoritmusa Általános algoritmusa Eljárás Beillesztéses rendezés Ciklus i:=2-től N-ig j:=i-1 Ciklus amíg j>0 és A(j)>A(j+1) Csere(A(j,A(j+1))j:=j-1 Ciklus vége Eljárás vége

106 4.8. Adatszerkezetek – összetett adattípusok a TP-ban III. A halmaz típus  Vannak olyan feladatok, amelyek a halmazokkal, halmazműveletekkel oldhatóak meg könnyen, ezért vezették be a halmaz adattípust  Deklarációja a set foglalt szóval történik a következő módon:  Var :Set of ;  Megszorítások:  A halmaznak legfeljebb 256 eleme lehet  Az elemtípus csak sorszámozott típusú lehet

107 4.8. Adatszerkezetek – összetett adattípusok a TP-ban III. A halmaz típus  Példák halmaz típusú változókra: Var abc: set of ‘a’..’z’; Egyjegyu: set of 0..9; Betu: set of char;  A halmaz típusú változók sem kapnak automatikusan értéket a deklarációkor, az értékadásról nekünk kell gondoskodni  Lehetséges értékadások a következők (a halmaz típusú állandókat {konstansokat} szögletes zárójelbe kell tenni)  abc:=[] ezzel {üres halmaz lesz az értéke}  abc:=[‘a’..’z’] {teljes halmaz, vagyis minden elemet beleteszünk}  Abc:=[‘b’,’d’] {kételemű halmaz}

108 4.8. Adatszerkezetek – összetett adattípusok a TP-ban III. A halmaz típus  Alapvető halmazműveletek: a Boole-algebra műveletei - unió, metszet, és különbség  * halmazok metszete, elsődleges precedenciájú  + halmazok úniója, másodlagos precedenciájú  - halmazok különbsége, másodlagos precedenciájú  Példák: ld. tábla.  Relációs műveletek  = - egyenlőség  <> - nem egyenlő  = - részhalmaz reláció  in – tartalmazásvizsgálat (használata csak in sorrendben helyes!!!)

109 4.8. Adatszerkezetek – összetett adattípusok a TP-ban III. A halmaz típus  Egyéb halmazműveletek  Elem hozzáadása és kivétele a halmazból két módszerrel lehetséges:  A + és – operátorokkal  Az include és exclude könyvtári eljárásokkal (csak a TP 7.0-ban)  Példák:  abc:=abc+[’x’]; {egyelemű halmazzal képzett unió}  abc:=abc-[’b’]; {egyelemű halmazzal képzett különbség} Ugyanez eljárásokkal:  Include(abc,’x’);  Exclude(abc,’b’);

110 4.8. Adatszerkezetek – összetett adattípusok a TP-ban III. A halmaz típus  A halmazváltozók helyfoglalása  Minden elemet egy bit jelöl, ennek értéke 0, ha a kérdéses elem nincs benne a halmazban, és 1, ha benne van.  Vagyis a lehetséges elemek száma határozza meg a halmazváltozó méretét (bájtban számolva a lehetséges elemek száma osztva 8-cal, és felfele kerekítve)  Példa: Var szamok:set of 1..90;  Itt a helyfoglalás 12 byte, mivel a 90 bit 11*8+2, 12 egész byteban fér el, és 2 bitet használunk a 12. byteból, de azt is le kell foglalni, mivel a memória csak byteonként foglalható le

111 4.8. Adatszerkezetek – összetett adattípusok a TP-ban IV. A rekord típus  Ez a legrugalmasabb Pascal adatszerkezet  A rekord tetszőleges, de előre meghatározott számú, különböző típusú adat tárolására alkalmas adattípus  Elemeit mezőnek hívjuk  Deklarációja:  Var : Record :;..:;End;  Vagyis ez a második eset, hogy az end kulcsszó begin nélkül áll

112 4.8. Adatszerkezetek – összetett adattípusok a TP-ban IV. A rekord típus  Példa a rekord adatszerkezetre: Var datum:record ev: ;honap:1..12;nap:1..31;tennivalo:String;End;  Ennek a rekordnak 4 mezője van.  A rekordváltozók helyfoglalása a mezőik helyfoglalásának az összege (ebben az esetben ( byte)

113 4.8. Adatszerkezetek – összetett adattípusok a TP-ban IV. A rekord típus  Hivatkozás a rekord mezőire: . .  Ezt szelekciós műveletnek is nevezik  A példában: datum.ev:=2007;datum.honap:=2;datum.nap:=6;datum.tennivalo:=‘Dolgozatírás’;  A rekord mezőit csak egyenként lehet beolvasni, kiíratni, csakúgy, mint a tömbnél, de azonos típusú rekordok közt megengedett az értékadás, ahogy a tömböknél is.  A típusazonosság név szerinti egyezést jelöl, tehát érdemes használni több azonos szerkezetű rekordváltozó deklarálásánál a type típusdeklarációt  Ha a rekordot át kell adni alprogramnak, nincs is más lehetőség

114 4.8. Adatszerkezetek – összetett adattípusok a TP-ban IV. A rekord típus  A with utasítás: a rekord mezőire való hivatkozás megkönnyítése  Ha használjuk, a with utasításon belül nem kell használni a rekordazonosítót, csak a mezőazonosítót  Általános alakja:  With do utasítás;  Ha a do után több utasítást akarunk szerepeltetni, begin – end közé kell tenni

115 4.8. Adatszerkezetek – összetett adattípusok a TP-ban IV. A rekord típus  A with utasítás: a rekord mezőire való hivatkozás megkönnyítése  Példa: With datum do begin ev:=2007;honap:=2;nap:=13;End;

116 4.8. Adatszerkezetek – összetett adattípusok a TP-ban IV. A rekord típus  A with utasítás: a rekord mezőire való hivatkozás megkönnyítése  A with után több rekordazonosítót is felsorolhatunk, erre lássunk egy bonyolultabb példát: Type Cim=Record Varos:String[30];UHSZ:String[4];IRSZ:String[4];End; Type Tanulo=Record Nev:String[20];Allakh:Cim;Idlakh:Cim;End;

117 4.8. Adatszerkezetek – összetett adattípusok a TP-ban IV. A rekord típus  A with utasítás: a rekord mezőire való hivatkozás megkönnyítése Var Diakok:Array[1..30] of Tanulo;.. With Diakok[3], Allakh, Idlakh do begin Nev:=‘Bakter Bálint’; Varos:=‘Kaposvár’;End;  Kérdés: A Varos mező itt melyik alrekordra vonatkozik?  Válasz: Az Idlakh.Varos mezőt jelenti, mert a rendszer hátulról kezdi el a felsorolt rekordokban a mezőazonosítót, és az első egyezésnél megáll  Ezek értelmében a fenti szerkezet egyenértékű ezzel: With Diakok[3] do With Allakh do With Idlakh do begin Nev:=‘Bakter Bálint’; Varos:=‘Kaposvár’;End;

118 5. Speciális programozási módszerek I. Rekurzió  A matematikában rekurzívnak nevezik az olyan meghatározásokat, amelyek valamilyen módon önmagukat tatrtalmazzák.  Pl: a faktoriális rekurzív definíciója:  n!=1, ha n=0, ha pedig n>0, akkor n*(n-1)!  A programozásban akkor beszélünk rekurzióról, ha egy alprogram meghívja önmagát

119 5. Speciális programozási módszerek I. Rekurzió  A rekurzió lehet közbetett és közvetlen:  Közvetlen, ha az eljárás, vagy függvény önmagát hívja;  Közvetett, ha A eljárás meghívja a B eljárást, majd B eljárás hívja meg az A eljárást.  Ez utóbbi látszólag ellentmond a Pascal nyelv szabályainak, mivel egy azonosító csak akkor használható, ha már deklarálták  E probléma áthidalására használható az előzetes deklaráció, amelyet a forward kulcsszóval lehet megvalósítani (példák a következő oldalakon)

120 5. Speciális programozási módszerek I. Rekurzió Program Kozvetlen_Rekurzio; Procedure A(N:Byte); BeginWriteln(N); If N>0 then A(N-1); End;BeginA(10);End.

121 5. Speciális programozási módszerek I. Rekurzió Program Kozvetett_Rekurzio; Procedure A(N:Byte);Forward; Procedure B(M:Byte); BeginWriteln(M); If M>0 then A(M-1); End; Procedure A; BeginWriteln(N); If N>0 then B(N-1); End;BeginA(10);End.

122 5. Speciális programozási módszerek I. Rekurzió –A forward kulcsszót tartalmazó sorban kell szerepelnie a formális paraméterlistának –Azon a helyen, ahol az alprogramot valójában megírjuk, már csak a nevét kell használni a procedure, vagy a function kulcsszó után –Rekurzív híváskor a program veremterületén (stack) az alprogram paramétereiből és lokális változóiból minden hívás alkalmával újabb példány képződik –Minden esetben gondoskodni kell a rekurzió befejeződéséről, mert ellenkező esetben a program végtelen ciklushoz hasonló helyzetbe kerül, újabb és újabb hívásokra kerül sor, és a veremterület elfogyásakor a program veremtúlcsordulással (stack overflow error) leáll –Erre a célra valamilyen elágazást szokás használni

123 5. Speciális programozási módszerek I. Rekurzió –Minden ciklust (iterációt) tartalmazó program átírható rekurzív formára –Ez az átírás azonban nem éri meg, mivel sok rekurzív hívás esetén nagy a memóriaigény, és sok átadott paraméter, lokális változó használatakor időigényes is –Ezért a rekurziót akkor használjuk, ha maga a megoldandó probléma rekurzív, vagy a programozási nyelv nem biztosít ciklusutasításokat (pl. LOGO) –Léteznek úgynevezett rekurzív adatszerkezetek (pl. bináris fa, ld. Később), amelyek feldolgozásakor mindig rekurzív algoritmust használunk –Közismertebb rekurzív problémák: Faktoriális Faktoriális Fibonacci-sorozat Fibonacci-sorozat Hanoi tornyai Hanoi tornyai Rekurzív geometriai alakzatok rajzolása (Sierpinsky-csipke, fraktálok) Rekurzív geometriai alakzatok rajzolása (Sierpinsky-csipke, fraktálok)

124 5. Speciális programozási módszerek III. Több forráskódból álló program készítése 1.Miért van erre szükség? Két oka van: Két oka van: –Van olyan eset, amikor a 64 kbyte kódszegmens-méret korlátozza a programunk méretét (a lefordított gépi kódú program nagyobb ennél a méretnél), sőt, elképzelhető, hogy a hagyományos, 640 Kbyteos memóriaméret sem elegendő –Elképzelhető, hogy olyan általános alprogramokat készítünk, amelyet később más programhoz is fel akarunk használni, és nem akarjuk újra és újra megírni ezeket 2.Hogyan lehet megcsinálni? 3 lehetőségünk van: 3 lehetőségünk van: –Unitok használata –Átlapolásos (overlay) technika (elavult) –DLL-ek használata (csak Windows)

125 5. Speciális programozási módszerek III. Több forráskódból álló program készítése 3.Unitok (modulok) használata Akkor használjuk ezt a lehetőséget, ha a főprogram mérete túllépné a 64 kbyteot, vagy általánosan használt alprogramokat, típusokat, stb. készítünk Akkor használjuk ezt a lehetőséget, ha a főprogram mérete túllépné a 64 kbyteot, vagy általánosan használt alprogramokat, típusokat, stb. készítünk A saját unitok ugyanúgy hozzáfordíthatóak a programhoz, mint a rendszer beépített unitjai (Crt, DOS, Graph stb); A saját unitok ugyanúgy hozzáfordíthatóak a programhoz, mint a rendszer beépített unitjai (Crt, DOS, Graph stb); Unit írása esetén a program forrásszövege speciális szerkezetű, alapvetően eltér a főprogram szövegétől Unit írása esetén a program forrásszövege speciális szerkezetű, alapvetően eltér a főprogram szövegétől

126 5. Speciális programozási módszerek III. Több forráskódból álló program készítése 3.Unitok használata A unit általános szerkezete: A unit általános szerkezete: Unit ; {a unit fejrésze} Interface Uses … Const…Type…Var… Procedure … {globális eljárások fejlécei} Function… {globális függvények fejlécei} {Ezt illesztő résznek is hívjuk, vagy kapcsolódási felületnek: ezeket ismeri a program, amihez hozzáfordítjuk} Implementation Uses … Const…Type… Var… {ezek a unit saját belső deklarációi} Procedure … {globális eljárások teljes deklarációja, de csak név, fejléc nem} Function… {globális függvények teljes deklarációja, de csak név, fejléc nem} {Ezt megvalósító résznek is hívjuk: itt írjuk le, hogy az eljárások, függvények hogyan működnek} [Begin]{Ez az ún. inicializációs rész} {utasítások} End.

127 5. Speciális programozási módszerek III. Több forráskódból álló program készítése 3.Unitok (modulok) használata Részletek: Részletek: –Fejléc: A unit neve maximum 8 karakter hosszúságú lehet, mivel meg kell egyeznie a lefordított unitot tartalmazó,.TPU állomány nevével (Turbo Pascal Unit) A unit neve maximum 8 karakter hosszúságú lehet, mivel meg kell egyeznie a lefordított unitot tartalmazó,.TPU állomány nevével (Turbo Pascal Unit) (A unit forrásszövege PAS kiterjesztésű, a lefordított állomány pedig TPU és nem EXE) (A unit forrásszövege PAS kiterjesztésű, a lefordított állomány pedig TPU és nem EXE) –Interface rész: Az itt deklarált azonosítók a modult használó program számára globálisak lesznek, mintha a főprogramban deklaráltuk volna őket Az itt deklarált azonosítók a modult használó program számára globálisak lesznek, mintha a főprogramban deklaráltuk volna őket Ezek nem csak a főprogramból, hanem más modulokból is elérhetőek Ezek nem csak a főprogramból, hanem más modulokból is elérhetőek Az eljárásoknak és a függvényeknek itt csak a fejléce szerepel, hiszen annak a programnak, amely ezeket használja, csak a hívás módjára van szüksége Az eljárásoknak és a függvényeknek itt csak a fejléce szerepel, hiszen annak a programnak, amely ezeket használja, csak a hívás módjára van szüksége

128 5. Speciális programozási módszerek III. Több forráskódból álló program készítése 3.Unitok (modulok) használata Részletek: Részletek: –Implementációs rész: Ez tartalmazza az interface részben deklarált alprogramok törzsét, és a modul lokális azonosítóit (const, var, type, procedure, function) Ez tartalmazza az interface részben deklarált alprogramok törzsét, és a modul lokális azonosítóit (const, var, type, procedure, function) Az alprogramok fejlécében csak a nevet kötelező szerepeltetni, a formális paraméterlistát nem, de lehet (azonban ez hibákhoz vezethet) Az alprogramok fejlécében csak a nevet kötelező szerepeltetni, a formális paraméterlistát nem, de lehet (azonban ez hibákhoz vezethet) –Inicializációs rész: Az itt elhelyezett utasítások a főprogram lefutása előtt egyszer végrehajtódnak (pl. kezdőérték-adások) Az itt elhelyezett utasítások a főprogram lefutása előtt egyszer végrehajtódnak (pl. kezdőérték-adások) Ez a rész nem kötelező, ha nincs, akkor a begin elhagyható, ekkor az end. az implementációs részt zárja le Ez a rész nem kötelező, ha nincs, akkor a begin elhagyható, ekkor az end. az implementációs részt zárja le


Letölteni ppt "Programozás és programozás módszertan. 3. Feladatmegoldás számítógéppel – részletesen az egyes lépésekről - KÓDOLÁS Programozási nyelvek csoportosítási."

Hasonló előadás


Google Hirdetések