Programming | Delphi » Fellegi Sándor - A Delphi oktatásának módszertana

Datasheet

Year, pagecount:2003, 97 page(s)

Language:Hungarian

Downloads:777

Uploaded:January 18, 2007

Size:752 KB

Institution:
-

Comments:

Attachment:-

Download in PDF:Please log in!



Comments

No comments yet. You can be the first!


Content extract

Szakdolgozat -1- A Delphi oktatásának módszertana Készítette: Fellegi Sándor Konzulens tanár: Radványi Tibor -2- SZAKDOLGOZAT.1 A DELPHI OKTATÁSÁNAK MÓDSZERTANA.2 BEVEZETÉS.7 MIRE HASZNÁLHATÓ A DELPHI?.8 SZÜKSÉGES ALAPISMERETEK.8 A DELPHI ISMERTETÉSE.10 A PASCAL ÉS AZ OBJECT PASCAL NYELV.10 Az Object Pascal nyelv jelkészlete.10 Foglalt szavak.10 A program utasítási sorai.10 Azonosítók.11 Számkonstansok.11 Szövegkonstansok.12 Címkék.12 Operandusok.12 Operátorok.13 Kifejezések.13 Megjegyzések.13 Az Object Pascal programok felépítése.13 Az Object Pascal modulok felépítése.15 Adattípusok és deklarációk.16 Adattípusok.16 Egyszerű Adattípusok.16 Sorszámozott adattípusok.16 Logikai információk tárolása.17 Egész típusok.17 Karakteres információk tárolása.17 Résztartomány típus.18 Valós típusok.18 A String Típus.19 Strukturált adattípusok.19 Tömbtípusok.19 Rekordtípusok.20 Halmaz.20 Állománytípusok.21 Objektum és

osztály-referencia.21 Mutatók.21 Eljárástípus.22 Variáns típus.23 Típusdefiníciók.23 Egyszerű adattípusok definiálása.23 Összetett adattípusok definiálása.24 Konstansok.24 Típus nélküli konstansok.25 Típusos konstansok.25 Típuskompatibilitás.25 Értékadási kompatibilitás.26 Típuskonverzió.27 Object Pascal kifejezések.27 Aritmetikai műveletek.27 Matematikai függvények.28 Logikai műveletek.28 Bitenként végzett logikai műveletek.29 Összehasonlító, relációs műveletek.30 Numerikus adatok összehasonlítása.31 Szövegek összehasonlítása.31 Karakterláncok összekapcsolása (konkatenáció).31 Halmazműveletek.32 Halmazok egyesítése, metszete, különbsége.32 Halmazokra vonatkozó vizsgálatok.32 Műveletek mutatókkal.33 Osztályok operátorai.33 Konzol-alkalmazások alapvető I/O műveletei.33 Szöveges megjelenítés.34 Karakterlánc kiíratása.34 -3- Egész típusú adatok kiíratása.35 Valós típusú értékek kiíratása.35

Logikai típusú értékek kiíratása.36 Olvasás billentyűzetről.36 Fájlkezelés.36 Az Object-Pascal nyelv utasításai.37 Egyszerű utasítások.37 Az üres utasítás.37 Az értékadó utasítás.37 A goto utasítás.38 Eljáráshívás.38 Függvényhívás.38 Strukturált utasítások.38 Utasításblokk.38 Feltételes utasítás.39 Többirányú elágazás.39 Ciklusutasítások.39 A for utasítás.40 A while utasítás.40 A repeat utasítás.41 Alprogramok használata.41 Eljárások és függvények.41 Az alprogramok deklarációs része.42 Az alprogramok paraméterei.42 Objektomok és osztályok.43 Osztályok és objektumok deklarációja.43 Konstruktor és destruktor.45 A DELPHI FEJLESZTŐRENDSZER.45 A Delphi fejlesztőrendszer felépítése.46 A menürendszer.46 File menü.46 Az Edit menü.47 A Search menü .47 A Project menü.47 A Run menü:.47 Eszköztárak.47 Komponensválasztó:.48 Objektumfa nézet.48 Objektum felügyelő.49 Form tervező.49 Forrásszerkesztő.49

GRAFIKUS VEZÉRLŐELEMEK TULAJDONSÁGAI ÉS HASZNÁLATUK.50 Tulajdonságok, Properties.50 Események, Events.50 A Form (TForm).51 A Label (TLabel).52 A Button (TButton).53 Az Edit (TEdit).53 CheckBox (TCheckBox).54 RadioButton, RadioGroup.55 ScrollBar (TScrollBar).56 ListBox (TListbox).57 ComboBox (TComboBox).57 Memo (TMemo).57 Menük használata.58 Fájlkezeléssel kapcsolatos dialógusdobozok.59 A Delphi grafikus lehetőségei.59 A Canvas tulajdonság.59 Rajzeszközök.60 Beépített grafikai alakzatok.61 Színek.61 Image.61 GYAKORLÓ FELADATOK A DELPHI OKTATÁSÁHOZ.62 1. Egyszerű aritmetikai műveletek62 2. Feltételes utasítások, többirányú elágazások gyakorlása63 3. Ciklusutasítások gyakorlása63 4. Függvények és eljárások gyakorlása64 5. Objektumok és osztályok használatának gyakorlása66 -4- 6. Gyakorlófeladatok a GUI programozásához67 Képlet és algoritmusgyűjtemény.69 AZ OKTATÁS GYAKORLATI MEGVALÓSÍTÁSA SZAKKÖZÉPISKOLÁBAN.71

PROGRAMOZÁS A NAT-BAN.71 ESZKÖZÖK, CÉLOK, KÖVETELMÉNYEK.71 Eszközök.71 Célok.72 Követelmények:.72 A DELPHI OKTATÁSA ÓRÁKRA BONTVA.73 A NAT által meghatározott óraszámok.73 A Delphi elméleti részének tanítása.73 A Delphi gyakorlati részének tanítása.74 A Számonkérés.75 Óratervek.76 E1.76 E2.79 E3.83 E4.86 GY01.90 GY02.94 GY03.96 GY04.99 GY05.102 GY06.106 E5.109 GY07.112 GY08.115 SZ1.118 E6.119 GY09.122 GY10.124 E7.127 GY11.130 E8.133 GY12.136 SZ2.138 IRODALOMJEGYZÉK.139 -5- Bevezetés Szakdolgozatom célja, hogy bemutassam a Delphi fejlesztőrendszer oktatásának egy lehetséges változatát. Dolgozatomat a Delphi ismertetésével kezdem, ami egyúttal a melléklet anyaga is. Tulajdonképpen azt mutatom be, hogy ezt a rövidismertetőt hogyan használom fel oktatási célra. A melléklethez tartozik egy Képlet és Algoritmusgyűjtemény, egy feladatsor, valamint lemezen található példaprogramok. Dolgozatom második fő része az oktatás

gyakorlati megvalósításának lehetőségéről szól. Pontosan arról, hogy a NAT szerint hány órát lehet programozásra szánni. Itt felsoroltam az elméleti és gyakorlati órák témáit áttekinthetően, táblázatba foglalva. Dolgozatom utolsó és legnagyobb része az óratervekből tevődik össze. Vagyis maga az oktatási folyamat leírása. -6- Mire használható a Delphi? A Borland Delphi rendszer olyan gyors alkalmazásfejlesztő környezet (RAD Rapid Application Development), amely egyesíti magában a Windows alkalmazások készítésére szolgáló grafikus fejlesztői környezetet és a teljesen objektum orientált programnyelvi fordítót. Szükséges alapismeretek A Delphi oktatását csak akkor kezdhetjük el, illetve akkor érdemes elkezdeni, ha a tanulóknak vannak bizonyos előismereteik. Ebben a fejezetben ezeket az előismereteket fogom taglalni Az alapismereteket az oktatás hatékonysága szempontjából 2 csoportra oszthatjuk: 1. Elengedhetlenül

fontos: Ezek olyan alapok, amelyek nélkül nem lehet elkezdeni a Delphi oktatását Amennyiben a tanulóknak ezen ismeretei hiányoznak, nem végezhetünk hatékony oktatást. 2. Alapvető ismeretek: Ezek olyan tudásanyagok, amelyre a Delphi közvetlenül épül Hogy a Delphi oktatását megkezdhessük, szükséges, hogy a tanulók legalább nagyvonalakban birtokában legyenek ezeknek az ismereteknek. 1. A GUI ismerete Elengedhetetlenül fontos, hogy a tanulók tudják kezelni a grafikus felületet. Erősen rontaná az oktatás hatékonyságát, ha az órákon gyakran ki kellene térni, pl. az ablakműveletek, menühasználat vagy az egérkezelés ismertetésére. A GUI ismerete nemcsak a fejlesztőrendszer kezeléséhez szükséges, hanem legfőbbképpen azért kell jól ismerni, mert a Delphi-vel magát a grafikus rendszert programozzuk, vagyis programjainkhoz a GUI elemeit használjuk. 2. Az operációs rendszer ismerete Elengedhetetlenül fontos az operációs rendszer ismerete.

Főként fájl és könyvtárkezelési ismeretek szükségesek, hogy a tanuló el tudja menteni, és meg tudja nyitni az elmentett munkáját. Szintén erősen rontaná az oktatás hatékonyságát, ha ezen ismereteket a Delphi oktatása folyamán kellene tanítani. 3. Szövegszerkesztési ismeretek Elengedhetetlenül fontos, hogy a tanulók birtokában legyenek alapvető szövegszerkesztési ismereteknek. A program forrásának áttekinthetőnek kell lennie 4. Programozási alapismeretek Alapvetően fontos a Pascal nyelv ismerete legalább nagyvonalakban. A Delphi oktatása során viszont ki lehet, sőt ki is kell térni a pascal nyelv bizonyos részeire. A Delphi oktatásánál gondot okozhat, ha a tanulók nem a pascal nyelvet, hanem más programozási nyelvet ismernek. 5. Algoritmusok és adatszerkezetek ismerete A tanulóknak szintén ismernie kell legalább alapszinten az algoritmusokhoz és adatszerkezetekhez kapcsolódó fogalmakat. -7- -8- A Delphi Ismertetése A

Pascal és az Object Pascal nyelv A Delphi rendszer nyelve az Object Pascal nyelv, amely egyaránt támogatja a strukturált, moduláris és az objektum orientált fejlesztést. Az Object Pascal nyelv jelkészlete Az Object Pascal jelkészlete az ASCII karakterkészlet elemeiből épül fel. Ezek a karakterek a következők: Megnevezés Jel Az angol ABC betűi: A.Z, az Decimális számjegyek: 0.9 Hexadecimális számjegyek: 0.9, AF, af Szóköz, vezérlőkarakterek: (ASCII 0.31) Speciális karakterek: +-*/=.,:;^ @$#<>[](){} Az Object Pascalban bizonyos karakterpárok speciális jelentést hordoznak: := <= >= <> . (* ) // Az ilyen speciális szimbólumok esetén fontos a karakterek megadási sorrendje. A nyelv nem engedi meg e szimbólumok hibás sorrendben történő megadását. Pl: =<, =>, ><, stb Hibajelzést kapunk akkor is, ha ezekben a jelekben a karakterek közé szóközt teszünk. Foglalt szavak Foglalt szavaknak az Object Pascal nyelv

utasításaiban és deklarációiban szereplő kulcsszavakat nevezzük, vagyis a nyelv alapszókincsét. A foglalt szavakat csak a nyelvben rögzített szabályoknak megfelelően szabad használni. A program utasítási sorai Az Object Pascal program az élő nyelvekhez hasonlóan mondatokból épül fel, amelyeket a programozási nyelvekben utasításoknak nevezünk. Az utasításokat pontosvesszővel (;) zárjuk Kivételt képez a programot lezáró end utasítás, amely után pontot (.) kell tenni Az utasításokat a program sorai tartalmazzák, de lehet egy sorba több utasítást tenni, vagy egy utasítást több sorra lebontani. A foglalt szavakon kívül az utasítások még számos más összetevőt is tartalmaznak. Az utasítások tárgyalása előtt még a következő fogalmakkal kell megismerkednünk:  Azonosítók  Számkonstansok  Szövegkonstansok  Címkék  Operandusok  Operátorok  Megjegyzések Azonosítók Az Object Pascal programban az

általunk létrehozott elemknek nevet kell adni, hogy hivatkozni tudjunk rájuk. Természetesen a névnek egyedinek kell lennie, pl nem adhatjuk ugyanazt a több változónak, függvénynek vagy eljárásnak. Az általunk megadott azonosítókat a program különböző összetevőinek azonosítására használjuk. Az azonosítók bármilyen hosszúak lehetnek, de csak az első 63 karaktert veszi figyelembe a fordítóprogram. -9- Az azonosítók képzése során nem használhatjuk a teljes ASCII karakterkészletet. Az azonosító csak betűvel vagy aláhúzásjellel kezdődhet ( ) Nem tartalmazhat szóközt Az első karakter után további betűk, számok vagy aláhúzásjelek következhetnek. Hasonlóan a foglalt szavakhoz, az azonosítókban sem különbözteti meg a rendszer a kis és nagybetűket. Azonosítóként nem szabad foglalt szavakat használni Számkonstansok Az Object Pascal nyelvben egész és valós számokat egyaránt használunk. A programban elhelyezett

számértékeket számkonstansoknak nevezzük. Egész szám megadása az előjellel (pozitív számnál elhagyható) és az azt követő számjegyekkel történik. Pl: 2, -3, +12, 2003 Az egész számokat hexadecimális formában is megadhatjuk. A szám előtt álló $ jel jelzi, hogy hexadecimális megadást használunk. Pl: $2A, $2D45 Valós számokat megadhatjuk tizedes törtként. Tizedesvessző helyett tizedespontot használunk Pl: 2.34, -512 Valós számokat megadhatunk hatványkitevős alakban is. Pl: 1234E+2, 1234E-2, -1234E+2, -1.234E-2 előjel egészrész pont törtrész hatvány kitevő 1 . 234 E +2 Szövegkonstansok A szövegkonstanst egyszeres idézőjelek, aposztrófok () között kell megadni. Pl: Ez egy szövegkonstans Az Object Pascal lehetővé teszi, hogy a szövegkonstansokban vezérlőkaraktert, vagy egyéb más speciális karaktert is elhelyezzünk. Pl: ez egy sor +#13+#10+ez egy másik sor A sztring hossza az aposztrófok között megadott karakterek számának

felel meg. Címkék Az Object Pascal programban a címkék az utasítások megjelölésére szolgálnak. A létrehozott címkéket a goto utasításban használjuk. A programban szereplő címkéket deklarálni kell, vagyis a label kulcsszó alatt fel kell sorolni. A címke lehet számokból álló szekvencia, ahol a kezdő nullákat figyelmen kívül hagyja a rendszer, vagy lehetnek azonosítók is. Pl: label 12, 13, 14, eleje, vege; Operandusok A kifejezésben szereplő változókat, konstansokat, függvényhívásokat operandusoknak nevezzük. (a+b)*(c/sqr(x)+1.34) A fenti aritmetikai kifejezés operandusai: a, b, c, x változók, az sqr() függvényhívás (négyzetre emelő függvény), valamint az 1.34 számkonstans - 10 - Operátorok A kifejezésben szereplő változókat, konstansokat, és függvényhívásokat összekapcsoló műveleti jeleket operátoroknak nevezzük. Az operátorok jelölhetnek: aritmetikai műveleteket +, -, /, *, div, mod logikai műveleteket and,

or, xor, not relációkat <, >, <=, >=, = (a+b)*(c/sqr(x)+1.34) A fenti aritmetikai kifejezés operátorai: +, *, /. Vagyis az aritmetikai műveleti jelek Kifejezések A kifejezés operátorok és operandusok sorozatából épül fel. A kifejezéseknek két alapvető csoportja van: 1. Aritmetikai: a kifejezés kiértékelésének eredménye mindig számérték Pl: (a+0.15*sin(alfa)) 2. Logikai: a kifejezés kiértékelésének eredménye logikai érték true (igaz), false (hamis) Pl: (x<10)and(y>5)) Megjegyzések A program utasításai között bárhol tetszőleges hosszúságú megjegyzést, magyarázatot helyezhetünk el. A megjegyzéseket többféleképpen is megadhatjuk: 1. Kapcsos zárójelek között: {ez egy megjegyzés} 2. Csillagos zárójellel: (* ez is egy megjegyzés ) 3. // jelek után a sor további részei megjegyzésnek számítanak Az Object Pascal programok felépítése A Delphi rendszert elsősorban a Windows rendszer alatt futó, grafikus

felhasználói felület lehetőségeit kihasználó alkalmazások létrehozására használjuk. Bizonyos esetekben olyan programokra is szükségünk lehet, amelyek Windows alatt működnek, azonban MS-DOS ablakban, szöveges felületet használnak. Az ilyen 32 bites programokat konzolalkalmazásoknak nevezzük. A Delphi rendszerben a konzolalkalmazásokat (File | New | Other. | Console Application) használhatjuk hagyományos szöveges felületű programok készítésére. A konzolalkalmazásokban egyaránt használhatjuk a Pascal nyelv szabványos I/O utasításait, és az Object Pascal bizonyos 32 bites utasításait. A főprogramot tartalmazó Object Pascal programok három fő részre tagolhatók: Programfej Deklarációs rész Főprogram // programfej // globális hatású fordítási direktívák program programnév; // deklarációs rész uses {Használt unitok, modulok felsorolása}; // lokális hatású fordítási direktívák label {címkék deklarációja}; const

{konstansok deklarálása}; type {típusok deklarálása}; var {változók deklarálása}; procedure eljárásnév(paraméterek); // lokális deklarációk begin // az eljárás törzsének utasításai end; - 11 - function függvénynév(paraméterek):típus; // lokális deklarációk begin // a függvény törzsének utasításai függvénynév:=kifejezés {visszatérési érték} end; //programtörzs begin // lokális hatású fordítási direktívák // a főprogram blokkjának utasításai end. A Pascal program feje a program foglalt szóbál és a programnévből áll. A képzésére vonatkozó szabályok teljes mértékben megegyeznek az azonosítók képzésének szabályaival. A programfejet a deklarációs rész követi, ahol minden olyan azonosítót fel kell sorolnunk, amit a programunk használ. A külső modulokra, unitokra való hivatkozást mindig a deklarációs rész legelején kell megadni. A uses foglalt szó után vesszővel elválasztva adhatjuk meg a

használni kívánt szabványos vagy saját készítésű modulok nevét. A unit nevének megadásával hozzáférünk a modulban definiált azonosítókhoz A deklarációs részben definiálhatjuk a főprogram által használt címkéket (label) és konstansokat (const). A Pascal-ban a szabványos típusokon kívül saját típusokat is létrehozhatunk (type) A deklarációs részben definiált változók (var) globálisak, a teljes programra nézve. Szintén a deklarációs részhez tartoznak a felhasználó által készített alprogramok (eljárások és függvények). Ezek felépítése megegyezik a főprogram felépítésével, mert ugyanúgy fejrészből, deklarációbál és végrahajtható utasításokból áll. Az alprogramban deklarált lokális azonosítók csak az alprogramból érhetők el. A különböző definíciós szavakkal kijelölt szekciók tetszőleges számban és sorrendben szerepelhetnek a deklarációs részben. A program deklarációs része ott fejeződik

be, ahol a főprogram törzse elkezdődik. A legegyszerűbb Pascal programokban a deklarációs rész hiányozhat. program minimalpas; {$APPTYPE CONSOLE} begin writeln(Ez egy minimális Pascal program) readln; end. Az Object Pascal modulok felépítése Az Object Pascal alkalmazásokban a főprogram mellett modulokat használhatunk különböző célú programelemek tárolására. A modulok egy része Windows alatti alkalmazás-fejlesztéssel is kapcsolatban áll. A modul felépítése a következő: // modulfej // globális fordítási direktívák unit modulnév; interface uses {használt modulok felsorolása} // deklarációk, mint a programmodulban implementation uses {használt modulok felsorolása} // deklarációk, mint a programmodulban initialization // utasítások finalization // utasítások end. Modulfej: itt adjuk meg a modul nevét. A modulnévnek egyeznie kell a modul forrásfájljának a nevével. Interface: Ez a rész tartalmazza azokat a deklarációkat, amelyek

kívülről, más programegységekből is elérhetők. Implementation: Ebben a részben található a modul belső, zárt része, valamint az interface részben deklarált alprogramok teljes definíciója. Initialization: ebben a részben találhatóak azok az utasítássorok, amelyek a program indulásakor hajtódnak végre. - 12 - Finalization: ebben a részben szintén utasítássorok találhatók, és ezek az utasítások akkor hajtódnak végre, amikor a főmodul futása befejeződött. Adattípusok és deklarációk Adattípusok Egyszerű Adattípusok Az egyszerű adattípusok közös jellemzője, hogy az ilyen típusú változók egyszerre csak egyetlen adatot tárolnak. (Egy számot, egy karaktert) Sorszámozott adattípusok Azokat a típusokat, melyek értékkészlete és az egész számok egy részhalmaza között egyértelmű összerendelés definiálható, sorszámozott típusoknak nevezzük. A sorszámozott típusok kezelésére a következő függvényeket

használhatjuk: Függvén Leírás y ord() a megadott paraméterértékhez rendelt sorszámot adja vissza. succ() a függvény segítségével a típus értékkészletéből megkapjuk a bemenő paraméter értéke után következő értéket pred() a függvény segítségével a típus értékkészletéből megkapjuk a bemenő paraméter értéke előtt álló értéket low() a függvény segítségével a típus értékkészletéből megkapjuk a bemenő paraméter legkisebb felvehető értékét high() a függvény segítségével a típus értékkészletéből megkapjuk a bemenő paraméter legnagyobb felvehető értékét Logikai információk tárolása A logikai típusú változókat logikai értékek tárolására használjuk. Csak kétféle értéket vehetnek fel: true (igaz), false (hamis). A szabványos Pascal nyelv csak a Boolean típust használták logikai értékek tárolására. Az Object Pascalban többféle típust is használhatunk logikai értékek tárolására:

Típusazonosító Értékkészlet Méret (bit) Boolean false.true 8 ByteBool false.true 8 WordBool false.true 8 LongBool false.true 8 Továbbra is a Boolean az "igazi" Pascal logikai típus, ezt az alábbi ábra mutatja: Boolean Típus ByteBool, WordBool, LongBool False < True False <> True Ord(False)=0 Ord(False)=0 Ord(True)=1 Ord(True) <> 0 Succ(false)=True Succ(False) = true Pred(True)=False Pred(True) = True Egész típusok Az Object Pascalban többféle előre definiált egész típus használható, amelyek mind egész számokat tárolnak, de értékkészletük és helyfoglalásuk eltér. A következő táblázat az egész típusok helyfoglalását és értéktartományát mutatja: - 13 - Típus Integer Cardinal Shortint Smallint Longint Int64 Byte Word Longword Értékkészlet -2147483648.2147483647 0.4294967295 -128.127 -32768.32767 -2147483648.2147483647 -2^63.2^63-1 0.255 0.65535 0.4294967295 Helyfoglalás (bit) előjeles, 32 előjel nélküli,

32 előjeles, 8 előjeles 16 előjeles, 32 előjeles, 64 előjel nélküli, 8 előjel nélküli, 16 előjel nélküli, 32 Karakteres információk tárolása A char típus egyetlen egy karaktert tartalmazhat. Az Object Pascal-ban többféle karakterkódolást használhatunk: Típus Helyfoglalás (bit) Char 8 AnsiChar 8 WideChar 16 Mivel a Char típus is sorszámozott, így minden karakterhez tartozik egy sorszám, amely kijelöli a helyét az ASCII kódtáblában. Ha az ord() függvény paramétereként adunk meg egy karakter típusú változót, akkor az megadja a változóban tárolt karakter ASCII kódját. Résztartomány típus Résztartomány típust bármely sorszámozott típus tetszőleges értéksorozatával definiálhatunk. A definícióban a részsorozatot, mint intervallumot, az alsó és felső határral adjuk meg. A határokat két ponttal (.) választjuk el egymástól Pl: Var index:1.100; kisbetu:a.z; nagybetu:A.Z; Ha futás közben ellenőrizni akarjuk, hogy nem

léptük-e át a résztartomány határát, akkor azon a részen, ahol ellenőrizzük, használjunk egy {$R+} fordítási direktívát. Valós típusok A valós számok ábrázolására több típust is használhatunk. Egy része szerepelt a hagyományos Pascal-ban is. Viszont a real típus értéktartománya és helyfoglalása eltér a hagyományos Pascal-ban megadottól. A Pascal-ban 6 bájt volt a helyfoglalása, Object Pascal-ban viszont 8 bájt Ha megadjuk a {$REALCOMPATIBILITY ON} fordítási direktívát, akkor a fordítóprogram a real típust 6 bájtosként kezeli. A valós típusokat a következő táblázat foglalja össze: Típus Értékkészlet Pontosság real 5.0*10^-314.17*10^308 15-16 Real48 2.9*10^-39.17*10^38 11-12 single 1.5*10^-45.34*10^38 7-8 double 5.0*10^-324.11*10^308 19-20 Extended 3.4*10^-4932.11*10^4932 19-20 Comp -2^-63+1.2^63-1 19-20 Currency -922337203685477.58089223372036854775807 19-20 Valós típusok közül leggyakrabban a real típust használjuk.

- 14 - Méret 8 6 4 8 10 8 8 A String Típus A string típusú változókat karaktersorozatok tárolására használjuk. Az Object Pascalban újabb, hagyományos Pascal nyelvben használt string típustól eltérő string típusok is vannak. A következő táblázat mutatja ezeket a típusokat: Azonosító Maximális hossz Felhasználás Nullvég ű ShortString 255 Byte visszafelé kompatibilitás Nem AnsiString 2 GByte ANSI szöveg tárolása Igen String 255 Byte visszafelé kompatibilitás Nem String 2 GByte ANSI szöveg tárolása Igen WideString 1 GByte Unicode szöveg tárolása Igen A fordító a string típust a {$H}, illetve a {$LONGSTRINGS} direktíva állapotától függően értelmezi. {$H+}{$LONGSTRINGS ON} esetében a string típus az AnsiString típust jelöli {$H-}{$LONGSTRINGS OFF} esetében, pedig a ShortStringet. Amennyiben a string típus mögött a hosszát is megadjuk, akkor a stringet a direktíva állapotától függetlenül ShortString-ként kezeli.

Strukturált adattípusok A strukturált, vagyis összetett adattípusok közös jellemzője, hogy más típusokból épülnek fel. Az összetett típusú változók egynél több komponensértéket is tárolhatnak. A strukturált típusok adatelemei a gyorsabb elérés érdekében szó vagy duplaszó határon kezdődnek. Ez azt jelenti, hogy a memória nincs optimálisan kihasználva Ha a deklarációban a típusmegadás előtt a packed kulcsszót használjuk, akkor elérhetjük a memória hézagmentes kihasználását, viszont ekkor az adatok elérése lassabb lesz. type TNumbers = packed array[1.100] of real; A strukturált típusok mérete lekérdezhető a SizeOf() függvénnyel. Tömbtípusok A tömb adott darabszámú, azonos típusú elemet tartalmazó adattípus. A tömbtípust az array foglalt szó vezeti be. Ezután szögletes zárójelek között adjuk meg a tömb méretét A típusleírást az of foglalt szó utáni elem adja meg. A tömb elemeinek típusa lehet egyszerű

vagy összetett Több dimenziós tömböt is megadhatunk, az egydimenziós tömböt vektornak, a kétdimenziós tömböt mátrixnak nevezzük var vektor:array[1.100] of byte; matrix:array[1.25,125] of byte; tb:array[A.Z] of byte; tx:array[boolean, char] of integer; A tömbök egyes elemeire a tömbváltozó nevével és a megadott határok közé eső indexszel hivatkozunk. A típusazonosság fontos szerepet játszik a tömbök közötti értékadás esetén illetve az alprogramok tömbparaméterrel történő hívásakor. Típusdefinícióval biztosítható a tömbtípusok azonossága Rekordtípusok A rekord olyan összetett adatszerkezet, melyben tetszőleges számú, különböző típusú rész szerepelhet. A rekord típusdeklarációja a record és az end foglalt szavak között helyezkedik el A két foglalt szó között a közönséges változókhoz hasonló módon definiáljuk a rekord elemeit, mezőit. var datum:record ev:integer; honap:byte; nap:byte; megjegyzes:string;

end; A rekord elemeire úgy hivatkozunk, hogy a rekordváltozó neve után ponttal elválasztva adjuk meg a mező azonosítóját. - 15 - datum.ev:=1977; datum.nap:=12; writeln(datum.ev); Halmaz Bizonyos feladatok legegyszerűbben halmazok használatával oldhatók meg. A halmaz bizonyos tulajdonságú elemek összessége. Az Object Pascal nyelv a halmazok használatát a set (halmaz) típussal támogatja. A halmazok deklarációjának általános formája: var halmazváltozó:set of alaptípus; Az Object Pascal-ban a halmaz maximum 256 elemet tartalmazhat. var abc:set of a.z; szamok:set of 0.100; ascii:set of char; Állománytípusok Az állomány azonos típusú komponensekből álló adatszerkezet, amely nagy mennyiségű adat tárolását teszi lehetővé a háttértárolón. A fájl komponensei egyaránt lehetnek egyszerű és strukturált típusú adatok, de leggyakrabban a record típust használjuk. var fájlváltozó:file of adattípus; Elérhetünk állományokat

úgy is, hogy nem adjuk meg a típust, ilyenkor típuskonverzió nélkül férünk hozzá a lemezen tárolt adatokhoz. var típus nélküli fájl:file; Gyakran használunk szöveges állományokat var szovegfile:text; Objektum és osztály-referencia Az Object Pascal objektum orientált programozási nyelv. A class típus adatok (field), alprogramok (method) és az adatokhoz való hozzáférés (property) szerkezetét definiálja. A class típust használva az osztályokat egymásból származtathatjuk átörökítve fontos jellegzetességeiket. Az osztályok családfája faszerkezetű, vagyis minden osztálynak pontosan egy ősosztálya van. A megadott osztály alapján elkészített változókat (példányokat) objektumnak nevezzük. Osztály-referenciát (metaclass) hozhatunk létre, osztálytípusra való hivatkozással, lehetővé téve azt, hogy fordításkor olyan objektumra hivatkozzunk, amelyek csak futás közben jönnek létre. Mutatók A memória jobb kihasználása

érdekében a programozási nyelvek többsége lehetőséget biztosít a dinamikus tárkezelésre. Ennek során nem a fordítóprogram, hanem a programozó gondoskodik a helyről a dinamikus változók számára. A dinamikus memóriakezelés a mutatók (pointerek) használatára épül A mutatók helyfoglalása 4 byte, ami egy memóriacímet tartalmaz. Kétféle pointer létezik: 1. Típus nélküli mutató: csak egy memóriacímre hivatkozik, hogy azon a memóriacímen milyen típusú adat van, az nincs meghatározva. Deklarációja: var hely:pointer; 2. Típusos mutató: egy memóriacímre hivatkozik, ahol egy adott típusú adatra mutat Deklarációja: var szam1:^integer; Ha egy mutató nem mutat sehová, akkor a nil értéket adjuk neki: pmem:=nil; - 16 - Eljárástípus Az Object Pascal lehetővé teszi, hogy eljárásokat és függvényeket úgy kezeljünk, mintha azok mutató értékek lennének. Megengedett például a következő deklaráció és használat: var

F:function(X,Y:integer):integer; FX:integer; function osszead(X,Y:integer):integer; begin osszead:=X+Y; end; begin F:=osszead; FX:=F(5,6); end. Variáns típus Ha a program fordításakor nem dönthető el, hogy az adat milyen típusú, vagy az adat típusa változhat a futás ideje alatt, akkor a variant típust használjuk, ami azonban több lefoglalt memóriát, és lassabb programfutást eredményez. A variant típusú változó nem tárolhat record, set, file, class, statikus array, class referencia, pointer és int64 típusú adatokat. A variant típus 16 bájtot foglal le a memóriából, ebben tárolja a típusra vonatkozó információkat, az adatot, vagy az adatra mutató pointert. A VarType() függvény használható egy variant változó típus-információinak lekérdezésére, a varTípus (varInteger, varDouble) alakú konstansok pedig a lekérdezés eredményének kiértékelésére. Típusdefiníciók Minden változó deklarációjában meg kell nevezni a változó

típusát. Az Object Pascal lehetőséget nyújt arra, hogy saját típusokat is definiáljunk. A type foglalt szó után saját típusneveket definiálhatunk Type új típusnév = létező típus; Először megadjuk a létrehozandó típus azonosítóját, majd az egyenlőségjel után megadjuk egy már létező típus azonosítóját. Egyszerű adattípusok definiálása Egyszerű adattípusok definiálásakor egy már létező, egyszerű típusú adat típusnevéből tudunk kiindulni. type var egesz=integer; valos=real; mas egesz=egesz; kisbetu=a.z; index=1.100; i,j:egesz; m,n:mas egesz; x,y:valos; kb:kisbetu; szam:index; - 17 - Összetett adattípusok definiálása Típusdefinícióval egyszerűen biztosíthatjuk különböző változók típusazonosságát. Type Var vektor=array[1.50] of real; matrix=array[1.16, 116] of real; m1,m2:matrix; v1,v2:vektor; m3:matrix; Típusdefinícióval egyszerűen biztosíthatjuk a különböző változók típusazonosságát. A

példában szereplő m1 és m3 mátrix azonos típusú, annak ellenére, hogy nem ugyanabban a deklarációban szerepelnek. A programban így hivatkozhatunk tömbre: tömbnév[sorszám]; matrixnev[sorszám, oszlopszám]; Típusdefiníció használata különösen javasolt rekordtípusok esetén. így a típusazonosság biztosítása mellett rekordokat tartalmazó bonyolultabb adatstruktúrák is definiálhatók. Pl: type szemely=record vezeteknev,keresztnev:string[20]; szul ev:integer; szul ho,szul nap:byte; lakcim:string; end; var egyszemely:szemely; sokszemely:file of szemely; szemely10:array[1.10] of szemely; A rekordmezőre így hivatkozhatunk: rekordnév.mezőnev; rekordnév[rekordszám].mezőnév; Konstansok A konstansnevek olyan azonosítóval ellátott értékek, amelyek nem változnak meg a program futása során. A konstans-definíciókat a deklarációs részben a const foglalt szó után adjuk meg Típus nélküli konstansok A definícióban az egyenlőségjel bal

oldalán szerepel a konstans neve jobb oldalán pedig a hozzárendelni kívánt érték. Egyaránt készíthetünk egész, valós, szöveges, logikai és halmaz konstansokat: const ev=1977; szam=2.2565478; szin=$AC1200; cim=Feladat; betu=A; igaz=true; hexa=[0.9,AF,af]; valasz=[I,N,i,n]; E konstansok számára a fordító nem foglal helyet, a memóriában, ezeket a fordító csak a fordítás folyamán használja. Típusos konstansok A típusos konstansok szintén a deklarációs rész const szekciójában helyezkednek el. A típusos konstansok értékei a memóriában helyezkednek el, és csak olvashatóak. A típusos konstans definíciójában a konstans típusát és értékét is meg kell adnunk. const hosszuegesz:longint=54328954; nem valasz:char=n; szamok:array[1.4] of byte=(2,15,4,23); mgh:array[1.5] of char=(a,e,i,o,u); ABC:set of char=[a.z,AZ]; - 18 - Típuskompatibilitás Vannak olyan esetek, amikor szükség van a típusok közötti kompatibilitás biztosítására.

Ilyenek például a kifejezések kiértékelése, vagy az összehasonlító műveletek végzése. Két típust kompatibilisnek tekintünk, ha az alábbi feltételek közül legalább az egyik teljesül:  a típusok azonosak  mindkét típus valós típus  mindkét típus egész típus  az egyik típus a másiknak résztartománya  mindkét típus ugyanannak a típusnak a résztartománya  mindkét típus halmaz, kompatibilis az alaptípussal  mindkét típus karaktertömb azonos elemszámmal  az egyik típus string, míg a másik típus string, karaktertömb, vagy char típus  az egyik típus pointer, a másik pedig bármilyen mutatótípus  az egyik típus pChar, a másik pedig array[0.x] of char  mindkét típus azonos típusra hivatkozó mutatótípus  mindkettő olyan eljárás vagy függvénytípus, amelyeknél a paraméterek száma és típusa azonos, illetve a függvény esetén megegyezik a visszatérési érték típusa is. Értékadási

kompatibilitás Értékadási kompatibilitásra akkor van szükség, amikor az értékadó utasításban, illetve a paraméterátadás során értéket kell adnunk nem egyező típusú változónak. T1 típusú változó:=T2 típusú kifejezés; értékadási művelet akkor végezhető el, ha teljesül az alábbi feltételek egyike:  T1 és T2 azonos típusok, de egyik sem fájl, illetve fájl típusú elemet tartalmazó strukturált típus  T1 és T2 kompatibilis sorszámozott típusok, és T2 értékkészlete T1 értékkészletének.  T1 és T2 valós típusok, és T1 értékkészlete tartalmazza T2 értékkészletét  T1 valós típus és T2 egész típus  T1 és T2 string típusok  T1 string típus és T2 char típus  T1 string típus és T2 karaktertömb  T1 és T2 kompatibilis karaktertömbök  T1 és T2 kompatibilis halmaztípusok, és T2 értékkészletének elemei beleesnek T1 lehetséges értékeinek tartományába  T1 és T2 kompatibilis

mutatótípusok  T1 pChar típus, és T2 stringkonstans  T1 pChar típus, és T2 array[0.x] of char alakú karaktertömb  T1 és T2 kompatibilis eljárástípusok  T1 eljárástípus és T2 olyan eljárás vagy függvény, amelynél a paraméterek száma és típusa azonos, illetve függvény esetén megegyezik a visszatérési érték típusa. Típuskonverzió Az Object Pascal erősen típusos nyelv. Ez a megállapítás azt jelenti, hogy a nyelv mentes a gyakori automatikus átalakításoktól. Vannak azonban olyan esetek, amikor a programunkban olyan típus-átalakításra kényszerülünk, amelyet nem támogat a Pascal nyelv. Ekkor két lehetőség közül választhatunk: A {$R-} direktíva megadása esetén adott a lehetőség, hogy különféle típuskonverziókat hajtsunk végre. char(65), integer(A) Szabványos függvények segítségével végezzük az átalakítást: - 19 - Függvény round(r) trunc(r) IntToStr(n) StrToInt(S) StrToFloat(S) FloatToStr(r)

Visszatérési típus a valós típus kerekített értéke egész típusként tér vissza a valós típus egészrésze tér vissza egész típusként az egész típusú változó értéke karakterláncba íródik a karakterlánc ha numerikus értéket tartalmaz, egész típus tér vissza ha a karakterlánc numerikus értéket tartalmaz, valós típusként tér vissza. a valós típusú változó értéke karakterláncként tér vissza Object Pascal kifejezések A kifejezések operátorok és operandusok sorozatából állnak. Az operandusok azok az adatok, amelyekkel a műveleteket végezzük. Az operátorok a műveleti jelek, amelyek összekapcsolják az operandusokat. A műveleteket csoportosíthatjuk az operandusok száma szerint. Ennek alapján az Object Pascalban minden művelet egy vagy két operandusú Aritmetikai műveletek Az aritmetikai műveleteket az aritmetikai kifejezésekben használjuk. Az ilyen műveletek operandusai egyaránt lehetnek egész vagy valós típusúak.

Az eredmény függ az operandusok típusától operátor + + * / div mod művelet + előjel előjelváltás összeadás kivonás szorzás valós osztás egész osztás maradék operandus száma 1 1 2 2 2 2 2 2 operandus típusa egész, valós egész, valós egész, valós egész, valós egész, valós egész, valós egész egész eredmény típusa egész, valós egész, valós egész, valós egész, valós egész, valós egész, valós egész egész Matematikai függvények Matematikai képletekben az ismertetett aritmetikai operátorokon túlmenően gyakran matematikai függvények is szerepelnek. A System modul sok matematikai függvényt használ A fontosabbak közül néhány: Függvényhívás matematikai forma paraméter típusa a függvényérték típusa ∣x∣ abs(x) egész, valós egész, valós sqr(x) egész, valós x2 sqrt(x) egész, valós x arctan x arctan(x) egész, valós cos x cos(x) egész, valós sin x sin(x) egész, valós x exp(x) egész, valós e ln x

ln(x) egész, valós A sin és a cos függvénynél radiánban kell megadnunk radiánba kapjuk meg a szöget. egész, valós valós valós valós valós valós valós szöget, az arctan függvénynél pedig Logikai műveletek A Pascal nyelv bizonyos utasításaiban logikai kifejezések segítségével szabályozzuk az utasítás végrehajtását. A logikai kifejezések általában logikai műveletekkel összekapcsolt összehasonlításokat - 20 - tartalmaznak. A logikai kifejezések kiértékelésének eredménye csak true vagy false lehet. Logikai műveletek precedenciája: operátor művelet elsőbbségi szint not nem 1 and és 2 or vagy 3 xor kizáróvagy 3 A logikai műveletek működését igazságtáblákkal szokás jellemezni A not A true false false true A true false true false B true true false false A xor B false true true false A B true true false false true false true false A or B true true true false A true true false false B true false true false A and B

true false false false Bitenként végzett logikai műveletek A bitenként végzett logikai műveletek segítségével az egész típusú értékek bitjeit közvetlenül kezelhetjük. A műveletekben szereplő operandusok és az eredmény egyaránt egész típusúak A műveletek a not kivételével kétoperandusúak. Operátor Elsőbbségi szint művelet Jelentés not 1 bitenkénti negáció and 2 aritmetikai ÉS shl 2 biteltolás balra shr 2 biteltolás jobbra or 3 aritmetikai VAGY xor 3 aritmetikai kizáró VAGY Az Object Pascal bitenkénti logikai műveletek végzését támogatja 1, 2, 4, 8 bájtos egész számokra. A not az operandus minden bitjét ellentettjére változtatja. x=54 x= 001101102 not x=201 not x= 110010012=128+64+8+1=201 Az and művelet a két operandust bitenként összehasonlítja, és ahol mindkét helyen 1 volt, ott az eredményben is 1 lesz, különben 0. 54 and 20 = 20 54= 001101102 20= 000101002 54 and 20= 000101002=16+4=20 Az or művelet eredményében ott

lesz 1-es bit, ahol valamelyik operandusban 1 volt, és csak ott lesz 0, ahol mindkét operandusban 0 volt. 38 or 104=110 38= 001001102 104= 011010002 38 or 104= 011011102=64+32+8+4+2=110 Az xor művelet eredményének bitjei csak akkor vesznek fel 1 éréket, ha az operandusok azonos helyen álló bitjei különbözőek voltak. - 21 - 38 xor 104=78 38= 001001102 104= 011010002 38 xor 104= 010011102=64+8+4+2=78 Az shl művelet a baloldali operandus bitjeit a jobb oldalon megadott számnak megfelelő lépésben balra tolja. A legmagasabb helyiértékű bit kiesik, és jobbról egy 0 értékű bit lép be Az shl műveletet 2 hatványaival való szorzásra is használhatjuk. 24 shl 2=136 (=34*22) 34= 001000102 34 shl 2= 100010002=128+8=136 Az shr művelet a baloldali operandus bitjeit a jobboldalon megadott számszor jobbra lépteti. Minden egyes lépés során a legalacsonyabb helyiértékű bit kiesik, és balról egy 0 értékű bit lép be. Az shr műveletet 2 hatványaival való

osztásra is használhatjuk. 36 shr 2=9 (=36/22) 36= 001001002 36 shr 2= 000010012=8+1=9 Összehasonlító, relációs műveletek. A relációs műveletek különféle egymással kompatibilis típusú kifejezések összehasonlítására szolgálnak. Az összehasonlítás eredménye lehet igaz (true), vagy hamis (false) Az operátorok mindegyike kétoperandusú, a műveletek a legalacsonyabb precedenciaszinttel rendelkeznek. Operátor Művelet = egyenlő <> nem egyenlő < kisebb > nagyobb <= kisebb vagy egyenlő >= nagyobb vagy egyenlő Numerikus adatok összehasonlítása A relációs operátorokat leggyakrabban különböző matematikai feltételek felírásához használjuk. pl: x változó érteke kisebb-e, mint 5 Ha azt kívánjuk megvizsgálni, hogy x a [-5,5) intervallumban helyezkedik-e el, a matematikai felírást (-5<=5<5) nem tudjuk egyben alkalmazni. E felírás helyett ezt a kifejezést használjuk: x<5 (x<=-5) and (x<5) Ha pedig arra

vagyunk kíváncsiak, hogy x kívül esik-e a fenti intervallumon: not((x<=-5) and (x<5)) Szövegek összehasonlítása Ekkor az összehasonlítás a karakterek kódja alapján történik. A relációs operátorok sztringekre és karaktertömbökre egyaránt használhatók. Az összehasonlítás ekkor a megfelelő helyen álló karakterek páronként történő összevetésével történik. A vizsgálat akkor fejeződik be, ha az éppen összehasonlított karakterpár különböző értékből áll, vagy ha az egyik sztring elfogy. Az első esetben az a sztring a kisebb, amelyik a párból a kisebb kódú karaktert tartalmazza, a második esetben pedig amelyik sztring rövidebb. Kifejezés Érték Művelet Almafa<Almamáter igaz ord(f)<ord(m) Micimackó<Malacka hamis ord(i)<ord(a) Alma<Almafa igaz Alma=Alma igaz Alfa<>Béta igaz ord(’A’)<>ord(’B’) - 22 - Karakterláncok összekapcsolása (konkatenáció) A művelet eredményeként

keletkező karaktersorozatba az operandusok egymás után bemásolódnak. Feladat+ megoldása = Feladat megoldása Halmazműveletek Az Object Pascal nyelv speciális lehetőségei közé tartozik a halmazok nyelvi szinten történő támogatása. A halmazműveleteket 2 csoportra oszthatjuk: * A Bool algebra műveleteit tartalmazza, ezek segítségével meghatározhatjuk a halmazok  közös részét  unióját  különbségét Relációs operátorokat használhatunk, de itt az összehasonlító műveletek értelmezése eltér az eddigiektől. Halmazok egyesítése, metszete, különbsége Ezek a műveletek kétoperandusú műveletek, operandusai csak kompatibilis halmazok lehetnek, a műveletek eredménye szintén halmaz típusú lesz. operátor művelet precedencia * metszet elsődleges + unió másodlagos különbség másodlagos type const elemek=(a, b, c, d, e, f, g, h); halmaz=set of elemek; X:halmaz=[a,b,c,d]; Y:halmaz=[a,c,e,f]; Halmaz metszete: X*Y -> [a,c] Két

halmaz metszete olyan halmaz, melynek elemei mindkét halmaznak elemei. Halmazok egyesítése: X+Y -> [a,b,c,d,e,f] A két halmaz egyesítése olyan halmaz, amely mindkét operandushalmaz elemeit tartalmazza. Az eredményhalmazban a közös elemek csak egyszer szerepelnek. Halmazok különbsége: X-Y -> [b,d] Két halmaz különbsége olyan halmaz, amelynek minden eleme az első halmaznak eleme, de nem eleme a második halmaznak. Halmazokra vonatkozó vizsgálatok Két halmazról megállapíthatjuk hogy:  Azonosak-e  Egy adott érték eleme-e a halmaznak  Részhalmaza-e az egyik halmaz a másiknak operátor művelet = azonos <> nem azonos <= a jel baloldalán álló halmaz a jobboldali halmaz részhalmaza >= a jel jobboldalán álló halmaz a baloldali halmaz részhalmaza in az eleme viszony vizsgálata Műveletek mutatókkal Az Object Pascal a mutatók használatához két egyoperandusú operátort használ. @ címe - 23 - ^ indirekt hivatkozás

Mindkét művelet elsődleges precedenciával rendelkezik. A @ operátor megadja bármilyen típusú memóriában tárolt operandus címét. Ugyanez a visszatérési értéke az addr() függvénynek is. A ^ műveleti jelet pointerváltozó esetén használjuk a mutató által kijelölt memóriaterület közvetett elérésére. Osztályok operátorai Az is operátorral futás közben eldönthetjük egy objektumról, hogy az a megadott osztály példánya-e. A kétoperandusú művelet első operandusa az objektum, a második pedig az osztály objektum is osztály A művelet eredménye igaz, ha az objektum az osztály példánya. Az osztályok példányai esetében alkalmazhatjuk az as operátort, mely dinamikus használatot tesz lehetővé. objektum as osztály a kifejezés eredményeként az objektumot úgy használhatjuk, mintha az osztály példánya lenne. Konzol-alkalmazások alapvető I/O műveletei Minden program egyik legfontosabb része a felhasználóval való

kapcsolattartás. A konzolalkalmazások szöveges ablakában a kapcsolattartás módja az, hogy a program adatokat kér a felhasználótól, majd megjeleníti a futási eredményeket. A konzolalkalmazásokban a bemeneti adatok a billentyűzetről érkeznek, a kimeneti eredmények pedig a szöveges ablakban jelennek meg. Szöveges megjelenítés Az Object Pascal nyelven írt konzol-alkalmazások DOS ablakába két eljárással írhatunk: write(paraméter, paraméter, .); writeln(paraméter, paraméter, .); A vesszővel elválasztott paraméterek az alábbiak közül kerülhetnek ki:  aposztrófok között megadott szövegkonstans  változónevek  konstansok  aritmetikai kifejezések  logikai kifejezések  karakter- és sztringkifejezések  függvényhívás A write() és a writeln() eljárások közötti különbségek:  a write() eljárás a kurzor által mutatott pozícióra ír, és a kurzort a kiírás utáni pozícióban hagyja.  a writeln() eljárás

is a kurzor által mutatott pozíciótól ír, azonban a paraméterek kiírása után a következő sor elejére állítja a kurzort. A paraméterek alakja az alábbiak szerint adható meg: writeln(kifejezés); writeln(kifejezés:w) writeln(kifejezés:w:d) w: a mezőszélességet adhatjuk meg. Numerikus értékek esetén ha a mezőszélesség nagyobb, mint a kiírt érték szélessége, akkor a számot és a szöveget is jobbra igazítja. d: ezt valós típus kiíratásakor adhatjuk meg. A valós típus kiíratása alapértelmezetten hatványkitevős alakban történik. A d paraméter a tizedesjegyek számát határozza meg Formázott kiírás segítségével az eredményeket oszlopokba is rendezhetjük. Karakterlánc kiíratása A write és a writeln() eljárások paramétereként megadott szövegkonstansokat aposztrófok között - 24 - kell megadni. writeln(Object Pascal); writeln(Object ,Pascal); Szöveges változót egyszerűen paraméterként is megadhatjuk. S:=Object

Pascal; writeln(S); A lemezen nézzük meg: .programok1-IO könyvtárban az 1 és 2 példát Egész típusú adatok kiíratása A write() vagy a writeln() paramétereként megadhatunk  egész konstanst: writeln(17);  változót: writeln(a);  egész típusú kifejezést writeln(3+4); writeln(5+i); A write() és a writeln() alaphelyzetben közvetlenül egymás mellé írják a paraméterek értékét, így azok összeolvadhatnak. Célszerű közéjük kiíratni egy helyközt is, vagy formázott kiíratással biztosítani, hogy az eredmények ne follyanak egybe. writeln(2+i, ,3*4); writeln(5+4:4, i:6); A lemezen nézzük meg: .programok1-IO könyvtárban a 3 példát Valós típusú értékek kiíratása A valós típusú szám alapértelmezésben normál alakban jelenik meg a képernyőn. A valós számokat legtöbbször tizedes tört formában szeretnénk látni a képernyőn. Az Object Pascal erre is biztosít lehetőséget: writeln(pi:14:10); A lemezen nézzük meg:

.programok1-IO könyvtárban a 4 példát Logikai típusú értékek kiíratása A logikai változók értékének kiíratásakor kétféle értéket kaphatunk a képernyőn: a TRUE vagy a FALSE szót. Itt is megadhatjuk a mezőszélességet, a TRUE és a FALSE szavak nagyobb mezőszélesség esetén jobbra igazítva jelennek meg. A lemezen nézzük meg: .programok1-IO könyvtárban az 5 példát Olvasás billentyűzetről A konzolalkalmazásoknál az alapértelmezett adatbeviteli eszköz a billentyűzet. A read() és a readln() eljárások felfüggesztik a program futását, és a billentyűzetről az ENTER lenyomásáig olvassák az adatokat. Read(paraméter); Readln(paraméter); A paraméterek numerikus vagy szöveges változók lehetnek, amelyek itt kapnak valamilyen értéket. A lemezen nézzük meg: .programok1-IO könyvtárban az 1, 2, 3, 4, 5 példát Fájlkezelés A Pascalban a fájlműveleteket is a Read és a Write utasításokkal végezzük. Először is

szükségünk van valamilyen fájl típusú változóra. Fájlkezelő utasítások: - 25 - Eljárás, Függvény Assign(Fájlváltozó, fájlnév) Reset(F) ReWrite(F) Close(F) Read(F,Adat) Write(F,Adat) ReadLn(F,S:String) IOResult Jelentés Fájl hozzárendelése fájlváltozóhoz Fájl megnyitása Fájl megnyitása és létrehozása Fájl bezárása Adat olvasása fájlból Adat írása fájlba Szövegfájlból egy sor beolvasása S karakterláncba Ha fájlművelet közben hiba történt, ez a változó valamilyen értéket kap a hibától függően. Az IOResult csak akkor használható, ha a {$R-} lokális direktívával kikapcsoljuk a Delphi beépített hibakezelőjét. A fájl típusának és az adat típusának meg kell egyeznie. Szöveges állomány esetén A Write, Writeln, Read, ReadLn ugyanúgy működik, mint a konzolon, csak a legelső paraméter mindig a fájlváltozó kell, hogy legyen. A lemezen nézzük meg: .programok1-IO könyvtárban az 5 példát Az

Object-Pascal nyelv utasításai Az Object Pascal nyelven írt program futtatható része elvégzendő tevékenységek (utasítások) sorozatából áll. A pascal programban egyszerű utasítássorozatokon kívül bonyolultabb programstruktúrák létrehozására is van lehetőség. Egyszerű utasítások Egyszerű utasítások segítségével egy lépésben végrahajtható műveleteket írhatunk elő programunk számára. Az üres utasítás ; Hatására a program semmilyen tevékenységet nem végez. Az értékadó utasítás változónév:=kifejezés; Az utasítás során a változónév azonosítójú változó felveszi a kifejezés kiszámított értékét; x:=3.4; változónak konstans értéket adunk y:=z; változónak egy másik változó értékét adjuk át a:=x*y+sqr(x); változónak egy kifejezés kiszámított értékét adjuk értékül x:=x+1; az x pillanatnyi értékét 1-el növeljük Boolean típusú változók értéke lehet true vagy false. Értéket ezeknek a

változóknak is adhatunk: b1:=true; b1 változónál konstans értéket adunk b2:=i<j; b2 változónak egy relációs kifejezés értékét adjuk b3:=not(b2 or b1); b3változónak egy logikai kifejezés értékét adjuk - 26 - A goto utasítás A goto utasítás feltétel nélküli vezérlésátadást valósít meg az utasításban szereplő programsorra. goto címke; A címkét a label foglalt szó után deklarálni kell a program deklarációs részében. Eljáráshívás Az eljárás olyan névvel ellátott programrész, amely egy adott tevékenységsorozatot összefog. Az eljáráshívás folyamán a hívott programrész végrehajtódik, majd a vezérlés visszakerül a hívás utáni utasításra. eljárásnév; eljárásnév(paraméter1, paraméter2,.,paramétern); pl: readln; writeln(Object Pascal); Függvényhívás A függvény, mint az eljárás, szintén névvel ellátott programrész, amely valamilyen tevékenységsorozatot végez el. Annyiban különböznek az

eljárásoktól, hogy van visszatérési értékük x:=sqr(4); Strukturált utasítások Utasításblokk A begin és az end foglalt szavak között megadott utasítások sorozatát utasításblokknak nevezzük. Akkor használunk utasításblokkot, ha több utasítás végrehajtására van szükség, de formailag csak egy utasítás megengedett. begin end; utasítás1 utasítás2 . utasításn Feltételes utasítás Az egyszerű programok felépítése olyan, hogy a sikeres működéshez elegendő a program sorait egymás után végrehajtani. Abban az esetben ha valamilyen változó értékétől függően más utasításokat akarunk végrehajtani, akkor szükséges feltételes utasítást használnunk. Az Object Pascal lehetőséget biztosít ennek megvalósítására: if feltétel then utasítás1 else utasitas2; Az if után álló feltétel egy logikai kifejezés, melynek értékétől függ, hogy melyik utasítás hajtódik végre. Ha a feltétel értéke igaz (true), akkor a

then ág hajtódik végre, ha a feltétel hamis (false), akkor az else ág. Természetesen utasítások helyett utasításblokkot is használhatunk, de a megkötés az, hogy az else előtt nem használhatunk pontosvesszőt. Előfordulhatnak olyan esetek is, amikor csak a then ágra van szükségünk. if feltétel then utasítás; A lemezen nézzük meg: .programok1-Utasitasok könyvtárban az 1 és 2 példát Többirányú elágazás A case utasítás segítségével könnyen megoldhatjuk programunk elágaztatását: case kifejezés of érték1:utasítás1; érték2:utasítás2; . - 27 - értékn:utasításn; else különben utasítás; end; Amennyiben a felsorolt konstansok megegyeznek a kifejezés valamely értékével, akkor végrehajtódik az értéknek megfelelő utasítás, de ha egyik értéknek sem felel meg, akkor az else ágban szereplő utasítás hajtódik végre. Fontos, hogy a kifejezés valamilyen sorszámozott típus legyen. A lemezen nézzük meg:

.programok1-Utasitasok könyvtárban a 3 példát Ciklusutasítások Programozás során gyakran találkozunk olyan feladattal, amikor egy tevékenységet egymás után többször kell végrehajtani. Az ilyen ismétlődő tevékenységek programnyelven történő megfogalmazására használjuk a ciklusutasításokat. A for utasítás A for utasítást akkor használjuk ha pontosan ismerjük az ismétlések számát. Az utasítás két formában is megadható: for ciklusváltozó:=kezdőérték to végérték do utasítás; for ciklusváltozó:=kezdőérték downto végérték do utasítás; Pl: for i:=1 to 10 do writeln(i); E programsor hatására kiíródnak a számok 1-10-ig egyesével növekvő sorrendben. for i:=10 downto 1 do writeln(i); E programsor pont fordítva dolgozik: 10-1-ig írja ki a számokat egyesével, csökkenő sorrendben. Ha egynél több utasítást akarunk végrehajtani a ciklusmagban, akkor utasításblokkot kell használnunk. for ciklusváltozó to

végérték do begin utasítás1; utasítás2; . utasításn; end; A lemezen nézzük meg: .programok1-Utasitasok könyvtárban a 4, 5 példát A while utasítás Ha a ciklusszervezés során nem ismerjük az ismétlések számát, akkor a feltételes ciklusutasítások egyikét kell használnunk. Az egyik ilyen feltételes ciklusutasítás az Object Pascal-ban a while utasítás while feltétel do utasítás; vagy: while feltétel do begin utasítás1; utasítás2; . utasításn; end; A feltétel nemcsak belépési feltétel, hanem a ciklus addig ismétli a ciklusmagban lévő utasítást vagy utasításokat, ameddig a megadott feltétel fennáll. A lemezen nézzük meg: .programok1-Utasitasok könyvtárban a 6 példát A repeat utasítás A feltételes ciklusutasítás másik formája a repeat-until ciklus: repeat utasítás1; utasítás2; . - 28 - utasításn; until feltétel; A repeat-until ciklus hátultesztelő ciklus, ennek következtében a ciklusmagban szereplő

utasítás vagy utasítások legalább egyszer végrehajtódnak. A lemezen nézzük meg: .programok1-Utasitasok könyvtárban a 6 példát Alprogramok használata Eljárások és függvények A programozás során gyakran előfordulnak olyan esetek, amikor valamilyen utasításblokk a program több pontján is előfordul. Nem utolsó sorban arra is használható, hogy programunk áttekinthetőbb legyen. Az alprogramoknak két fajtája van:  Eljárás: valamilyen utasítássorozatot foglal névvel ellátott egységbe.  Függvény: szintén utasítássorozat egységbe foglalása, de ezen túlmenően van valamilyen visszatérési értéke is. Az eljárás felépítése: procedure eljárásnév(paraméter1,paraméter2,.,paramétern); // lokális deklarációk begin utasítás1; utasítás2; . utasításn; end; A függvény felépítése: function függvénynév( paraméter1, paraméter2, ., paramétern): visszatérési érték típusa; // lokális deklarációk begin utasítás1;

utasítás2; . utasításn; függvénynév:=kifejezés; end; A lemezen nézzük meg: .programok1-Alprogramok könyvtárban a 1 példát Az alprogramok deklarációs része Az alprogramok deklarációjának felépítése megegyezik a főprogram deklarációs részének felépítésével. Ugyanúgy deklarálhatunk az alprogramokban is  címkéket (label)  konstansokat (const)  típusokat (type)  var (változókat)  további belső al-alprogramokat (procedure, function) Az alprogramokban deklarált azonosítók csak az alprogramon belül érvényesek. Az alprogramok paraméterei Az alprogramok paramétereit az alprogramon belül változóként használhatjuk. Kétféle paraméterátadás létezik az Object Pascal-ban: Értékátadásos paraméterezés: Itt a függvénynek vagy eljárásnak egy változó értékét adjuk át. A paraméterben megadott változók értékeit a függvény vagy eljárás nem változtatja meg. Címátadásos paraméterezés: Itt a

paraméterként megadott változó címe kerül átadásra. Ezen változók értékét a függvény vagy eljárás képes megváltoztatni. Példák: - 29 - Értékátadásos paraméterezés: . procedure haromszog ker(a,b,c:real); begin K:=a+b+c; end; . Itt egyik paraméter értékét sem változtatja meg az eljárás, csak a K nevű globális változónak ad értéket. Címátadásos paraméterezés: . procedure haromszog ker(var K:real; a,b,c:real); begin K:=a+b+c; end; . Itt a K értéke megváltozhat, és meg is változik. A lemezen nézzük meg: .programok1-Alprogramok könyvtárban a 2, 3, példát Objektomok és osztályok Az objektum-orientált megközelítés, az objektumok programegységként való bevezetésével megszünteti a program kódjának és adatainak szétválasztását. Az objektumok illetve az objektumok hierarchiájának felhasználásával egyszerű szerkezetű, jól kézbentartható programok készíthetők. A régi programokkal való kompatibilitás

fenntartása érdekében használható a pascalos object típus is, de az új felfogásnak megfelelő fejlesztés csak a class típusú objektumokkal valósítható meg. Az új programegység, a komponens tulajdonképpen olyan objektum, amely fejlesztési és futási időben egyaránt elérhető. Osztályok és objektumok deklarációja Az osztályok deklarációja, és használata gyakorlatilag a recordok deklarációjához és használatához hasonlít a legjobban. Annyi a különbség, hogy itt "rekordmezőként" nemcsak különféle adattípusokat határozhatunk meg, hanem eljárásokat és függvényeket is, amelyek kezelik az adatmezőket. Ezeket a függvényeket vagy eljárásokat metódusoknak nevezzük. Objektum-osztályt a következőképpen deklaráljuk: Type osztálynév:class // adatmezők deklarációja: változónév1, változóné2, . változónévn : Típus1; // metódusok deklarációja: procedure eljárásnév(paraméter1, ., paramétern); . function

függvénynév(paraméter1, ., paramétern):típus; end; Az osztály deklarálása után egyenként deklarálnunk kell az osztályokban szereplő alprogramokat. Szintaxisa: procedure osztálynév.metódusnév(paraméter1, paraméter2,,paramétern); // lokális deklarációk begin // utasítások end; function osztálynév.metódusnév(paraméter1, paraméter2,,paramétern):Típus; // lokális deklarációk begin // utasítások end; Az objektum példányára való mutató létrehozása a szokásos változódeklarációval történik: Var objektumnév:osztálynév; Az objektum példányát a memóriában a Create metódussal hozzuk létre. Objektumnév:=osztálynév.Create(); - 30 - Ezután tudunk hivatkozni az általunk létrehozott metódusokra. objektumnév.metódus(paraméter1, paraméter2, , paramétern); Ha az objektumra már nincs szükségünk, felszabadíthatjuk az objektum által foglalt memóriaterületet: objektumnév.Free; A Create és a Free metódust az

általunk deklarált osztály ősosztálya tartalmazza. (TObject) A lemezen nézzük meg: .programok4-Objektumok könyvtárban a 1, 2, 3, példát Konstruktor és destruktor A metódusok közül kitüntetett szerepe van a kostruktornak és a destruktornak. Deklarálásuk: type osztálynév=class // adatmazők constructor metódusnév(paraméter1, paraméter2,.,paramétern); destructor metódusnév; // további metódusok end; A konstruktor feladata: Amikor létrejön az objektum, akkor ez az alprogram azonnal végrehajtódik. A destruktor szerepe: Mielőtt az objektum törlődik, ez az utasítás automatikusan végrehajtódik. - 31 - A Delphi fejlesztőrendszer Mivel a Delphi Windows alatt fut, így e fejlesztőrendszer felülete is a megszokott Windows felület elemeiből tevődik össze. A Delphi gyakorlatilag egy olyan program, amely Windows alatt fut és Windows alatt futó programokat tudunk vele készíteni. A Delphi fejlesztőrendszer felépítése A Delphi a programok

készítéséhez, tárolásához és fordításához egy logikusan felépített, könnyen használható menürendszert biztosít számunkra. Itt csak a legfontosabbakra térek ki A menürendszer File menü A fájl menüben a fájlokkal végzett műveletek vannak csoportosítva New: Ebben az almenüben új project-et tudunk létrehozni. Ennek ismét van egy almenüje, amelyben ki tudjuk választani, hogy milyen projectet hozzunk létre. Ebből a két legfontosabb az Application (alkalmazás), és az Other/Console Application (parancssori alkalmazás) Menüpont Jelentés Open Delphi által használt unitokat vagy projeteket nyithatunk meg vele. Open Project Delphi-projecteket nyithatunk meg vele. Reopen Valamilyen eddig használt projectet vagy unitot nyithatunk meg almenüből. Save Az aktuális unitot tudjuk vele elmenteni. Save As Az aktuális unitot menthetjük el új néven. Save Project As A projectet tudjuk más néven elmenteni. Save All Minden megnyitott projectet és unitot

elment. Close Az aktuális projectet bezárja. Close All Minden nyitva lévő fájlt bezár. Az Edit menü Menüpont Copy Cut Paste Delete Select All Jelentés A forráskódban kijelölt szöveget vágólapra helyezi. A forráskódban kijelölt szöveget vágólapra helyezi, majd törli. A vágólapon lévő szöveget a kurzor aktuális pozíciójától kezdve beilleszti a forráskódba. A kijelölt szövegrész törli. A teljes forráskódot kijelöli az aktuális ablakban. - 32 - A Search menü Menüpont Jelentés Find Az aktuális forráskód-ablakban kereshetünk általunk megadott szöveget, vagy szövegrészt. Replace Az aktuális forráskód-ablakban az általunk megadott szöveget vagy szövegrészt megkeresi, és kicseréli egy másik általunk megadott szövegre. A Project menü Menüpont Add to project Remove from project Compile Project Project Options: Jelentés Korábban megírt unitot adhatunk hozzá a megnyitott projecthez. Unitot távolíthatunk el a

projectből. A projectből futtatható állományt készít. A project jellemzőit változtathatjuk meg. Verziószámot, ikont állíthatunk be. A Run menü: Menüpont Run Program Reset Jelentés A project futtatása. A futó project leállítása. Akkor célszerű használni, ha programunk nem válaszol vagy végtelen ciklusba keveredett. Eszköztárak Az eszköztárakon a leggyakrabban használt műveleteket érhetjük el egyszerű ikonra-kattintás műveletével. Kép Jelentés Új project Unit megnyitása Project megnyitása Unit mentése Minden mentése Unit hozzáadása a projecthez Unit eltávolítása a projectből Futtatás Futó program leállítása Forrásnézet Formnézet Form-Unit nézetváltás Új form Súgó Komponensválasztó: A programunkba ágyazható grafikus vezérlőelemek találhatók itt. A megfelelő fülre való kattintással választhatjuk ki a megfelelő komponenscsoportot. A fülre való kattintás után megjelenik a komponensben található összes

grafikus elem, amit szintén egy egérkattintással tudunk kiválasztani. - 33 - Objektumfa nézet Az objektumfa nézetben az általunk írt program objektumait láthatjuk, fanézetbe rendezve. Objektum felügyelő Az Objektum-felügyelőben az aktuális objektum tulajdonságait állíthatjuk be. Ennek az ablaknak a tartalma a szerint változik, hogy épp mely objektummal dolgozunk. Form tervező Ebben az ablakban tervezhetjük meg, hogy hogyan nézzen ki programunk, hogyan helyezkedjenek el a megfelelő grafikus vezérlőelemek. Nagyon egyszerűen lehet használni, mintha valamilyen képtervezőben dolgoznánk. Forrásszerkesztő Ebben az ablakban végezzük a programozás lényegét. Unitot és főprogramot egyaránt szerkeszthe-tünk benne. Egyszerre több unit-tal is dolgozhatunk. Hogy melyik unitot használjuk, azt a megfelelő fülre való kattintással választhatjuk ki. Az ablak bal oldalán pedig megjelenik fa nézetbe rendezve minden változó, osztály, alprogram. -

34 - Grafikus vezérlőelemek tulajdonságai és használatuk Mivel a Delphi a Windows programozásának eszköze, így az egyik legfontosabb része, hogy a grafikus programelemek programunkba beépíthetőek legyenek, formázhatóak legyenek, és programozhatóak legyenek. A grafikus felület tulajdonképpen a program és a felhasználó között teremt kapcsolatot. Ezen keresztül jelenítődnek meg valamilyen formában a futási eredmények, és a felhasználó is ezen keresztül viszi be az adatokat a program számára. Tulajdonságok, Properties Az vezérlőelem tulajdonságaiban beállíthatjuk hogy az adott grafikus elem - milyen tulajdonságokkal rendelkezzen a felhasználó irányában, vagyis beállíthatjuk, hogy hogyan nézzen ki. Méret, elhelyezkedés, stb. Ezeket a tulajdonságokat a programban is le tudjuk kérdezni, esetleg a program futása során is meg tudjuk változtatni, vagy a program is megváltoztathatja őket. - milyen tulajdonságokkal rendelkezzen a

program belvilága számára, pl. mi legyen a hivatkozási neve. A program futása során a tulajdonságok állíthatók: Objektumon kívülről: Objektumnév.Tulajdonság:=érték; Objektumon belülről: Tulajdonság:=érték; A program futása során az értékek lekérdezhetőek: Objektumon kívülről: Változónév:=Objektumnév.Tulajdonság; Objektumon belülről: Változónév:=Tulajdonság; Események, Events A Delphit nevezhetjük eseményvezérelt programozási nyelvnek is. Minden grafikus vezérlőelemhez különféle események tartoznak. Az eseményvezérelt programozás lényege, hogy valamilyen eseményhez valamilyen alprogramot rendelünk hozzá. Ez a hozzárendelés az objektumfelügyelő Events fülén végezhető el, dupla egérkattintással a megfelelő esemény legördülőmenüjén A dupla kattintás hatására egy alprogram-keretet kapunk: procedure TForm1.FormCreate(Sender: TObject); begin end; A kurzort rögtön a begin-end közé teszi, és már lehet is

megadni az adott eseményhez a szükséges utasításokat. Ezek az utasítások az esemény létrejöttével minden esetben végrehajtódnak A Form (TForm) A form a felhasználó oldaláról nem más, mint maga az alkalmazásablak. Erre az alkalmazásablakra kerülnek föl a további grafikus vezérlőelemek. A program oldaláról pedig egy objektum-osztály, melynek tulajdonságait be tudjuk állítani mind az objektum-felügyelőben, mind pedig a programunkban. Az általunk készített form ősosztálya a TForm. A formnak legtöbbször a következő tulajdonságait szoktuk beállítani: - 35 - Tulajdonság Name Hatás a form hivatkozási neve, amit itt megadunk az lesz a példányosított osztály neve. Caption a form felhasználói oldalról látható neve. Amit itt megadunk, az az ablak címsorában látható lesz Height a form magassága képpontokban megadva Width a form szélessége képpontokban megadva ClientHeight a form munkaterületének magassága képpontokban

megadva ClientWidth a form munkaterületének szélessége képpontokban megadva Top a form tetejének képpontban megadott távolsága a képernyő tetejétől Left a form bal szélének képpontokban megadott távolsága a képernyő bal szélétől Color a form munkaterületének színe Visible az form láthatósága. Ha true, akkor az ablak látszik, ha false akkor nem látszik. Ha több formmal dolgozunk, akkor célszerű használni. Típus String String Integer Integer Integer Integer Integer Integer TColor Boolea n A formnak legtöbbször a következő eseményeihez rendelünk alprogramot: Eseménynév Jelentés onCreate a form létrejötte onResize a form átméretezése onActivate amikor a form előtérbe kerül onDeactivate amikor a form háttérbe kerül onShow a form megjelenítése onHide a form láthatatlanná válása onDestroy a form megszűnése A lemezen nézzük meg: .programok5-Gr-Vezerloelemek könyvtárban a 2 példát A Label (TLabel) Tulajdonság Name

Caption Font.Size Font.Color Font.Style Height Width A Label a felhasználó oldaláról nézve valamilyen formon látható szöveg, a program oldaláról pedig egy objektum-osztály, mellyel valamilyen karakterláncot tudunk kiíratni. Az általunk készített label ősosztálya a TLabel A labelnek legtöbbször a következő tulajdonságait szoktuk beállítani: Hatás Típus a label hivatkozási neve, amit itt megadunk, String az lesz a példányosított osztály neve A karakterlánc, ami kiíródik String A font mérete, amivel a label kiírja a szöveget Integer A font színe, amivel a label kiírja a szöveget TColor A font stílusa TFontStyle (fsBold, fsItalic, fsUnderline, fsStrikeOut) a label magassága képpontokban megadva Integer a label szélessége képpontokban megadva Integer - 36 - A labelnek legtöbbször a következő eseményeihez rendelünk alprogramot: Eseménynév Jelentés onMouseEnter Amikor az egérkurzor a label területére kerül onMouseLeave Amikor

az egérkurzor a label területét elhagyja A label a legegyszerűbb grafikus vezérlőelem, használhatjuk eredmények kiíratására is. A lemezen nézzük meg: .programok5-Gr-Vezerloelemek könyvtárban a 2, 3 példát A Button (TButton) A Button a felhasználó oldaláról nézve egy nyomógomb, a program oldaláról pedig egy olyan vezérlőelem, melynek legtöbbször az onClick eseményét használjuk föl. Az általunk készített nyomógomb ősosztálya a TButton. A buttonnak legtöbbször a következő tulajdonságait szoktuk beállítani: Tulajdonság Hatás Típus Name a button hivatkozási neve, amit itt megadunk, String az lesz a példányosított osztály neve Caption A karakterlánc, ami a nyomógombra kiíródik String Font.Size A font mérete, amivel a nyomógombra Integer ráíródik szövege Font.Color A font színe, amivel a buttonra ráíródik a TColor szövege Font.Style A font stílusa TFontStyle (fsBold, fsItalic, fsUnderline, fsStrikeOut) A buttonnak

legtöbbször a következő eseményéhez rendelünk alprogramot: onClick A nyomógomb lenyomása A lemezen nézzük meg: .programok5-Gr-Vezerloelemek könyvtárban a 3 példát Az Edit (TEdit) Az Edit a felhasználó oldaláról nézve egy beviteli mező, a program oldaláról pedig gyakorlatilag egy input eszköz. Az Editnek legtöbbször a következő tulajdonságait szoktuk beállítani: Tulajdonság Hatás Típus Name az edit hivatkozási neve, amit itt megadunk, String az lesz a példányosított osztály neve Text A karakterlánc, ami az edit kimenete String Font.Size Az editbe íródó karakterek mérete Integer Font.Color Az editbe íródó karakterek színe TColor Font.Style A font stílusa TFontStyle (fsBold, fsItalic, fsUnderline, fsStrikeOut) Color Az edit színe (a karakterek háttere) TColor Az Edit eseményeihez legtöbbször nem rendelünk alprogramot. A lemezen nézzük meg: .programok5-Gr-Vezerloelemek könyvtárban a 4, 5 példát CheckBox (TCheckBox) A CheckBox

egy jelölőnégyzet, vagyis olyan gomb, - 37 - amely megtartja beállított állapotát, és le is lehet kérdezni, hogy milyen állapotban van. Két vagy három állapota lehetséges. Ha az AllowGrayed logikai típusú tulajdonság igaz akkor 3 állapota van, egyébként kétállapotú. A jelölőnégyzet állapotát a State tulajdonság tárolja, melynek értékei a következők lehetnek: cbUnchecked nincs bejelölve cbCheched be van jelölve cbGrayed szürke nyomógomb, vagyis inaktív A checkboxnak legtöbbször a következő tulajdonságait szoktuk beállítani: Tulajdonság Típus Hatás Name a CheckBox hivatkozási neve, amit itt String megadunk, az lesz a példányosított osztály neve Caption A karakterlánc, ami a jelölőnégyzet mellé String kiíródik Alignment A jelölőnégyzet és a szöveg elhelyezkedését szabályozza. Értékei lehetnek: taLeftJustify, taRightJustify. Font.Size A CheckBox mellé íródó karakterek mérete Integer Font.Color A CheckBox

mellé íródó karakterek színe TColor Font.Style A font stílusa TFontStyle (fsBold, fsItalic, fsUnderline, fsStrikeOut) Color A CheckBox hátterének színe (a karakterek TColor háttere) A lemezen nézzük meg: .programok5-Gr-Vezerloelemek könyvtárban a 6 példát RadioButton, RadioGroup A RadioButtont más néven választógombnak is nevezzük. A választógombokat általában csoportokba rendezve használjuk. Egy csoportban egyidejűleg csak egy választógomb bejelölése lehetséges. Ha a RadioButtonokat egyszerűen a formra helyezzük, akkor a formon lévő összes RadioButton egy csoportba tartozik, vagyis csak 1 gomb jelölhető be egyidejűleg az egész formon. A RadioButtonnak általában azokat a tulajdonságait szoktuk beállítani, mint a CheckBoxnak. Amiben eltér, az a gomb lekérdezése és a gomb átállítása. RadioButton1.Checked:=True; if Radiobutton1.Checked Then Ha RadioGroupot hozunk létre, akkor a következőképpen helyezhetünk el gombokat rajta: Az

objektum-felügyelőben megkeressük az items pontot, és begépeljük a megfelelő választógombok neveit. Ezek tulajdonképpen a Caption értékei lesznek Minden sor 1 RadioButton nevét jelzi. A RadioButtonok egy tömbbe kerülnek, melynek számozása 0-val kezdődik. Hogy melyik választógomb van bejelölve, azt az itemindex tulajdonsággal kérhetjük le. A lemezen nézzük meg: .programok5-Gr-Vezerloelemek könyvtárban a 7, 8 példát ScrollBar (TScrollBar) A ScrollBar egy görgetősáv, a csuszka állapotával valamilyen egész számot tudunk beállítani. A következő tulajdonságai vannak: - 38 - Tulajdonság Min Hatás Az az érték, amit akkor vesz fel, ha a csuszka a bal szélen van Az az érték, amit akkor vesz fel, ha a csuszka a jobb szélen van Azt az értéket kérhetjük le, amelyen a csuszka épp elhelyezkedik Ez azt az értéket állítja be, hogyha a ScrollBar szélein lévő nyilakra kattintunk, akkor mennyivel mozduljon el a csuszka. Ez azt az

értéket állítja be, hogyha lapozunk, akkor a csuszka mennyivel mozduljon el. Max Position SmallChange LargeChange Típus integer integer integer integer integer A lemezen nézzük meg: .programok5-Gr-Vezerloelemek könyvtárban a 9 példát ListBox (TListbox) A ListBox vezérlő lényege, hogy több string típusú elemet kínál választásra. A stringeket tömbbe helyezi, így a megfelelő elemet tömbelemként érhetjük el. A következő tulajdonságait használhatjuk: Tulajdonság Hatás Típus Items.Count A lista elemeinek száma Integer Items A lista elemei Array[0.n] of String; Items.Delete(n) A lista adott elemének törlése Items.Insert(n,ka Új elem beszúrása a listába az n-edik rakterlánc) elem után Items.Add Új elem hozzáfűzése a listához Items.SaveToFile A lista elemeit elmenthetjük (fájlnév) szövegfájlba. Minden eleme külön sorba kerül. Items.LoadFrom A lista elemeit szövegfájlból File(fájlnév) betölthetjük. Selected Kijelölt elem-e

Array[1.n] of Boolean A lemezen nézzük meg: .programok5-Gr-Vezerloelemek könyvtárban a 10 példát ComboBox (TComboBox) A kombinált lista egy Edit szövegmező és egy ListBox lista összeépítéséből származik. A legtöbb tulajdonság egyezik a ListBox tulajdonságaival, ezen kívül vannak még plusz tulajdonságok: Tulajdonság DropDownCount Text Leírás egyidejűleg megjelenített tételek száma A szövegmezőben lévő szöveg Típus Integer String A lemezen nézzük meg: .programok5-Gr-Vezerloelemek könyvtárban a 11 példát Memo (TMemo) A Memo több sorból álló szöveg feldolgozását teszi lehetővé. A szöveg sorai tömbelemekként tárolódnak. A Memo tartalmát szöveges állományba is elmenthetjük, és be is tölthetjük onnan. - 39 - A Memonak legtöbbször a következő tulajdonságait használjuk: Tulajdonság Leírás Típus Font.Size A Memoba íródó karakterek Integer mérete Font.Color A Memoba íródó karakterek TColor színe

Font.Style A font stílusa TFontStyle (fsBold, fsItalic, fsUnderline, fsStrikeOut) Color A Memo színe (a karakterek TColor háttere) Lines A Memoban tárolt szöveg sorai Array[1.n] of char Lines.SaveToFile(fájlnév) A Memo szövegének elmentése szöveges állományba Lines.LoadFromFile(fájlnév Szöveges állomány betöltése ) Memoba SelText A kijelölt szöveg String ScrollBars A Memo görgetősávjainak TScrollStyle jellemzői. Értékei lehetnek: ssNone, ssHorizontal, ssVertical, ssBoth Clear A Memo tartalmának törlése GetTextLen A Memo tartalmának mérete A lemezen nézzük meg: .programok5-Gr-Vezerloelemek könyvtárban a 12 példát Menük használata A legtöbb Windows alkalmazás menürendszert használ a különféle részfeladatok végrehajtásának kezdeményezéséhez. A Delphi menütervezője lehetővé teszi menürendszerek könnyű kialakítását. A menüvel kapcsolatos komponenseket használva futás közben is megváltoztathatjuk programunk

menürendszerét. Ha már kialakítottuk a menütervezővel a menürendszer vázát, nincs más dolgunk, csak a menüpontok onClick eseményeihez hozzárendelni a megfelelő alprogramokat. Ezt egy egyszerű duplakattintással elvégezhetjük a megfelelő menüponton. Fájlkezeléssel kapcsolatos dialógusdobozok Az OpenDialog párbeszéd-ablakot fájlnyitásra használjuk. Egy Windowsban megszokott fájlkiválasztó ablakban választhatjuk ki a megnyitandó állományt. A SaveDialog párbeszédablakot fájl mentésére használhatjuk. Itt szintén egy Windowsban megszokott párbeszédablakban határozhatjuk meg, hogy mi legyen az elmentendő állomány neve. Mindkét dialógusdoboz használata két lépésből áll: 1. A dialógusablak futtatása az Execute - 40 - metódussal. 2. Miután lefutott a párbeszédablak, a Filename tulajdonságban megjelenik a kiválasztott állomány a teljes elérési úttal. Egy rövid példa: . . Opendialog1.Filter:=Szövegfájlok

(*.txt)|*.txt|Pascal fájlok (*.pas)|*.PAS; If Opendialog1.Execute Then Memo1LinesLoadFromFile(Opendialog1Filename); Itt egy Memoba töltöttünk be egy txt állományt. Az Opendialog1.Execute elindítja a párbeszédablakot, és miután a párbeszédablak futása befejeződött, kétféle értékkel térhet vissza: true, ha állományt választottunk, false, ha választás nélkül bezártuk az ablakot. A lemezen nézzük meg: .programok5-Gr-Vezerloelemek könyvtárban a 13 példát A Delphi grafikus lehetőségei A Canvas tulajdonság A Canvas tulajdonság a grafika objektum-orientált megfogalmazása. Minden grafikus vezérlő rendelkezik Canvas tulajdonsággal. A Canvas objektumot úgy képzelhetjük el, mint egy festőkészlet rajzeszközeit. A Canvas néhány alapvető rajzeszköze a toll (Pen), az ecset (Brush) és a bitkép. A rajzoláshoz szükségünk van: - egy koordináta-rendszerre, melynek ismerjük kezdő és végkoordinátáját. Ez a következő:

(0,0)(Objektumnév.ClientWidth, ObjektumnévClientHeight) - Szükségünk van rajzeszközökre: Objektumnév.CanvasPen, ObjektumnévCanvasBrush Használhatunk előre definiált formákat: pl.: Objektumnév.CanvasLineto, Objektumnév.CanvasRectangle, Stb Rajzeszközök Pen: más néven toll. Valamilyen vonal húzására használható rajzeszköz Tulajdonságai: Tulajdonság Leírás Típus Color a vonal színe integer Style a vonal stílusa TPenStyle (psSolid, psDash, psDot, psDashDot) - Brush: más néven ecset. Festésre, kitöltésre használhatjuk Tulajdonságai: Tulajdonság Leírás Típus Color a kitöltés színe integer Style a kitöltés stílusa TBrushStyle (bsSolid, bsCross, bsHorizontal, bsVertical) Beépített grafikai alakzatok Moveto(x,y) Lineto(x,y) Rectangle(xk,yk,xv,yv) Pixels[x,y]:=Szín a grafikus kurzor áthelyezése adott pontra vonal húzása a grafikus kurzor kiindulási pontjától téglalap rajzolása pont rajzolása adott színnel Színek A Delphiben a

színeket legtöbbször színkódokkal adjuk meg. A színkód egész típusú változó, melyből 3 byteot használ a rendszer a szín meghatározására. A színeket a legkönnyebb hexadecimális formában megadni. Például: $FF00AA FF a kék intenzitása - 41 - 00 a zöld intenzitása AA a vörös intenzitása vagyis: $BBGGRR Minden szín e három szín keverékéből áll elő. A legegyszerűbben megjegyezhető színkódok: $000000 Fekete $FFFFFF Fehér $808080 Sötétszürke $BBBBBB Világosszürke $FF0000 Kék $00FF00 Zöld $0000FF Piros $FFFF00 Cián $FF00FF Bíbor $00FFFF Sárga Image Az Image elemet az Additional fülön találjuk. Ez egy grafikára specializált elem, ugyanúgy megvan a Canvas tulajdonsága, mint a többi elemnek, de rendelkezik néhány speciális lehetőséggel: Tulajdonság Leírás Picture.SaveToFile(filename) Az Image-ben lévő képet fájlba menti Picture.LoadFromFile(filename) Fájlból képet tölt az Image-be A mentéskor tömörítetlen BMP

fájl keletkezik. Az Image csak tömörítetlen BMP fájlokat tud használni. - 42 - Gyakorló feladatok a Delphi oktatásához Ezek a feladatok pascal kifejezések gyakorlására szolgálnak. Egyaránt megoldhatóak egyszerű pascal programként, Object Pascal programként, de átírhatjuk őket grafikus felületű alkalmazássá is. A feladatok megoldásához szükséges matematikai és geometriai képleteket a feladatsor végén található táblázat tartalmazza. 1. Egyszerű aritmetikai műveletek 1.1 Olvasson be két számot, majd jelenítse meg a két szám összegét, szorzatát, különbségét, hányadosát. A kiírt eredményeket kísérje megfelelő szöveg 1.2 Kérjünk be két számot, és végeztessünk velük egészosztást, és maradékszámítást 1.3 Kérjük be egy háromszög alapját és magasságát, és számítsuk ki a háromszög területét 1.4 Kérjük be egy háromszög három oldalának hosszát, és számítsuk ki kerületét és területét 1.5

Kérjük be egy háromszög a, b oldalát és gamma szögét, és számítsuk ki a háromszög területét A szöget fokban vigyük be! 1.6 Kérjük be egy trapéz a, c oldalát és magasságát, és számítsuk ki a területét 1.7Kérjük be egy deltoid e, f átlóját, és számítsuk ki a területét 1.8 Kérjük be egy húrnégyszög négy oldalát, és számítsuk ki kerületét, területét 1.9 Kérjük be egy kör sugarát, ebből számítsuk ki kerületét, kerületét 1.10 Kérjük be egy szabályos tetraéder élét, és számítsuk ki a felszínét, térfogatát, a körülírt és a beírt gömb sugarát. 1.11 Kérjük be egy szabályos oktaéder élét, és számítsuk ki a felszínét, térfogatát, a körülírt és a beírt gömb sugarát. 1.12 Kérjük be egy szabályos dodekaéder élét, és számítsuk ki a felszínét, térfogatát, a körülírt és a beírt gömb sugarát. 1.13 Kérjük be egy szabályos ikozaéder élét, és számítsuk ki a felszínét,

térfogatát, a körülírt és a beírt gömb sugarát. 1.14 Adott egy általános háromszög a, b oldala és gamma szöge Számítsuk ki a c oldalt A gamma szöget fokban adjuk meg a program számára! 2. Feltételes utasítások, többirányú elágazások gyakorlása 2.1 Kérjünk be két számot, a-t és b-t és végezzünk osztást mindkét irányban (a/b, b/a) Küszöböljük ki a nullával való osztás lehetőségét. 2.2 Kérjünk be egy számot, és döntsük el, hogy a bekért szám -5 és 5 közé esik-e 2.3 Kérjünk be egy számot, és döntsük el, hogy páros-e 2.4 Kérjünk be egy számot, és döntsük el, hogy osztható-e 3-mal és 5-tel 2.5 Kérjünk be egy számot, és döntsük el, hogy osztható-e 7-tel vagy 9-cel 2.6 Kérjünk be egy számot, és ha osztható 2-vel és 3-mal is, írjuk ki, hogy osztható 2-vel és 3mal, de ha csak 2-vel vagy 3-mal osztható, írjuk ki a két szám közül, hogy melyikkel osztható Ha egyikkel sem osztható, írjuk ki, hogy

egyikkel sem osztható. 2.8 Írjunk programot egy másodfokú egyenlet megoldására! 2.9 Kérjük be 3 szakasz hosszát, és döntsük el, hogy szerkeszthető-e belőlük háromszög 2.10 Kérjük be egy háromszög oldalait, és határozzuk meg a háromszög típusát (egyenlő oldalú, egyenlő szárú, derékszögű, általános) 2.11 Kérjük be egy szabályos dodekaéder élét, és döntsük el, hogy belehelyezhetjük-e egy 100cm3 térfogatú gömbbe. 2.12 Kérjük be egy szabályos dodekaéder élét, és döntsük el, hogy belehelyezhetünk-e egy 100cm3 térfogatú gömböt. 2.13 Kérjük be egy szabályos ikozaéder élét, és döntsük el, hogy belehelyezhetjük-e egy 100cm3 térfogatú gömbbe. 2.14 Kérjük be egy szabályos ikozaéder élét, és döntsük el, hogy belehelyezhetünk-e egy 100cm3 térfogatú gömböt. - 43 - 3. Ciklusutasítások gyakorlása 3.1 Írassunk ki számokat 1-esével növekvő sorrendben 1-től 20-ig 3.2 Írassunk ki számokat 1-esével

csökkenő sorrendben 20-tól 1-ig 3.3 Írassunk ki számokat 1-esével növekvő sorrendben 1-től adott számig 3.4 írassunk ki számokat 1-esével csökkenő sorrendben adott számtól 1-ig 3.5 írassunk ki számokat 1-esével növekvő sorrendben adott számtól adott számig Ha a1>an akkor cseréljük meg a két változó értékét! 3.6 írassunk ki számokat 1-esével csökkenő sorrendben adott számtól adott számig! Ha a1<an akkor cseréljük meg a két változó értékét! 3.7 írassunk ki számokat adott értékkel növekedve, adott értéktől adott értékig Ha a1>an akkor cseréljük meg a két változó értékét! 3.8 írassunk ki számokat adott értékkel csökkenve, adott értéktől adott értékig Ha a1<an akkor cseréljük meg a két változó értékét! 3.9 Határozzuk meg az első 20 természetes szám összegét 3.10 Határozzuk meg az első n természetes szám összegét 3.11 Adjuk meg adott intervallumba eső természetes számok összegét

3.12 Írassunk ki adott intervallumban 3-mal osztható számokat 3.13 Írassunk ki adott intervallumban 3-mal és 5-tel osztható számokat 3.14 írassunk ki adott intervallumban 2-vel, 3-mal és 5-tel nem osztható számokat 3.15 Töltsünk fel egy 10 elemű tömböt tetszőleges számmal, határozzuk meg minimumát, maximumát és összegét. 3.16 Töltsünk fel egy tömböt n darab, de maximum 20 tetszőleges számmal, határozzuk meg aritmetikai, harmonikus, és négyzetes középértékét. 3.17 Töltsünk fel egy 100 elemű tömböt 10 és 100 közé eső véletlen egész számmal, és rendezzük növekvő sorrendbe. 3.18 Töltsünk fel egy 100 elemű tömböt 10 és 100 közé eső véletlen valós számmal úgy, hogy egy érték csak egyszer szerepeljen. 3.19 Töltsünk fel egy 20 elemű tömböt olyan 1 és 100 közé eső egész számmal, melyek oszthatók 2-vel és 3-mal is. 3.20 Kérjünk be egy egész számot, és írassuk ki az osztóit 4. Függvények és eljárások

gyakorlása 4.1 Írjunk függvényt, amellyel ki lehet számolni egy háromszög területét alap és magasság alapján. 4.2 Írjunk függvényt, mellyel meghatározhatjuk, hogy 3 tetszőleges hosszúságú szakaszból szerkeszthető-e háromszög. 4.3 Írjunk függvényt egy szög tangensének kiszámítására 4.4 Írjunk függvényt egy szög kotangensének kiszámítására 4.5 Írjunk függvényt amellyel ki tudjuk számítani egy trapéz területét a két párhuzamos oldal hossza és a magasság alapján. 4.6 Írjunk függvényeket, amelyekkel kiszámíthatjuk egy dodekaéder a. Felszínét b. Térfogatát c. Körülírt gömb sugarát d. Beleírt gömb sugarát 4.7 Írjunk függvényeket, amelyekkel kiszámíthatjuk egy ikozaéder a. Felszínét b. Térfogatát c. Körülírt gömb sugarát d. Beleírt gömb sugarát 4.8 Írjunk függvényeket, amelyekkel meg tudjuk határozni egy 100 elemű valós számokból tömb a. Minimumát - 44 - b. Maximumát c. Összegét d.

Aritmetikai átlagát 4.9 Írjunk függvényeket, amelyekkel meg tudjuk határozni egy n elemű valós számokból álló tömb a. Minimumát b. Maximumát c. Összegét d. Aritmetikai átlagát 4.10 Készítsünk olyan eljárást, amely egy 100 elemű, valós számokból álló tömb értékeit növekvő sorrendbe rendezi. 4.11 Készítsünk olyan eljárást amely egy n elemű, valós számokból álló tömb értékeit növekvő sorrendbe rendezi. 4.12 Írjunk függvényt, mely egy adott számot adott hatványra emel! 4.12 Írjunk függvényt, amely kiszámítja n! értékét 4.13 Írjunk függvényt az ismétlés nélküli kombinációk kiszámítására! 4.14 Írjunk függvényt az ismétléses kombinációk kiszámítására! 4.15 Írjunk függvényt, mely egy másodfokú egyenletet old meg a megoldóképlet alapján - Ha az egyenletnek 2 valós megoldása van a függvény visszatérési értéke legyen 2, és a megoldások az x1 és az x2 paraméterben szerepeljenek. - Ha az

egyenletnek 1 valós megoldása van, a függvény visszatérési értéke 1 legyen, és a megoldás az x1 és x2 paraméterben is szerepeljen - Ha az egyenletnek nincs valós megoldása, a függvény visszatérési értéke legyen 0. 5. Objektumok és osztályok használatának gyakorlása 5.1 Készítsünk egy THaromszog nevű osztályt, melynek adatmezeje tárolja a háromszög 3 oldalának hosszát. Készítsük el hozzá a következő metódusokat: a. Eljárás, mely bekéri a három oldal hosszát b. Függvény, mely meghatározza, hogy szerkeszthető-e háromszög a megadott oldalakból Az oldalak bekérésénél hívjuk meg a megfelelő helyen, és ha a bekért oldalakból nem szerkeszthető háromszög, kezdje elölről a bekérést. d. Függvény, mely megadja a terület értékét e. Függvény, mely megadja a kerület értékét 5.2 Készítsünk egy TDodekaeder nevű osztályt, melynek adatmezeje tárolja a szabályos dodekaéder élhosszát. Készítsük el hozzá a

következő metódusokat: a. Eljárás, amely bekéri a dodekaéder élhosszát b. Függvény, mely kiszámítja a dodekaéder felszínét c. Függvény, mely kiszámítja a dodekaéder térfogatát d. Függvény, mely megadja a körülirt gömb sugarát e. Függvény, mely megadja a beírt gömb sugarát 5.3 Készítsünk egy TSzamok nevű osztályt, melynek adatmezőjében legyen egy tömb, amely képes eltárolni 100 darab valós számot. Készítsük el hozzá a következő metódusokat: a. Eljárás, mely feltölti a tömböt adott intervallumba eső véletlen számmal b. Függvény, mely megadja a tömb értékeinek minimumát c. Függvény, mely megadja a tömb értékeinek szórását d. Függvény, mely megadja a tömb értékeinek aritmetikai középértékét e. Függvény, mely megadja a tömb értékeinek harmonikus középértékét f. Függvény, mely megadja a tömb értékeinek négyzetes középértékét 5.4 Készítsünk egy TSorozat nevű osztályt, melynek

adatmezőjében legyen egy tömb, amely 500 darab egész számot el tud tárolni, és töltsük fel egy számtani sorozat n elemével. Készítsük el hozzá a következő metódusokat: a. eljárás, amely bekéri a sorozat részének adatait b. Függvény, mely megadja a tömb értékeinek aritmetikai középértékét - 45 - c. Függvény, mely megadja a tömb értékeinek harmonikus középértékét d. Függvény, mely megadja a tömb értékeinek négyzetes középértékét 6. Gyakorlófeladatok a GUI programozásához 6.1 Helyezzünk egy formra Edit-(ek)et, Button-(oka)t és Label-(eke)t Végeztessük vele el a következő műveleteket: a. Olvasson be két számot, majd jelenítse meg a két szám összegét, szorzatát, különbségét, hányadosát. A kiírt eredmények kerüljenek egy-egy Labelre, és kísérje megfelelő szöveg b. Kérjünk be két számot, és végeztessünk velük egészosztást, és maradékszámítást c. Kérjük be egy háromszög alapját és

magasságát, és számítsuk ki a háromszög területét d. Kérjük be egy háromszög három oldalának hosszát, és számítsuk ki kerületét és területét e. Kérjük be egy háromszög a, b oldalát és gamma szögét, és számítsuk ki a háromszög területét. A szöget fokban vigyük be! f. Kérjük be egy kör sugarát, ebből számítsuk ki kerületét, kerületét g. Kérjük be egy szabályos dodekaéder élét, és számítsuk ki a felszínét, térfogatát, a körülírt és a beírt gömb sugarát. h. Kérjük be egy szabályos ikozaéder élét, és számítsuk ki a felszínét, térfogatát, a körülírt és a beírt gömb sugarát. i. Adott egy általános háromszög a, b oldala és gamma szöge Számítsuk ki a c oldalt A gamma szöget fokban adjuk meg a program számára! 6.2 Készítsünk egy másodfokú egyenletet megoldó programot 6.3 Helyezzünk egy Formra beviteli mezőt, gombokat, egy ListBoxot, és Labeleket Ha a gombot lenyomjuk, akkor vigye be a

szövegmező tartalmát a ListBoxba. Tételezzük fel, hogy a ListBoxba egész számok kerültek. Számítsuk ki a ListBox elemeinek a. Minimumát b. Maximumát c. Ha egynél több elem van a ListBoxba, számítsuk ki az aritmetikai átlagát 6.4 Töltsük fel egy ListBox tartalmát 1001000 intervallumba eső valós véletlen számmal, és egy gomb lenyomásának hatására rendezzük növekvő sorrendbe. 6.5 Töltsünk fel egy ListBoxot nevekkel, és rendezzük ABC szerint növekvő sorrendbe A listából tudjunk törölni is. 6.6 Tegyünk egy Formra Memot, és egy gombot, amelynek lenyomása esetén a memoban található minden karakter nagybetűs lesz. Ismételt lenyomás esetén újra kisbetűsre váltson 6.7 Készítsünk egy egyszerű szövegszerkesztőt, Memo és menük segítségével, tudjunk menteni, megnyitni, új dokumentumot létrehozni. 6.8 Készítsünk egy egyszerű szövegszerkesztőt, melyben a kijelölt szövegrészt html kódokkal formázhatjuk.

<B>szöveg</B> vastag, <I>szöveg</I> dőlt, <U>szöveg</U> aláhúzott, kódokat használjuk. 6.9 Rajzoljunk két egyenest egy Formra, amely összeköti a form Canvassánák átellenes pontjait Az egyik vonal piros, a másik zöld legyen. 6.10 Töltsünk föl egy 100 elemű tömböt 0100 intervallumba eső véletlen egész számokkal, és rajzoljuk rá a tömb elemeinek görbéjét egy image tömbre. 6.11 Rajzoljunk egy szinuszgörbét pirossal, és egy cosinus görbét zölddel egy Image-re - 46 - Képlet és algoritmusgyűjtemény Átváltások: 180 1 rad = ° π Háromszög:   K =a bc 1 °= T= 180π rad a⋅m a T= ab sin γ 2 2 Téglalap: K =2  a b  T =ab Trapéz: Deltoid: a c ef T= m T= 2 2 Szabályos testek Tetraéder Oktaéder Rajz Felszín Térfogat Körülírt gömb Beírt gömb Gömb A=  3 a 2 2 a 3 V= 12 6 a 3 R= 4 1 r= R 3 A=2 V= 3 a 2 2 a 3 3 2 a R= 2 6 a r= 6 T =

 s s−a  s−b  s−c  V= - 47 - k 2 Húrnégyszög: T =   s−a  s−b   s−c  s−d  Dodekaéder Ikozaéder A=3  5  52  5 a 2 A=5  3a 5 157  5 3 V =  3  5 a 3 V= a 12 4 1  5 1  5 R= R= a a 4 4  4218  5 a 1 2511  5 r= a r= 12 2 10 4π 3 r 3 Másodfokú egyenlet megoldása ax 2bxc=0 −b  b 2 4 ac −b−  b 24 ac x1 = x 2= 2a 2a A=4πr 2 s=  Összegzés Osszeg:=0; for i:=1 to n do osszeg:=osszeg+tomb[i]; Minimumkiválasztás min:=1 for i:=2 to n do if tomb[i]<tomb[min] then min:=i A legkisebb értékű elem száma: min A legkisebb értékű elem értéke: tomb[min] Maximumkiválasztás max:=1 for i:=2 to n do if tomb[i]<tomb[max] then max:=i A legnagyobb értékű elem száma: min A legnagyobb értékű elem értéke: tomb[min] Rendezés növekvő sorrendbe for i:=1 to n-1 do for j:=i+1 to n if tomb[i]>tomb[j] then begin

csere:=A[i]; A[i]:=A[j]; A[j]:=csere; end; - 48 - Az oktatás gyakorlati megvalósítása szakközépiskolában Programozás a NAT-ban A NAT szerint a 8. és a 10 osztályban kell programozást tanítani valamilyen programozási nyelven. A Delphi oktatása általános iskolában gyakorlatilag megvalósítható, mivel a NAT előírja a logo használatát, 8. osztályban pedig csak a pascal nyelv alapjait írja elő Egyetlen lehetőség, a 10. osztály, vagyis valamilyen középiskola 2 évfolyama Eszközök, célok, követelmények Eszközök A Delphi 6 vagy Delphi 7 futtatásához szükség van legalább P2-es gépekre, valamint a Windows operációs rendszer valamelyik verziójára. Ez a lehetőség a legtöbb iskolában adott Amennyiben régebbi típusú számítógépek vannak, azokra telepíthetjük a Delphi régebbi verzióját, középiskolai oktatás céljára az is megfelel. Amennyiben az iskolai gépeken valamilyen Linux operációs rendszert használunk, telepíthetünk

Kylixot, ami kompatibilis a Delphi fejlesztőrendszerekkel. A lehetőségeket a következő táblázatban foglaltam össze: Delphi verziószám Háttértár foglalás (Mbyte) Minimális memória (Mbyte) Borland Delphi 5 150-200 16 Borland Delphi 6 170-250 32 Borland Delphi 7 190-300 64 Borland Kylix 3 250 64 A telepítő futtatásához szükséges, hogy minden számítógép rendelkezzen valamilyen nagy kapacitású cserélhető tárolóval, CD-ROMmal, vagy Mobil-Rackel. Amennyiben nem oldható meg, abban az esetben szükséges, hogy legyen minden gépen elérhető hálózati mappa, amelyben a telepítő benne van. Szükség van valamilyen oktatókönyvre is, amit a tanulók használnak. A boltokban kapható könyvek jóval bővebb anyagot ölelnek fel, mint amennyire a középiskolai oktatáshoz szükség lenne. Ezért készítettem egy rövid Delphi ismertetőt, amit oktatási célra is fel lehet használni. A hatékony oktatáshoz szükség van kommentekkel ellátott

példaprogramokra, amelyeket közösen elemezni kell a tanulókkal. Fontos, hogy a példaprogramok szorosan kapcsolódjanak a leadott tananyaghoz. Szükség van még egy feladatsorra, amelyekben olyan feladatok vannak, amelyeket használhatunk:  közös feladatmegoldásra  önálló feladatmegoldásra  számonkérésre Célok Középiskolákban a NAT a következő célokat tűzi ki a programozás oktatásában:  Ismerjen meg egy magas szintű programozási nyelvet.  Tudjon kezelni egy programfejlesztői környezetet.  Ismerje meg egy programozási nyelv programszerkezeti elemeit és adattípusait.  Tudjon önállóan tesztelni programokat. A Delphi rendszer alapja a pascal-nyelv, amely magas szintű programozási nyelv, vagyis a NAT által meghatározott programozási eszköznek megfelel. A Delphi programfejlesztő környezet viszonylag bonyolult (Turbo Pascalhoz, QBASIChez képest), ezért teljes részletességgel nem tanítható középiskolában, ezért az

oktatás során ki kell ragadni a - 49 - legalapvetőbb elemeket, amelyek használata egy működő program elkészítéséhez elengedhetetlenül szükséges. A programozási nyelv programszerkezeti elemeiből szintén a legalapvetőbb elemeket kell megismertetni a tanulókkal. Azokat az elemeket, amelyek feltétlenül szükségesek valamilyen algoritmus programnyelvi megfogalmazására. A teljes rendszer középiskolákban szintén nem tanítható meg Az önálló teszteléshez szükséges, hogy a tanuló jól ismerje a nyelv elemeit, a fejlesztőrendszer hibaüzeneteit, valamint tisztában legyen a várt eredménnyel. Követelmények:  Ismerje a használt fejlesztői környezet menürendszerét, kézikönyvét, súgójának használatát, adattípusait, programszerkezeti elemeit, futtató és fordító rendszerét, gyorsbillentyűit.  Ismerjen meg és tudjon kódolni egyszerűbb feladatok esetén egy algoritmus-leírást.  Ismerje egy magas szintű programozási nyelv

alapvető utasításkészletét.  Legyen igénye elkészített programjainak tesztelésre, felhasználói felületének kialakításra. A Delphi oktatása órákra bontva A NAT által meghatározott óraszámok A NAT a programozási nyelvek használatának oktatására a következő óraszámokat írja elő: Óratípus Óraszám Új anyag 8 Gyakorlás 12 Számonkérés 2 Összesen 22 Ebből következik, hogy a Delphi rendszer oktatását 8 témakörre kell felosztani, ami azt jelenti, hogy 8 elméleti órát kell tartani belőle. 12 órát pedig a programozás gyakorlati megvalósításaira kell szánni. A Delphi elméleti részének tanítása A NAT programozásból 8 új anyag oktatását követeli meg programozásból. A Delphi alapvető ismeretanyagát lebontottam 8 részre, és úgy rendeztem a témaköröket, hogy a legalapvetőbb ismeretekkel kezdem, és erre építem fel az új ismeretanyagot. A Delphi rendszer elméleti óráinak témáit a következő táblázatban

foglaltam össze: Azonosító E1 E2 E3 E4 E5 E6 Elméleti anyag Az Object Pascal nyelv jelkészlete, programok és modulok felépítése Adattípusok és deklarációk Object Pascal kifejezések, utasítások Konzolalkalmazások alapvető I/O műveletei Alprogramok és Objektumok használata Grafikus vezérlőelemek használata, TForm, TLabel, TEdit, TCheckBox, TRadioButton, TRadioGroup, TListbox, TComboBox, TScrollBar, TMemo E7 Grafikus vezérlőelemek használata, Menük, Dialógusok E8 A Delphi grafikus lehetőségei, Canvas, TImage A fejlesztőrendszer menürendszerének oktatására nem kell külön elméleti órát szánni, célszerű, ha a gyakorlat során fokozatosan ismertetjük meg a tanulókkal. Mivel eleinte csak konzolalkalmazásokat készítenek, így azoknak csak a létrehozását, mentését és visszatöltését kell ismerniük. Amikor elkezdődik a grafikus rész oktatása, a fejlesztőrendszer további részleteire is csak ott kell kitérni, amikor a gyakorlati

oktatás megkezdődik, illetve amikor valamilyen új menüpont használata válik - 50 - szükségessé. A Delphi gyakorlati részének tanítása A gyakorlati oktatást attól a ponttól kezdhetjük el, amikor már a tanulók tisztában vannak  Az Object Pascal nyelv jelkészletével  Az adattípusok deklarációjával  Az Object Pascal kifejezésekkel  A Konzolalkalmazások I/O műveleteivel Ebből következik, hogy az első gyakorlati óra a programozási nyelvek oktatásának az 5. órája A NAT szerint a programozás gyakorlására 12 óra van adva. A gyakorlati órák célja, hogy a tanuló a megszerzett elméleti ismeretek segítségével programot készítsen. A gyakorlati órák témakörök szerinti felosztását a következő táblázatban foglaltam össze: Azonosító Téma GY01 GY02 GY03 GY04, GY05 GY06 GY07 GY08 GY09, GY10 GY11 GY12 write, writeln, read, readln utasítások gyakorlása egyszerű típusok használata összetett típusok használata

feltételes utasítások használata ciklus utasítások használata alprogramok készítése objektumok, osztályok készítése, használata grafikus vezérlőelemek használata dialógusdobozok, menük használata Grafika Kapcsolódó elmélet E4 E2, E3 E2, E3 E2, E3 E2, E3 E5 E5 E6 E7 E8 A Számonkérés A NAT szerint 2 számonkérési óra van programozásból. A számonkérési órák feladatait a következő témakörökből lehet válogatni: Azonosító Kapcsolódó elmélet Kapcsolódó gyakorlat SZ1 E2, E3, E4, E5 GY01, GY02, GY03, GY04, GY05, GY06, GY07, GY08 SZ2 E6, E7, E8 GY09, GY10, GY11, GY12 A számonkérés feladatait lehet a melléklet feladataiból választani, vagy valamelyik órán elkészített programból. Az órák időrendi sorrendje a következő: E1, E2, E3, E4, GY01, GY02, GY03, GY04, GY05, GY06, E5, GY07, GY08, SZ1, E6, GY09, GY10, E7, GY11, E8, GY12, SZ2. - 51 - Óratervek E1 Az óra tárgya: Az Object Pascal nyelv jelkészlete, programok és

modulok felépítése. Az óra típusa: Új ismeretanyagot feldolgozó óra. Az óra célja: A diákok ismerjék meg az Object Pascal jelkészletét, a programok és modulok felépítésének vázlatát. 1. A mai órán megismerkedünk egy konkrét programfejlesztő- Rövid bevezető 5 perc rendszerrel, a Delphivel. 2. A Delphiben a pascal nyelvet használhatjuk programozásra, algoritmusok megfogalmazására. 3. A Delphiben egyaránt készíthetünk hagyományos konzolalkalmazásokat, és grafikus felületű programokat 1. Az object pascal jelkészlete az ASCII karakterkészlet elemeiből Elemi jelkészletek épül fel: 5 perc 2. Ezek a következők: (táblára felrajzolni a melléklet 5 oldalán lévő táblázatot, rövidmagyarázat hozzá) - Az angol ABC betűi: utasítások, változók nevei és típusai írhatók le velük - Decimális számjegyek: állandó mennyiségek jelölésére, vagyis számkonstansok megadására használhatjuk. - Hexadecimális számjegyek: Szintén

számkonstansokat tudunk leírni velük. - Vezérlőkarakterek: Szóköz, soremelés, tabulátor, a forráskód formázására használhatjuk. - Speciális karakterek: Műveleti jelek, zárójelek, dollárjel, kukacjel, és az utasítások végét jelző pontosvessző. Tudja mindenki hogyan „csinálhatunk” kukacjelet? (ALTgr+V) És dollárjelet? (ALTgr+É) 3. Vannak olyan karakterpárok, amelyek speciális jelentéssel bírnak: - := legyen egyenlő (értékadás) - <>, <=, >=, relációs jelek - . intervallum megadása - (* ) megjegyzés nyitása, zárása - // megjegyzés kezdete 1. Azonosítók: utasításokat, eljárásokat, változókat névvel Azonosítók, jelölhetünk a pascalban. Az azonosítók hossza 63 karakter jelölések, összetett hosszúságúak lehetnek. Számmal nem kezdődhetnek, speciális jelek karaktereket nem tartalmazhatnak, kivéve a jelet. 15 perc 2. Számkonstansok: Egész vagy valós számokat jelölhetünk velük - egész számokat

megadhatunk decimális és hexadecimális formában is. Pl: 2568, 410, $A23D - valós számokat megadhatjuk tizedes törtként, vagy normál alakban. Pl 3217, 14567+E2 1.4567+E2 jelentése 14567*102, vagyis: 1.4567*100=145.67 3. Szövegkonstansok: Szövegkonstansokat aposztrófok közé írt szöveggel tudunk megadni. ’Az alma leesett a fáról’ 4. Címkék: A címkékkel megjelölt helyekre feltétel nélkül tudunk ugrani a goto utasítással. A címkék kezdődhetnek számmal is, de nem tartalmazhatnak speciális karaktereket. 5. A kifejezésben szereplő konstansokat, változókat, - 52 - függvényhívásokat operandusoknak nevezzük. 6. A kifejezésben szereplő műveleti jeleket, relációs jeleket operátoroknak nevezzük. 7. Kifejezések: Operátorok és operandusok sorozatából épülnek fel 8. Megjegyzések, vagyis kommentek: A program azon részei, amiket az értelmező vagy fordító figyelmen kívül hagy. Itt leírhatjuk „emberi” nyelven, hogy a programunk

adott része mit csinál. {}, (* ) közé, vagy // után írjuk. Most nézzük meg összességében, hogyan épül fel a program. (magyarázat közben írni a programvázat) 1. Programfej: Itt adunk nevet a programnak a program kulcsszóval A kulcsszó után a program nevét adjuk meg. A programnévvel szemben ugyanazok a kikötések, mint az azonosítókkal. Ide tartoznak a globális fordítási direktívák is. Mi az {$APPTYPE CONSOLE} direktívát fogjuk csak használni. 2. Deklarációs rész: címkéket (label), konstansokat (const), típusokat (type), változókat (var), eljárásokat (procedure) és függvényeket (function) deklarálhatunk. Az eljárások és a függvények daklarációs részében szintén ugyanezeket deklarálhatjuk. 3. Programtörzs: A program utasítási sorait tartalmazza Előfordulhat, hogy vannak olyan típusaink, változóink, eljárásaink, függvényeink, amelyeket később is szeretnénk felhasználni más programokban. Az ilyen elemeket célszerű

modulba szervezni Egy modul a következőképpen néz ki: 1. Modulfej: Unit modulnév; 2. Interface: Használt típusok, és az eljárások, függvények fejrészei 3. Implementation: eljárások, függvények teljes leírása 4. Initialization: Azok az utasítások, amelyek azon programok indításakor futnak le, amelyek használni fogják a modult. 5. Finalization: Azok az utasítások, amelyek azon programok leállásakor hajtódnak végre, amelyek használni fogják a modult. A mai órán vázlatosan megnéztük, hogyan és mikből épül fel az Object Pascal program, és a modul. Otthoni tanulásra használhatjátok a melléklet 5-8 oldalát. - 53 - Az Object-Pascal programok felépítése 9 perc Object Pascal modulok felépítése 9 perc 2 perc E2 Az óra tárgya: Adattípusok és deklarációk. Az óra típusa: Új ismeretanyagot feldolgozó óra. Az óra célja: A tanulók ismerjék meg, hogy hogyan lehet adattípusokat deklarálni A mai órán azzal foglalkozunk,

hogyan tudunk adattípusokat deklarálni Object Pascal nyelven, és hogy milyen adattípusok vannak. 1. Egyszerű adattípusok Ezen belül vannak egész, vagyis sorszámozott, és valós típusok. 2. Vannak összetett, más néven strukturált adattípusok Ezen belül vannak tömb, halmaz, és rekord típusok. A halmaz típussal középiskolában nem foglalkozunk de érdemes elolvasni a melléklet 12. oldalát 3. Állománytípusok 4. Osztály-referencia 5. Vannak még variáns, mutató, eljárástípus, ezekkel szintén nem fogunk foglalkozni, de érdemes elolvasni a melléklet 12-13. oldalát Az egyszerű adattípusok közös jellemzője, hogy egyszerre egy adatot tárolnak. 1. Sorszámozott típusok: Ezek a változók egész számokat tárolnak, vagy valamilyen egyértelmű hozzárendelés definiálható az egész számokkal. - A legegyszerűbb a boolean. Ez logikai típus, értéke lehet igaz, vagyis true, hamis, vagyis false. var logikai:boolean; L1,L2:boolean; - A

legegyszerűbb egész típus a byte. Arról kapta nevét, hogy a memóriában az ilyen típusú változó 1 bájtot foglal. A legnagyobb szám amit ábrázolni tudunk vele 28-1, vagyis 255. Vagyis 256 értéket vehet fel. Mert a 0 is érték var a,b:byte; - A shortint szintén 1 bájtot foglal a memóriából. De más az értéktartománya, ugyanis ő negatív értéket is fel tud venni. -128127 az értéktartománya. Ez szintén 256 lehetséges érték var a,b:shortint; - A word típus már 2 bájtot foglal a memóriából. Vagyis 216 darab értéket vehet fel. Tehát a legnagyobb szám amit ábrázolni tudunk, a 65535. A smallint szintén két bájtot foglal, de negatív értéket is felvehet. Az ő értéktartománya: -3276832767 var a,b:word; c,d:smallint; - A longvord 232 értéket vehet fel. Szintén 32 bites az integer, de ő negatív számokat is tud tárolni. Var a, b:longword; c,d:integer; - Szintén sorszámozott típus a karakter típus. Az ilyen típusú változó nem

számértékeket tárol, hanem az ASCII kódtábla karaktereit. 256 karakter van, vagyis ez a változótípus is 1 bájtot foglal. var betu:char; 2. Valós típus A valós típus nem csak egész értéket tárolhat, hanem bármilyen valós számot. A valós típusok közül a realt fogjuk - 54 - az Object Pascalban változókat, Az óra témájának felvázolása 5 perc Egyszerű adattípusok 15 perc használni. var alfa, r:real; 3. A string típust karaktersorozatok tárolására használhatjuk Szavakat, mondatokat vagy bármilyen szöveget tud tárolni, de a szöveg 255 karakternél nem lehet hosszabb. var nevem:string; 4. Egyszerű adatokat nemcsak változóként deklarálhatjuk, hanem típusokat is létrehozhatunk velük. Pl: type logikai=boolean; egesz=integer; mondat=string; A karakter típusnak meg tudjuk adni a maximális hosszát is: Type Nev=string[20]; 1. A tömbtípus adott darabszámú azonos típusú elemeket tartalmazó Strukturált adattípus. Az elemek

darabszámát deklarációkor határozzuk meg: adattípusok var 10 perc szamok:array[1.20] of integer; kifejezésben így hivatkozhatunk a tömb elemeire: a:=szamok[5]; 2. Record típus: A record típust közvetlenül változóként ritkán definiáljuk, bár erre is van lehetőség az Object Pascalban. A record „részeit” rekordmezőknek hívjuk. Legtöbbször típusként definiáljuk, és csak utána „csinálunk” belőle változót: type szemely=record nev:string; kor:byte; end; var sz1, sz2:szemely; Lehetőségünk van a strukturált típusokat kombinálni is. Pl ha több személyt akarunk nyilvántartani: Var szemelyek:array[1.10] of szemely; Kifejezésekben a következőképpen hivatkozhatunk a recordok adataira: a:=sz1.kor; a:=szemelyek[4].kor; Az állománytípusok valamilyen állományt jelölnek. Deklarációkor Állománytípusok szükséges megadnunk, hogy milyen típusú állományt akarunk 5 perc kezelni. A típusos állományt felfoghatjuk úgy is, hogy nagy

mennyiségű azonos típusú adatok összessége. Típusos állományokat a következőképpen deklaráljuk: var Xfile:file of byte; Az Object Pascal, mint a neve is mutatja, objektum orientált programozási nyelv. A class típus használata és deklarációja hasonlít a rekord típushoz, annyi a különbség, hogy itt „rekordmezőként” itt nemcsak adatokat definiálhatunk, hanem eljárásokat, függvényeket is, amelyek műveletet végeznek az adatmezőkkel. A konstansok valamilyen állandó értéket jelölnek. Konstansokat a const foglalt szó után tudunk deklarálni. Kétféle konstans létezik: típusos és típus nélküli. Típus nélküli konstansok deklarálása: Const A=27; R=47.14; Nev=’Kovacs Istvan’; Típusos konstansok deklarálása: - 55 - Osztályreferencia 3 perc Konstansok 5 perc Const R:real=47.14; Nev:string[13]=’Kovacs Istvan’; Tudunk tömböt is deklarálni előre feltöltött értékekkel: Szamok:array[1.3] of integer=(12,4,7); A mai

órán adattípusokkal és deklarációkkal foglalkoztunk. A Az óra zárása mellékletben a 9-14 oldalon találtok leírást. 2 perc - 56 - E3 Az óra tárgya: Object Pascal kifejezések, utasítások. Az óra típusa: Új ismeretanyagot feldolgozó óra. Az óra célja: A tanulók ismerjék meg az Object Pascal alapvető utasításait, tudjanak kifejezéseket használni. Aritmetikai műveletek alatt valamilyen számokkal végzett műveletet Aritmetikai értünk. Az aritmetikai kifejezés pedig valamilyen matematikai kifejezést kifejezések jelenthet. Az operátorok lehetnek: +,-,*,/. Ide soroljuk még a mod és a 3 perc div műveletet is. a+b (a+b)*c a div b a mod b Használhatunk függvényhívásokat is: sqr(r)*3.14 sqrt(a*a+bb) sqrt(sqr(a)+sqr(b)) A relációs műveletek eredménye kétféle lehet: igaz vagy hamis. Összehasonlító, relációs Relációs műveletekkel szövegeket is összehasonlíthatunk: kifejezések Nev=’Kovacs Istvan’ 3 perc A logikai

kifejezésekkel általában relációs kifejezéseket kapcsolunk Logikai össze. Legjobb példa, ha ki akarjuk fejezni, hogy egy változó értéke kifejezések beleesik-e egy adott intervallumba. Pl: c változó értéke 515 4 perc intervallumban van-e? A<b a>26 c<=10 r<>0 (c>=5)and(c<=15) Ha a c változó értéke nagyobb egyenlő, mint 5 és kisebb egyenlő, mint 15, akkor a kifejezésűnk igaz. Ha valamelyik feltétel hamis, akkor hamis lesz az egész kifejezés. a kifejezés a következőképpen módosul, ha azt akarjuk kifejezni, hogy nincs benne: not((c>=5)and(c<=15)) Egyszerű utasítások segítségével 1 lépésben végrehajtható műveleteket Egyszerű írhatunk elő a programunk számára. utasítások 1. Értékadó utasítás: 5 perc a:=b+c; 2. Eljáráshívás writeln; 3. Függvényhívás a:=sqr(b); Előfordul, hogy több utasítást kell megadnunk ott, ahol csak egy Utasításblokk utasításra volna lehetőségünk. Ekkor

utasításblokkot kell készítenünk 2 perc begin utasítás; utasítás; end; Sokszor szükségünk van arra, hogy programunkat valamilyen változó Feltételes vagy kifejezés értékétől függően elágaztassuk. Ezt a következő utasítás utasítás segítségével tehetjük meg: 5 perc if logikai kifejezés then utasítás(blokk) else utasítás(blokk); Előfordul, hogy nem elágaztatni akarjuk programunkat, hanem csak akkor akarunk végrehajtani utasítást vagy utasítássorozatot, ha valamilyen feltétel teljesül. Ilyenkor az else ág elhagyható if logikai kifejezés then utasítás(blokk); Jegyezzük meg, hogy az else előtt álló sor vége után soha ne tegyünk - 57 - pontosvesszőt. Előfordul, hogy nemcsak 2 irányba akarjuk elágaztatni programunkat, Többirányú hanem több irányba, valamilyen sorszámozott típusú változó vagy elágazás kifejezés értékétől függően. Ezt a case utasítás segítségével tehetjük 5 perc meg. case szam of

1:utasítás(blokk); 2:utasítás(blokk); else:utasítás(blokk); end; Előfordul, hogy a programunkban egy utasítást vagy utasítássorozatot Ciklusutasításo k többször is meg kell ismételnünk. 1. Ha tudjuk az ismétlések számát, akkor számláló ciklust használunk 16 perc Ilyen a for ciklus. for ciklisváliozó:=kezdetiérték to végérték do utasítás(blokk); például, ha össze akarjuk adni az első 20 természetes számot: for i:=1 to 20 do osszeg:=osszeg+i; 2. Ha az ismétlések számát előre nem tudhatjuk, de ismerjük azt a feltételt, amíg az utasításokat ismételni kell, akkor feltételes ciklusutasítást használunk. Ilyen a while ciklus A while jelentése: amíg while feltétel do utasítás(blokk); A mai órán az Object Pascal utasításaival és kifejezéseivel Az óra zárása foglalkoztunk. A mellékletben nézzétek át a 16-19 és a 22-25 oldalakat 2 perc - 58 - E4 Az óra tárgya: Az Object Pascal alapvető IO műveletei. Az óra

típusa: Új ismeretanyagot feldolgozó óra. Az óra célja: A tanulók ismerjék meg a ki és beviteli műveleteket, billentyűzetről bekérést, képernyőre kiíratást, valamint fájlba írást, és fájlból olvasást. Minden program legfontosabb része a felhasználóval történő Az IO kapcsolattartás. Egy program legtöbbször kér valamilyen adatot a műveletek, mire felhasználótól, amivel műveletet végez, és aztán kiírja a használjuk végeredményt. A konzol alkalmazásoknál a bemeneti adatok 3 perc legtöbbször billentyűzetről érkeznek, a kimeneti adatokat pedig a képernyőre írjuk ki. A write és a writeln utasítás a képernyőre való kiíratás eszköze. A write és a Ezekkel az utasításokkal kiírathatunk szövegkonstansokat, writeln utasítás számkonstansokat, változók, kifejezések és függvények értékeit. 10 perc Writeln(’Ez egy szoveg’); write(’Ez egy szoveg’); Writeln(17); write(17); Writeln(a); write(a); Writeln(abs(a));

write(abs(a)); Writeln(sqrt(a*a+bb)); write(sqrt(aa+bb)); A write kiírja a megfelelő értéket a képernyőre, a writeln pedig egy soremelést is csinál a kiíratás után. A write és a writeln utasításnak tetszőleges számú paramétert megadhatunk vesszővel elválasztva: Writeln(’A szam negyzetgyoke:’, sqrt(szam)); Writeln(’c=’,c,’cm’); Writeln(’A haromszog oldalai:’,a,’cm ’,b,’cm ’,c,’cm ’); A kiíratást lehet formázni. Különösen fontos ez valós típusok esetén, mert alapértelmezésben a valós számok normál alakban íródnak ki, ami ember számára elég nehézkesen olvasható. Writeln(r:8:4); Ez azt jelenti, hogy tizedesponttal együtt 8 számjegy íródik ki, ebből 4 számjegy a törtrész. A read és a readln utasítással billentyűzetről olvashatjuk be A read és a valamilyen változó értékét. A read és a readln utasítás számok readln utasítás beolvasásánál egyformán viselkedik, viszont ha karakterláncot 10 perc

olvasunk be, akkor a read utasítás a karakterlánchoz hozzáfűzi a soremelést is. Readln(a); Readln(b); Readln(c); Ezt a három változót egy sorban is bekérhetjük: Readln(a,b,c); Az utóbbit nem használjuk gyakran, mert itt nincs lehetőség, hogy kiírjuk a képernyőre, hogy mit kérünk be. Ha ki akarjuk íratni, hogy mit kérünk be, akkor azt legtöbbször a write utasítással tesszük: Write(’a=’); Readln(a); A write és a writeln utasítás nemcsak képernyőre való kiíratáshoz Kiírás fájlba használhatjuk, hanem fájlba is írhatunk vele. A legegyszerűbb a 10 perc szöveges állományba való kiíratás. Az előző órák valamelyikében beszéltünk a fájlváltozókról. Hogyan tudunk szövegfájl változót deklarálni? Var szovfile:Textfile; Most ennek a fájlváltozónak a használatát nézzük meg részletesen. 1. Első lépés, hogy a fájlváltozóhoz hozzárendeljük a - 59 - fájlnevet. Ezt az assign eljárással tehetjük meg

Assign(szovfile,’szoveg.txt’); Vagy valamilyen karakterlánc típusú változóval is megadhatjuk: S:=’szoveg.txt’; Assign(szovfile,S); 2. A második lépésben meg kell nyitnunk írásra Ez kétféleképpen történhet: rewrite(szovfile); Ez törli a már meglévő fájl tartalmát append(szovfile); Ekkor nem törlődik a fájl tartalma, hanem továbbíródik. 3. A harmadik lépésben történik a tényleges fájlba írás a write vagy a writeln utasításokkal: write(szovfile,paraméterek); writeln(szovfile,paraméterek); Ugyanaz íródik bele az állományba, ami kiíródna a képernyőre. 4. Az fájl lezárása: close(szovfile); A típusos állományba is hasonlóan írhatunk, csak ott nem soronként vagy karakterenként, hanem ott egyszerre egy értéket tudunk írni az állományba. Var b:byte; Bbbb:file of byte; write(bbbb,b) illetve: type szemely=record nev:string; kor:byte; end; var sz:szemely; szemelyfile:file of szemely; write(szemelyfile,sz); A fájlból

való olvasást a read és a readln eljárással tudjuk Olvasás fájlból megvalósítani. 10 perc Legegyszerűbb a szövegfájlok használata. 1. Első lépés, hogy a fájlváltozóhoz hozzárendeljük a fájlnevet Ezt az assign utasítással tehetjük meg. Assign(szovfile,’szoveg.txt’); Vagy valamilyen karakterlánc típusú változóval is megadhatjuk: S:=’szoveg.txt’; Assign(szovfile,S); 2. A második lépésben meg kell nyitnunk írásra Ezt a reset eljárással tehetjük meg: reset(szovfile); 3. A harmadik lépésben történik az olvasás Az itt beolvasott érték minden esetben karakter vagy karakterlánc típus. readln(szovfile,szoveg); egy sor beolvasása read(szovfile,c); egy karakter beolvasása 4. Negyedik lépés az állomány lezárása Típusos állományoknál pedig a megfelelő típusú változó értékét tudjuk beolvasni az állományból. A mai órán a kiíratással és a beolvasással foglalkoztunk. Az anyaghoz Az óra lezárása kapcsolódó

ismertetőt a melléklet 20-22 oldalán találtok. 2 perc - 60 - GY01 Az óra tárgya: Az Object Pascal alapvető IO műveletei. Az óra típusa: Gyakorlati óra Az óra célja: A tanulók tanulják meg használni a beolvasó és kiírató utasításokat. A mai órán elkezdjük az eddig megtanultakat megvalósítani a Gép bootolása, gyakorlatban. Először is a Delphi-vel kezdjük, mégpedig azzal, Delphi indítása hogy hogyan írhatunk konzol-alkalmazásokat. Várjuk meg míg 3 perc elindul a rendszer, aztán indítsuk el a Delphit. Látunk egy olyan parancsikont, ami egy oszlopot ábrázol. Indítsuk el. A Delphi elindult, egy üres formot látunk. Itt grafikus alkalmazást Konzolalkalmazás készítéséhez tartozó tudunk készíteni. Most erre nem lesz szükségünk Zárjuk be menüpontok. File menü, Close All menüpont. Üres konzolalkalmazást szintén a File menü segítségével tudunk 5 perc készíteni. Vigyük az egeret a New menüpontra Itt kapunk egy almenüt.

Application, Form, CLX Application Ez egyik sem konzolalkalmazás. Kattintsunk az Other menüpontra. Ennek hatására kapunk egy ablakot, amiben rengetegféle dolog van. Ebből válasszuk ki a Console Application ikont. Kaptunk egy üres konzolalkalmazást. 1. Adjunk nevet a programunknak Legyen elso programom A minimális Object 2. A program következő sorában az {$APPTYPE CONSOLE} Pascal program fordítási direktívát látjuk. Onnan tudjuk, hogy fordítási direktíva, elkészítése nem pedig megjegyzés, hogy a nyitó kapcsos zárójel után egy 10 perc dollárjel van. Ehhez a sorhoz ne nyúljunk, hiszen így adjuk a fordító tudtára, hogy konzolalkalmazást készítünk. 3. A begin és az end között is látunk egy kapcsos zárójeles dolgot. Ez vajon fordítási direktíva, vagy megjegyzés? Mivel nincs dollárjel a nyitó kapcsos zárójel után, ezért megjegyzés. Töröljük ezt a sort. 4. Írjunk be valamilyen utasítást a programba A begin és az end közé.

Írassuk ki például a saját nevünket Mi a saját nevünk? Egy karakterlánc. A mi esetünkben most egy szövegkonstans Hogyan adunk meg paraméterként szövegkonstanst? Aposztrófok között. Tehát írjuk be: writeln(’Vezetéknév Keresztnév’); 5. Futtassuk le Mit tapasztalunk? Felvillan egy ablak, aztán eltűnik. Vajon miért? Kiírja a program a szöveget, aztán vége Leáll a futása, és a rendszer automatikusan bezárja az ablakot. Mit tegyünk, hogy lássuk is a szöveget? Várassuk a programot a kiírás után egy ENTER lenyomására. Vajon mivel tehetjük ez meg? Egy paraméter nélküli readln eljáráshívással. Tehát gépeljük be a kiíratás után, hogy readln; 6. Látja mindenki a nevét? Akinek nincs ékezet a nevében, az biztos, hogy jól látja. Sajnos kódlap problémák miatt nem tudunk ékezetes betűket használni konzolalkalmazásokban. Illetve meg lehet oldani, csak körülményes, ezt nem fogjuk megtanulni. Ne használjunk ékezetes betűket.

Mentsük el programunkat! Ezt a File menü, Save All pontjával Mentés, visszatöltés tehetjük meg. Mentéskor nemcsak 1 állomány kerül a gyakorlása lemezünkre, hanem több is. Ezért célszerű minden programot 5 perc külön-külön mappába menteni. Mentéskor is lehetőségünk van létrehozni mappát. Fontos, hogy ugyanúgy, mint a programnév, a - 61 - programfájlnév sem kezdődhet számmal. Ha fájlkezelővel megnézzük, 3 állomány jön létre mentéskor. Ebből a dpr kiterjesztésű fájl a megírt programunk. A Close All menüponttal zárjuk be a programunkat. Az Open Project menüponttal tudjuk megnyitni az elmentett programunkat. Nyissuk meg Feladat: Írjunk programot, amely kér tőlünk két egész számot, a-t és b-t. Miután bevittük a két számot, írjuk ki az eredményt 1. Csináljunk új konzolalkalmazást 2. Először is változókat kell deklarálnunk Ugye, a feladat az, hogy egész számokat adunk össze. Tehát milyen típusú változókat kell

deklarálnunk? Integer-t. Hogyan deklarálunk változókat? A var kulcsszó után. A változókat a főprogram előtt kell deklarálnunk. Vagyis: írjuk be a begin elé: Programírás Két bekért egész szám összege. 10 perc var a,b:integer; Meg is van a két változónk. 3. Nincs más dolgunk, mint a főprogram elkészítése A begin és az end közé írjuk a főprogramot. Mit kell csinálnia legelőször a programnak? Be kell kérnie 2 számot. Ezt a readln eljáráshívással tehetjük meg. Vagyis: readln(a); readln(b); Ezután pedig ki kell íratnunk az eredményt. Ezt a writeln eljáráshívással tehetjük meg. Mit tudunk kiírni a writeln eljárással? Kifejezés értékét, számkostanst, szövegkonstanst, változó vagy függvényértéket. writeln(’Osszeg:’,a+b); Az összeg a szövegkonstans, az a+b pedig a kifejezés. Mi kell az end elé, hogy lássuk az eredményt, és ne záródjon be az ablak? Egy üres readln. 4. Futtassuk le a programot! Mit látunk? Egy

villogó kurzort Mit vár most a program? Hogy bevigyük az a értékét. Bevitel után mit látunk? Ismét egy villogó kurzor az előzőleg beírt szám alatt. Most mire várhat a programunk? Nyilván arra, hogy bevigyük a b értékét. Kiíródott az eredmény Mit kell tennünk, hogy bezáródjon az ablak? Mire vár a program? Mi az utolsó utasítás? Readln. Tehát üssünk entert. 5. Programunk működött De csúnya, hogy az elején nem írja ki, hogy mit kér tőlünk. Változtassuk meg a programot! Mit kell csinálnunk a bekérés előtt? Ki kell íratnunk, hogy mit akarunk bekérni. Írjuk az első readln elé hogy: write(’a=’); a második readln elé pedig: write(’b=’);. Miért nem jó a writeln? Mert az egyenlőségjel után szeretnénk, hogy legyen amit bevittünk. Így szebben néz ki programunk. 6. Mentsük el a programot a saját könyvtárunkba, majd zárjuk be Következő feladat: Írjunk programot egy négyzet kerületének és területének

kiszámítására. 1. Milyen típusú változókkal fogunk dolgozni? Nyilván valósakkal. Milyen változókat deklaráljunk? a, b, K, T A K és a T változó fogja tárolni az eredményt. Deklaráljuk: var a,b,K,T:real; 2. Készítsük el a főprogramot! Mit csinálunk először? Bekérjük at, majd bekérjük b-t De mielőtt bekérjük, mit csinálunk a - 62 - Téglalap kerületének, területének kiszámítása. 10 perc; bekérések előtt? Kiírjuk, hogy mit akarunk bekérni. Vagyis: write(’a=’); readln(a); write(’b=’); readln(b); Ezután elvégezzük a szükséges számításokat. Hogy van a Téglalap kerület és terület képlete? K=2*(a+b); T=a*b; Ezután mit kell csinálnunk? Ki kell íratnunk a K és a T változó értékeit: writeln(’K=’,K); writeln(’T=’,T); És mi lesz az utolsó utasítási sorunk? Readln; 3. Futtassuk le a programot Mit tapasztalunk? Hogy az eredmények bizony elég csúnyán, nehezen olvashatóan íródnak ki. Mit tanultunk,

hogyan lehet szépen kiíratni egy valós számot? Meg kell adnunk hány számjegyet íratunk ki, és ebből mennyi legyen a tizedes helyek száma. Módosítsuk a programunkban kiíró részeket: writeln(’K=’,K:6:2); writeln(’T=’,T:6:2); Futtassuk le. Helyesen működik mindenkinek? A mai órán megnéztük, hogyan tudjuk a gyakorlatban Az óra zárása. érvényesíteni a kiíratást, bekérést, és a számítási műveleteket. 2 perc Következő órára nézzétek át a lemezmellékleteken az IO alkönyvtárban az első 5 példát. Kiknek nincs számítógépe? Azoknak kiosztom kinyomtatva. - 63 - GY02 Az óra tárgya: Egyszerű típusok használata. Az óra típusa: Gyakorlati óra Az óra célja: A tanulók ismerjék meg, hogyan lehet matematikai műveleteket végeztetni egyszerű típusokkal. Matematikai, geometriai képleteket tudjanak átírni olyan formára, amit az Object Pascal értelmezője értelmezni tud. Az előző órán megismertük a gyakorlatban is a

beolvasást és a Gép indítása, kiíratást. A mai órán tovább megyünk Megismerkedünk az Object Delphi futtatása, új Pascal matematikai lehetőségével. Egyszerű típusokat fogunk konzolalkalmazás használni. létrehozása. Közben rövid - Milyen egyszerű típusokkal ismerkedtünk meg? ismétlés. - Mennyi az értéktartományuk? 4 perc feladat Oldjuk meg a melléklet 37 oldalán található 1.10-es feladatot Egy a Kérjük be egy szabályos tetraéder élét, és számítsuk ki a felszínét, megoldása melléklet feladattérfogatát, a körülírt és a beírt gömb sugarát. 1. A feladat megoldásához ismernünk kell a megfelelő képleteket gyűjteményéből Ezt megtalálhatjuk a melléklet 41. oldalán Ezt az egy lapot 9 perc használhatjátok majd dolgozatíráskor is! 2. Nézzük meg jól a képleteket Vajon milyen típusú változókat kell használnunk? A kifejezésből láthatjuk, hogy célszerű lesz valós típusokat használnunk. Deklaráljuk őket! var

A, V, rk,rb,el:real; Nincs is más deklarálnivalónk, kezdjük el a főprogramot megírni. 3.Mi az, amit be kell kérnünk? Az el változó write(’a=’)readln(el); Mit kell ezután csinálnunk? Ki kell számítanunk a megfelelő értékeket. A:=sqrt(3)*elel vagy: A:=sqrt(3)sqr(el); V:=(sqrt(2)/2)*elelel; rk:=(sqrt(6)/4)*elelel; rb:=(1/3)*r; 4. Ezután már csak ki kell íratnunk az eredményeket Real típust hogyan íratunk ki? writeln(’A=’,A:8:2); writeln(’V=’,V:8:2); writeln(’R=’,rk:8:2); writeln(’r=’,rb:8:2); Futtassuk és teszteljük a programunkat, majd mentsük el. Következő feladat: Oldjuk meg a melléklet 37. oldalán található 1.12-es feladatot Mindenki csinálja önállóan Akinek kérdése van, szóljon. Ha kész, mentsétek el Következő feladat: Oldjuk meg a melléklet 37. oldalán található 1.14-es feladatot Kérjük be egy háromszög a, b oldalát, gamma szögét fokban, és számítsuk ki a területét. 1. Milyen változókra lesz

szükségünk? a, b, gamma, T; var a,b,gamma,T:real; 2. Mi az amit be kell kérnünk? write(’a=’);readln(a); write(’b=’);readln(b); write(’gamma=’);readln(gamma); 3. Nézzük meg a képletgyűjteményben, hogyan számolhatunk területet ezekkel az adatokkal. Kell használnunk a sin függvényt Mit tudunk a sin függvényről, milyen mértékegységben kell megadni neki a szöget? Radiánban. Mi miben szeretnénk megadni a - 64 - Önálló munka. 15 perc Egy feladat megoldása 10 perc programnak? Fokokban. Mit kell csinálnunk a gamma értékével, hogy paraméterként megadhassuk a sin függvénynek? Át kell váltanunk: gamma:=gamma*(pi/180); 4. Ezután jöhet a képlet beírása: T:=(a*bsin(gamma))/2; 5. A végén kiírhatjuk az eredményt: writeln(’T:=’,T); 6. Teszteljük a programunkat, és mentsük el a végén Ismét önálló munkát adok. A 37 oldalról mindenki válasszon Önálló munka szabadon egy olyan feladatot, amit még nem csináltunk, és

oldja 10 perc meg. A mai órán matematikai képletek használatával foglalkoztunk. Az óra zárása 2 perc - 65 - GY03 Az óra tárgya: Összetett típusok használata. Az óra típusa: Gyakorlati óra Az óra célja: A tanulók ismerjék meg, hogy hogyan lehet a gyakorlatban kezelni az összetett típusokat. A mai órán az összetett típusok használatát fogjuk gyakorolni. Mi a A gépek indítása, különbség az egyszerű és az összetett adattípusok között? Az egyszerű Delphi futtatása, adattípusok egyidejűleg csak egy értéket tárolnak, az összetett adattípusok új viszont többet. A mai órán először a string típus használatát nézzük meg konzolalkalmazás először. . 3 perc Feladat: Kérjük be egy stringbe a vezetéknevünket, egy másik stringbe Egy pedig a keresztnevünket. A teljes nevünket pedig egy harmadik stringnek bemutatópélda adjuk át. Egyszerű 1. Milyen változókra lesz szükségünk? 3 darab stringre feladatból var indulunk ki,

és vnev,knev,nev:string; fokozatosan 2. A stringeket deklaráltuk, ezután jöhet a főprogram megírása Be kell bővítjük vinnünk a vezetéknevet, a keresztnevet, és összefűzni őket. A vezetéknév 15 perc és a keresztnév közé mit kell tennünk? Egy helyközt. write(’Vezetékneved:’);readln(vnev); write(’Keresztneved:’);write(knev); nev:=vnev+’ ’+knev; writeln(nev); 3. Futtassuk le a programot Helyesen működik? Mentsük el 4. Tudni szeretnénk, hogy hány karakterből áll vezetéknevünk, keresztnevünk. Ezt a length függvénnyel tudjuk lekérdezni Paraméterként a lekérdezendő stringet adjuk meg. Folytassuk programunkat a writeln(név); sor után: writeln(’A vezeteknev hossza:’, legth(vnev)); writeln(’A keresztnév hossza:’, length(knev)); writeln(’A teljes név hossza:’, length(vnev)+length(knev)+1); A +1 karakter a helyköz. Futtassuk le, teszteljük, és mentsük el. 5. Szeretnénk, ha a program kiírná a monogramunkat Mi a monogram?

A vezetéknév első karaktere, aztán egy pont, aztán a keresztnév első karaktere, aztán még egy pont. writeln(’Monogram:’,vnev[1],’.’,knev[1],’’); Futtassuk és teszteljük programunkat, majd mentsük el. 6. Szeretnénk a monogramunkat eltárolni egy karakterláncba Hogyan tehetjük meg? Deklaráljunk egy monogram nevű stringet. var vnev,knev,nev,mono:string; Aztán a writeln(’Monogram ); elé írjuk: Mono:=vnev[1]+’.’+knev[1]+’’; Aztán módosítsuk az utolsó sort: writeln(’Monogram:’,mono); 7. Futtassuk le, majd mentsük el Zárjuk be a konzolalkalmazást, majd csináljunk egy újat. Most egy fontos dolgot fogunk megtanulni. Sokszor szükségünk van arra, hogy számokat karakterlánccá, vagy karakterláncot számmá konvertáljunk. Később amikor a grafikus felületű programokat fogunk csinálni, ott szintén szükségünk lesz ezekre a dolgokra. Feladat: Kérjünk be egy egész számot, majd írassuk ki első és utolsó számjegyét, és

határozzuk meg az első és utolsó számjegy összegét. 1. Milyen változókkal fogunk dolgozni? - 66 - Számérték konvertálása karakterlánccá, karakterlánc konvertálása számértékké. 10 perc; var szam:integer; szov:string; 2. A számot szöveggé az IntToStr függvénnyel tudunk konvertálni Paramétere a számértéket tároló változó, visszatérési értéke pedig egy karakterlánc, amiben a számjegyek tárolódnak. Bekérjük a számot: writeln(’Irj be egy szamot:’);readln(szam); Átalakítjuk karakterlánccá: szov:=IntToStr(szam); Kiírjuk a karakterlánc első és utolsó elemét: writeln(’Elso:’,szov[1],’ Utolso:’, szov[length(szov)]); Az StrToInt egy olyan függvény, melynek bemenő paramétere egy karakter vagy karakterlánc, a kimenete pedig az az egész szám, amit az adott karakterrel leírunk: writeln(’Osszeg:’,StrToInt(szov[1])+ StrToInt(szov[legth(szov)])); Futtassuk a programot, majd mentsük el. Aztán zárjuk be a

konzolalkalmazást. Nyissunk egy új konzolalkalmazást. Most a tömbökkel ismerkedünk meg Mit tanultunk a tömbökről? Mi a tömbindex? Hogyan deklarálunk tömböt? Hogyan hivatkozunk a tömb elemeire? Gyakorlásképpen írjunk egy olyan programot, ami bekéri egy háromelemű tömb elemeinek értékeit, kiírja összegét, szorzatár és aritmetikai átlagát. 1. Először is szükségünk lesz egy háromelemű tömbre, és azokra a változókra, amelyben az összeget, szorzatot és az átlagot tároljuk: A tömbtípus használatának bemutatása. 10 perc var A:array[1.3] of real; ossz,szorz,atl:real; 2. Be kell kérnünk a tömb elemeit: write(’A1=’);readln(A[1]); write(’A2=’);readln(A[2]); write(’A3=’);readln(A[3]); 3. Elvégeztetjük a számításokat: ossz:=A[1]+A[2]+A[3]; szorz:=A[1]*A[2]A[3]; atl:=(A[1]+A[2]+A[3])/3 4: Kiíratjuk az eredményeket: writeln(’Osszeg:’,ossz:8:2); writeln(’Szorzat:’,szorz:8:2); writeln(’Atlag:’,atl:8:2); Futtassuk

le, mentsük el. Igyekezzünk mindig olyan értéket megadni tesztelésnek, amit fejben is ki lehet számolni. Alakítsuk át úgy a programot, hogy 4 elemű tömbbel dolgozzon. Önálló munka 5 perc A mai órán az összetett adattípusok gyakorlati használatát ismertük meg. Az óra zárása 2 perc - 67 - GY04 Az óra tárgya: Feltételes utasítások. Az óra típusa: Gyakorlati óra Az óra célja: A tanulók ismerjék meg a feltételes utasítások gyakorlati használatát. A mai órán megnézzük, hogy hogyan használjuk a gyakorlatban a A gépek indítása, feltételes utasítást. Vegyük elő a mellékletet, lapozzunk a 37 Delphi futtatása, új oldalra. konzolalkalmazás. 3 perc Nézzük meg a 2.1-es feladatot Kérjünk be 2 számot, a-t és b-ét, Feladat megoldása végezzünk osztást mindkét irányban, és küszöböljük ki a nullával 10 perc való osztást. 1. Milyen változókra lesz szükségünk? var a,b:real; 2. Írjuk meg a számok bevitelét

write(’a=’);readln(a); write(’b=’);readln(b); 3. Mikor történik nullával való osztás? Ha az osztó értéke nulla Vagyis ha a/b akkor a b változó értékének nem szabad nullának lennie, ha b/a akkor az a változó értékének nem szabad nullának lennie. Ha a/b-t számoljuk ki: if b<>0 then writeln(’a/b=’,a/b:8:2) else writeln(’Nem tudok 0-val osztani’); ha pedig a másik irányban osztunk: if a<>0 then writeln(’b/a=’,b/a:8:2) else writeln(’Nem tudok 0-val osztani’); 4. Teszteljük a programot: a=0 b=4 esetén mit ír ki? a=4 b=0 esetén mit ír ki. Mentsük el a programot. Zárjuk be a konzolalkalmazást Nézzük meg a 2.2-es feladatot Kérjünk be egy számot, és döntsük Feladat megoldása el, hogy -5 és 5 közé esik-e. Mikor esik egy szám -5 és 5 közé? Ha 10 perc nagyobb, mint -5 és kisebb, mint 5. Vagyis itt már kicsit összetettebb lesz a logikai kifejezés. 1. Deklaráljuk a változókat: var a:real; 2. Vigyük be a

számot write(’a=’);readln(a); 3. Fogalmazzuk meg az elágazást: if (a>-5)and(a<5) then writeln(’benne van ’) else writeln(’nincs benne’); writeln(’a megadott intervallumban’); 4. Teszteljük a programot a következő értékekkel: -7, -2, 0, 3, 9 Nézzük meg a 2.3-as feladatot Kérjünk be egy számot és döntsük Feladat megoldása el, hogy páros-e. 5 perc 1. Ha oszthatóságot vizsgálunk, vajon milyen számok halmazán dolgozunk? Egész számok halmazán. var a:integer; 2. Mikor páros egy szám? Ha osztható 2-vel Hogyan állapítjuk meg egy számról, hogy osztható-e 2-vel? Akkor osztható kettővel, ha az osztás után nem keletkezik maradék. A maradékot milyen kifejezéssel határozhatjuk meg? a mod 2. Vagyis: readln(a); if a mod 2=0 then writeln(’páros’) else writeln(’páratlan’); 3. Teszteljük programunkat a -7, -4, 0, 3, 6 értékekkel Mentsük el a programot. - 68 - Nézzük meg a 2.4-es feladatot Döntsük el egy számról,

hogy Feladat megoldása 5 perc osztható-e 3-mal és 5-tel. 1. Itt szintén az egész számok halmazán dolgozunk var a:integer; 2. Itt szintén a mod operátort fogjuk használni a maradék kiszámítására. Itt két számnak is meg kell vizsgálni az oszthatóságát, és csak akkor igaz a számra, hogy osztható 3-mal és 5-tel, ha mindkét esetben 0 a maradék. readln(a); if (a mod 3=0)and(a mod 5=0) then writeln(’oszthato’) else writeln(’nem oszthato’); writeln(’3-mal es 5-tel’); 3. Teszteljük a programot a következő számokkal: -15, -5, -3, 0, 3, 5, 15. Önállóan oldjátok meg a 2.5-ös feladatot Önálló munka. 10 perc A mai órán az elágazással ismerkedtünk meg bővebben. A Az óra zárása lemezmellékleten nézzétek meg az utasítások könyvtárban az 1. 3 2 perc példát. Akinek nincs otthon gépe, azoknak kiosztom papíron - 69 - GY05 Az óra tárgya: Feltételes utasítások. Az óra típusa: Gyakorlati óra Az óra célja: A tanulók

ismerjék meg a feltételes utasítások gyakorlati használatát. A mai órán tovább folytatjuk az elágazások gyakorlását. Most kicsit A gépek indítása, összetettebb feladatokat fogunk megnézni. Delphi futtatása, új konzolalkalmazás . 3 perc Nézzük meg a 2.6-os feladatot Kérjünk be egy számot, ha osztható 2- Feladat vel és 3-mal, akkor írjuk ki, hogy 2-vel és 3-mal osztható, ha csak 2- megoldása vel vagy 3-mal osztható, akkor írjuk ki, hogy a két szám közül 10 perc melyikkel osztható. Ha egyikkel sem osztható, akkor írjuk ki, hogy egyikkel sem osztható. 1. Deklaráljuk a változókat Milyen számok halmazán fogunk dolgozni? var a:integer; 2. Első lépésben célszerűbb, ha a legspeciálisabb esetet nézzük: amikor a szám osztható 2-vel és 3-mal is: readln(a); if (a mod 2=0)and(a mod 2=3) then writeln(’Ez a szám 2-vel és 3-mal is osztható’) 3. Második lépésben azt az esetet nézzük meg, ha a két szám közül az egyikkel

osztható. Itt egy else ágat kell nyitnunk Azt is tudjuk még, hogyha 2-vel, sem és 3-mal sem osztható, akkor egyikkel sem nem osztható. Vagyis folytathatjuk az else ágat: else begin if (a mod 2=0) then writeln(’Ez a szám 2-vel osztható’); if (a mod 3=0) then writeln(’Ez a szám 3-mal osztható’); end; if (a mod 2<>0)and(a mod 3<>0) then writeln(’Ez a szam sem kettovel, sem 3-mal nem oszthato’); Kérjük be 3 szakasz hosszát, és döntsük el, hogy szerkeszthető-e Feladat belőlük háromszög. megoldása Mikor szerkeszthető háromszög 3 szakaszból? Ha két oldal hosszának 10 perc összege kisebb, mint a harmadik oldal hossza. Vagyis meg kell vizsgálnunk több kifejezést. Vajon hányat? Hármat 1. Először is milyen számok halmazán fogunk dolgozni? var a,b,c:real; 2. Be kell kérnünk a három oldalt: write(’a=’);readln(a); write(’b=’);readln(a); write(’c=’);readln(c); 3. Ezután kezdjük megadni a feltételeket: Ha a<b+c

szerkeszthető háromszög? Igen. Ha b<c+a szerkeszthető háromszög? Igen. Ha c<a+b szerkeszthető háromszög? Igen. Ha a feltételek közül egy nem teljesül, szerkeszthetünk-e háromszöget? Nem. Vagyis, milyen kapcsolatban vannak a feltételek? És kapcsolatban. 4. Fogalmazzuk meg ezt pascal nyelven: if (a<b+c)and(b<c+a)and(c<a+b) then writeln(’Szerkesztheto haromszog’) else writeln(’nem szerkesztheto haromszog’); Teszteljük programunkat: - 70 - a b c 4 4 4 4 4 10 2 3 4 5. Mentsük el, és zárjuk be a konzolalkalmazást Nézzük meg a 2.10-es feladatot Kérjük be egy háromszög három Feladat megoldása oldalát, és döntsük el, hogy milyen típusú a háromszög. 15 perc 1. Deklaráljuk a változókat var a,b,c:real; 2. Kérjük be a három oldalt: write(’a=’);readln(a); write(’b=’);readln(a); write(’c=’);readln(c); 3. Melyik a legspeciálisabb eset? Ha mindhárom oldal egyenlő Ez az egyenlő oldalú háromszög. Hány

feltételt kell megvizsgálnunk? Három feltételt: if (a=b)and(a=c)and(b=c) then writeln(egyenlő oldalú) Mikor egyenlő szárú a háromszög? Ha két oldala egyenlő. Vagyis meg kell vizsgálnunk mindegyik lehetséges feltételt. Ha a=b és a=c akkor egyenlő oldalú. Ha b=c és a=c akkor egyenlő oldalú. Ha a=b és b=c akkor egyenlő oldalú. Kell-e mindegyik feltételnek teljesülnie, hogy a háromszög egyenlő oldalú legyen? Nem. Ha már az egyik feltétel teljesült, akkor már a háromszög egyenlő oldalú. Vagyis milyen kapcsolatban vannak? Or Viszont, ha a háromszög egyenlő oldalú, akkor is teljesül ez a feltétel. De mi nem szeretnénk, csak akkor kiírni, hogy egyenlő szárú a háromszög, ha nem egyenlő oldalú. Vagyis az else ágban folytatjuk: else if ((a=b)and(a=c)) or((b=c)and(a=c)) or((a=b)and(b=c)) then writeln(’egyenlő szárú’) Ha egyik feltétel sem igaz, akkor általános háromszögről beszélünk. else writeln(’általános’); 4. Egy

háromszögről még az oldalak alapján azt is megállapíthatjuk, hogy derékszögű-e. Pitagórász tétele szerint: Ha a két befogó négyzetének összege megegyezik az átfogó négyzetével, akkor derékszögű háromszögről beszélünk. De a mi esetünkben nem tudjuk, melyik oldal lehet az átfogó, és melyek a befogók. Tehát mindhárom oldalra meg kell vizsgálnunk a feltételt: Ha a2=b2+c2 akkor derékszögű. Ha b2=a2+c2 akkor derékszögű. Ha c2=b2+a2 akkor derékszögű. Ebből elég, ha csak az egyik feltétel teljesül. Kettő már nem teljesülhet sohasem, mert a háromszögnek csak 1 derékszöge lehet. if (sqr(a)=sqr(b)+sqr(c)) or (sqr(b)=sqr(a)+sqr(c)) or (sqr(c)=sqr(b)+sqr(a)) then writeln(’derékszögű’); 5. Teszteljük programunkat a következő értékekkel: - 71 - a b c 3 3 3 5 5 2 5 2 2 2 5 2 3 4 5 4 5 6 6. Mentsük el a programot Következő a feladat: Bővítsük ki ezt a programot úgy, ha a bevitt oldalakból nem szerkeszthető

háromszög, akkor ne vizsgálja meg a további feltételeket. Vagyis: szerkesszük össze az előző feladattal Önállóan próbáljátok megoldani. A mai órán összetettebb feladatokat csináltunk. Láthattuk, hogy a feltételes utasításokkal mondatszerű kifejezéseket is megfogalmazhatunk. - 72 - Önálló munka 5 perc Az óra zárása 3 perc GY06 Az óra tárgya: Ciklusutasítások. Az óra típusa: Gyakorlati óra Az óra célja: A tanulók ismerjék meg a ciklusutasítások gyakorlati használatát. A mai órán a ciklusutasításokat fogjuk megismerni gyakorlatban. A gépek indítása, Mire jók a ciklusok? Egy program bizonyos részét többször is Delphi futtatása, új végre tudjuk hajtani. konzolalkalmazás. 3 perc Nézzük meg a 3.1-es feladatot Írassunk ki 120-ig egyesével Feladat megoldása 5 perc növekvő sorrendben számokat. 1. Milyen számokkal fogunk dolgozni? Egész számokkal var i:integer; 2. Ezután megfogalmazzuk a ciklust: for i:=1 to 20 do

writeln(i,’,’); Mi az i változó? Ő a ciklusszámláló. Minden egyes végrehajtásnál eggyel nő az értéke. És mit csinál a ciklusmag? Kiírja a ciklusváltozó értékét és egy vesszőt minden egyes végrehajtáskor. Mentsük el a programot. Alakítsuk át ezt a programot úgy, hogy ne csak 20-ig írja ki, Program változtatása hanem tetszőleges értékig. Mit kell ehhez csinálnunk? Nyilván 5 perc szükség lesz egy másik változóra is, amiben eltároljuk, hogy meddig akarjuk kiírni a számot: var i,n:integer; A ciklus előtt be is kell olvasnunk az értéket: write(’n=’);readln(n); Ezután már csak a ciklust kell átalakítanunk: for i:=1 to n do writeln(i,’,’); Mentsük el más néven. Save Project As Alakítsuk át úgy a programot, hogy ne kiírja a számokat, hanem Program változtatása adja össze az első n természetes számot. 5 perc 1. Min kell változtatnunk? Nyilván szükség lesz egy változóra, amiben eltároljuk az összeget: var

i,n,osszeg:integer; 2. Ezután már csak a ciklusmagot kell átírnunk: for i:=1 to n do osszeg:=osszeg+i; writeln(’A szamok osszege 1-’,’n-ig:’,osszeg); 3. Felmerülhet az a probléma, hogy a változó kezdeti értéke nem nulla. Hogy biztosak legyünk, hogy az osszeg változó a ciklus indulásakor nulla legyen, ezért írjuk a ciklus elé: oszeg:=0; Mentsük el a programot, és zárjuk be a konzolalkalmazást. Nézzük meg a 3.13-as feladatot: írassunk ki adott intervallumban Feladat megoldása 3-mal és 5-tel osztható számokat. 10 perc 1. Mit kell megadnunk a programnak? Az intervallumot Vagyis, hogy hol kezdődjön a ciklus, és hol érjen véget. Ehhez 3 változóra lesz szükségünk: Ciklusváltozóra, kezdeti értékre, és végértékre. var i,k,v:integer; 2. Be kell vinni a megfelelő értékeket: write(’az intervallum kezdete:’);readln(k); write(’az intervallum vége:’);readln(v); 3. fogalmazzuk meg a ciklust: for i:=k to v do 4. Ezután jön a

ciklusmag Vajon mivel kezdődik a ciklusmag? Nyilván egy feltételes utasítással. Vagyis a ciklus megy végig a - 73 - számokon, de mi csak azokat szeretnénk kiíratni, amelyek oszthatóak 3-mal és 5-tel. A ciklusmag tehát: if (i mod 3=0)and(i mod 5=0) then write(i,’,’); Mentsük el a programot, és zárjuk be a konzolalkalmazást. Nézzük meg a 3.16-os feladatot Töltsünk fel egy tömböt n darab, Feladat megoldása de maximum 20 tetszőleges számmal, határozzuk meg 15 perc aritmetikai, harmonikus és négyzetes középértékét. 1. Milyen változókra lesz szükségünk? Egy ciklusszámlálóra, egy darabszámra, és a középértékeket tároló változókra. Valamint szükségünk lesz egy 20 elemű tömbre. var i,n:integer; ak,hk,nk:real; A:array[1.20] of real; 2. Először kérjük be, hogy hány darab számmal akarunk dolgozni: write(’n=’);readln(n); 3. Ezután be kell olvasnunk n darab számot a tömbbe Ezt egy ciklussal megoldhatjuk: for i:=1 to n do

begin write(’A[’,i,’]=’);readln(A[i]); end; 4. Meg van adva minden, most jöhetnek a megfelelő összegzések Aritmetikai középértéknél mit kell összegeznünk? A tömb elemeit. A harmonikus középértéknél mit kell összegeznünk? A tömb elemeinek reciprokát. A négyzetes középértéknél mit kell összegeznünk? A tömb elemeinek négyzetét. Vagyis: ak:=0;hk:=0;nk:=0; for i:=1 to n do begin ak:=ak+A[i]; hk:=hk+(1/A[i]); nk:=nk+sqrt(A[i]); end; 5. Ezután már csak néhány egyszerű műveletet kell elvégeznünk: ak:=ak/n; hk:=n/hk; nk:=sqrt(nk/n); 6. Nem maradt más hátra, mint kiírni az eredményeket: writeln(’Aritmetikai kozep:’,ak); writeln(’Harmonikus kozép:’,hk); writeln(’Negyzetes kozep?’,nk); A mai órán a ciklusokkal foglalkoztunk. A lemezen nézzétek meg Az óra zárása az utasítások könyvtárban a 4. és az 5 példát 2 perc - 74 - E5 Az óra tárgya: Alprogramok és Objektumok használata Az óra típusa: Új

ismeretanyagot feldolgozó óra. Az óra célja: A diákok ismerjék meg hogyan lehet saját eljárásokat, függvényeket készíteni, hogyan lehet objektumokat készíteni. A programozás során gyakran előfordul, hogy egy utasításblokk a Bevezetés program több pontján is előfordul. Hogy programunk ne legyen túl 5 perc nagy, valamint könnyebben áttekinthető legyen, ezért célszerű bizonyos utasításcsoportokat alprogramokba rendezni. Az alprogramoknak két vajtája van: eljárás és függvény. Eddig csak beépített eljárásokat és függvényeket használtunk. Eljárás volt például a readln, a writeln. Függvény volt a sqr, sqrt, IntToStr, StrToInt, sin, cos. A mai órán megtanuljuk, hogyan lehet saját függvényeket és eljárásokat készíteni. Nézzük először az eljárásokat. Milye van egy eljárásnak? Van neve, Eljárások készítése és paraméterei. A writeln eljárásnak voltak paraméterei? Igen, 15 perc voltak. Lehetett valamilyen változó

vagy konstans Mit csinált a writeln a paramétereivel? Kiírta a képernyőre az értéküket. A readln eljárásnak volt paramétere? Volt. Mindig egy változót adtunk meg paraméterként. Mit csinált a readln ennek a változónak az értékével? Megváltoztatta. Nézzük meg, hogyan néz ki egy eljárás szerkezete: Van fejrésze: procedure eljárás(paraméter, paraméter); Van az eljárásnak deklarációs része. Ugyanúgy néz ki, mint a főprogram deklarációs része. Fontos, hogy amit az eljáráson belül deklarálunk, az csakis az eljáráson belül van érvényben. var valtozo1,valtozo2:tipus; Ezután jön az eljárás utasításblokkja. begin utasitas; utasitas; end; Nézzünk egy példát. Emlékeztek még arra, amikor egy tömb elemeinek adtunk értéket? Mit kellett „tudatni” a programmal? Azt, hogy hány elem értékét akarjuk bekérni. Vagyis az n értékét Tételezzük fel, hogy van deklarálva egy tömb. Pl: A:array[1.20] of real; Írjunk egy eljárást

a feltöltésére: procedure feltolt(n:integer); Mit használtunk még a feltöltésnél? Egy for ciklust, aminek van egy ciklusváltozója. var i:integer; Ezután jöhet maga az utasításblokk: begin for i:=1 to n do begin write(’A[’,i,’]=’); readln(A[i]); end; end; Van olyan eljárás is, amikor magának a paraméternek adjuk át az értéket. Ilyenkor címátadásos paraméterezésről beszélünk Nézzünk meg egy példát erre is: procedure teglalap ter(a,b:real; T:real); begin T:=a*b; end; - 75 - Mit csinál ez az eljárás? A T változónak adja értékül az a és b szorzatát. Mije van egy függvénynek? Vannak bemenő paraméterei, és van Függvények visszatérési értéke. Visszatérési értéke csak egy kehet Valamilyen készítése szám vagy karakterlánc. Nézzük meg, hogyan lehet függvényként 10 perc megfogalmazni egy háromszög területét: function har ter(a,ma:real):real; begin har ter:=(a*ma)/2; end; A függvény fejében megadtuk a

visszatérési érték típusát. A függvény nevét a függvényen belül úgy kezelhetjük, mint egy változót, azzal a különbséggel, hogy csak értéket adhatunk neki. Amilyen értéket adunk neki, az lesz a függvény visszatérési értéke. Hogy még áttekinthetőbb legyen a programunk, az Object Pascal lehetőséget biztosít arra, hogy programunk változóit és kódját egy objektumba „tegyük bele”. Ilyenkor Osztályt kell deklarálnunk Példaként készítsünk egy tegla nevű osztályt, ami tárolja egy téglalap oldalainak hosszát, bekéri a hosszértékeket, és kiszámítja a területét, és kerületét. Objektumok, Osztályok deklarálása, használata 13 perc type tegla:class; a,b:real; procedure beker; function ter:real; function ker:real; end; ezután sorra megírjuk a szükséges alprogramokat: procedure tegla.beker; begin write(’a=’);readln(a); write(’b=’);readln(b); end; function tegla.ter:real; begin ter:=a*b; end; function ker:real; begin

ker:=2*(a+b); end; Ezután létre kell hoznunk egy osztályreferenciát: var teg:tegla; Ezután jöhet maga a főprogram: begin teg:=tegla.create; teg.beker; writeln(’K=’,teg.ker); writeln(’T=’,teg.ter); teg.free; end; A mai órán megismerkedtünk az alprogramokkal és osztályokkal. A mellékletben nézzétek át a 25-27 oldalakat - 76 - az Az óra zárása 2 perc GY07 Az óra tárgya: Függvények és eljárások készítése. Az óra típusa: Gyakorlati óra Az óra célja: A tanulók ismerjék meg, hogyan lehet a gyakorlatban függvényeket és eljárásokat készíteni, valamint hogyan használhatják azt a főprogramban. A mai órán megnézzük, hogyan is működnek gyakorlatban az Gép bootolása, eljárások és a függvények. Valójában az eddig megoldott Delphi indítása feladatokat fogjuk egy kicsit másképp megoldani. 3 perc Nézzük meg a melléklet feladatgyűjteményének 4.1-es feladatát Feladat megoldása Írjunk függvényt, amellyel ki tudjuk

számítani egy háromszög 5 perc területét alap és magasság alapján. A függvényt a főprogram elé írjuk. Mi legyen a függvény fejében? Meg kell adnunk, hogy függvényt deklarálunk, akkor mi legyen a függvény neve, meg kell adni a paramétereket, és meg kell adni a visszatérési értéket. function har ter(a,ma:real):real; begin har ter:=(a*ma)/2; end; Kész a függvényünk. Most fogjuk fel úgy a dolgot, mintha ez a deklaráció nem is lenne. Gondoljuk azt, mintha az Object Pascalban lenne egy har ter nevű függvény, amit használni szeretnénk. Ismerjük a bemenő paraméterek típusát, és a visszatérési értéket. Milyen változókat kell tehát deklarálnunk egy háromszög területének kiszámításához? var T,a,ma:real; Ezután fogalmazzuk meg a főprogramot: write(’a=’);readln(a); write(’ma=’)readln(ma); T:=har ter(a,ma); writeln(’T=’,T:8:2); Futtassuk a programot, majd mentsük el. Nézzük meg a melléklet 4.2-es feladatát Írjunk

függvényt, amellyel Feladat megoldása meghatározhatjuk, hogy 3 tetszőleges szakaszból szerkeszthetünk-e 5 perc háromszöget. Vajon mi lesz a függvény visszatérési értéke? Boolean. function szerkesztheto(a,b,c:real):boolean; begin if (a<b+c)and(b<a+c)and(c<a+b) then szerkesztheto:=true else szerkesztheto:=false; end; Deklaráljuk a változókat: var a,b,c:real; Majd írjuk meg a főprogramot: write(’a=’);readln(a); write(’b=’);readln(b); write(’c=’);readln(c); if szerkesztheto(a,b,c) then writeln(’Szerkesztheto’) else writeln(’Nem szerkeztheto’); Futtassátok le, majd zárjátok be a konzolalkalmazást. Oldjátok meg a 4.6-os feladatot önállóan Önálló munka 10 perc Oldjuk meg a melléklet 4.11-es feladatát Készítsünk olyan eljárást, Feladat megoldása amely egy n elemű valós számokból álló tömb elemeinek értékét 20 perc növekvő sorrendbe rendezi. Vagyis csinálnunk kell egy eljárást, legyen a neve, pl. rendez A

feladatban határozatlan méretű tömböt kell használnunk, mert nincs megadva a maximális elemszám. - 77 - Viszont ha megnézzük a melléklet 42. oldalán a sorba rendező algoritmust, ott viszont ismernünk kell a maximális elemszámot. Célszerű tehát a maximális elemszámot úgy tárolni, hogy akár több eljárásban is le tudjuk kérdezni, vagy meg tudjuk változtatni az értékét. Vagyis tegyük a főprogram deklarációs részébe A másik lehetőség, hogy paraméterként adjuk meg az eljárásnak a maximális elemszámot, és a tömböt pedig címátadásos paraméterezéssel. Az utóbbi megoldás jobb, mert az így megírt rendező algoritmust később más programban is fel tudjuk használni. procedure rendez(var A:array of real; n:integer); var i,j:integer; csere:real; begin for i:=1 to n-1 do for j:=i+1 to n do if A[i]>A[j] then begin csere:=A[i]; A[i]:=A[j]; A[j]:=csere; end; end; Meg is van a sorba rendező algoritmusunk. Viszont így önmagában nem

tudunk vele mit kezdeni. Először is nincs sem tömbünk, sem tömbbe bevitt érték, amit rendezhetnénk. Kellene még 2 eljárás Mégpedig egy beolvasó és egy kiíró. procedure beolvas(var A:array of real; n:integer); var i:integer; begin for i:=1 to n do begin write(’A[’,i,’]=’); readln(A[i]); end; end; És egy kiíró eljárás is kell: procedure kiir(A:array of char; n:integer); begin for i:=1 to n do writeln(A[i],’,’); end; Ezután jöhet a főprogram és a főprogram változóinak deklarálása: var A:array[1.10] of real; n:integer; begin write(’Hany elemet olvassunk be? :’); readln(n); beolvas(A,n); rendez(A,n); kiir(A,n); end. Futtassuk le. Mentsük el A mai órán az alprogramok használatával ismerkedtünk meg. A Az óra zárása lemezmellékleten nézzétek át és teszteljétek az Alprogramok 2 perc könyvtár első két példáját. - 78 - GY08 Az óra tárgya: Objektumok, osztályok készítése. Az óra típusa: Gyakorlati óra Az óra

célja: A tanulók ismerjék meg, hogyan lehet a gyakorlatban objektumokat, osztályokat készíteni, valamint hogyan használhatják azt a főprogramban. A mai órán megismerkedünk az Object Pascal lényegével: Gép bootolása, Objektumokat, osztályokat fogunk készíteni, használni. Delphi indítása. 3 perc Nézzük meg az 5.1-es feladatot a mellékletben Készítsünk egy Feladat THaromszog nevű osztályt, melynek adatmezeje tárolja a háromszög 3 megoldása oldalát. Készítsük el a következő metódusokat: 10 perc - Függvény, amely ledönti, hogy szerkeszthető-e háromszög a 3 oldalból. - Függvények, melyek területet és kerületet számolnak. - Eljárás, megy bekéri az oldalakat. Az első dolgunk az osztály vázának a megtervezése: Type THaromszog=class; a, b, c:real; function szerkesztheto:boolean; function kerulet:real; function terulet:real; procedure beker; end; A második dolgunk az alprogramok megírása: function THaromszog.szerkesztheto:boolean;

begin szerkesztheto:=(a<b+c)and(b<a+c)and(c<a+b); end; function THaromszog.kerulet:real; begin kerulet:=a+b+c; end; function THaromszog.terulet:real; var s:real; begin s:=kerulet/2; terulet:=sqrt(s*(s-a)(s-b)(s-c)) end; procedure beker; begin write(’a=’);readln(a); write(’b=’);readln(b); write(’c=’);readln(c); end; Ezután létre kell hoznunk az Osztály-referenciát: var Haromszog:=THaromszog; Ezután jöhet a főprogram: Haromszog:=THaromszog.Create; Haromszog.beker; if Haromszog.szerkesztheto then begin writeln(’K=’,Haromszog.kerulet); writeln(’T=’,Haromszog.terulet); end else writeln(’Hibás háromszög!’); Haromszog.free; Oldjuk meg az 5.2-es feladatot Önálló feladatmegoldás 15 perc Feladat Oldjuk meg az 5.4-es feladatot - 79 - Tervezzük meg az osztály vázát: megoldása 15 perc; Type TSorozat=class; A:array[1.500] of real; n:integer; procedure feltolt; function aritmet; function harm; function negyz; end; Ezután megadjuk az

alprogramokat: procedure TSorozat.feltolt; var nov,n0:real; i:unteger; begin write(’Kezdoertek:’)readln(n0); write(’Novekmeny:’)readln(nov); write(’Elemszam:’);readln(n); for i:=1 to n do begin A[i]:=n0+(nov*(i-1)) end; end; function TSorozat.aritmet:real; var i:integer; r:real; begin r:=0; for i:=1 to n do r:=r+A[i]; aritmet:=r/n; end; function TSorozat.harm:real; var i:integer; r:real; begin r:=0; for i:=1 to n do r:=r+(1/A[i]); harm:=n/r; end; function TSorozat.negyz:real; var i:integer; r:real; begin r:=0; for i:=1 to n do r:=r+sqr(A[i]); negyz:=sqrt(r/n); end; Ezután létrehozzuk az osztály-referenciát: var sorozat:=TSorozat; majd begépeljük a főprogramot: sorozat:=TSorozat.Create; sorozat.feltolt; writeln(sorozat.aritm); writeln(sorozat.harm); writeln(sorozat.negyz); sorozat.Free; Futtassátok le, majd mentsétek el. A mai órán az objektumok és az osztályok használatát ismertük meg. Az óra zárása Nézzétek meg a lemezen objektumok könyvtárban az

1. és a 2 példát 3 perc A következő órán számonkérés lesz. Nézzétek át a többi programot is - 80 - SZ1 Az óra tárgya: Számonkérés. Az óra típusa: Számonkérő óra Az óra célja: Felmérés, hogy a tanulók hogyan készültek fel az Object Pascal konzolalkalmazásaiból. Az első feladat: Olyan feladat legyen, amelyet minimális felkészültséggel meg lehet oldani. Ez az a feladat, amit a kettes osztályzatért tudni kell. Olyan feladat legyen, melyben valamilyen matematikai képlet kiszámítását kell megoldani programmal. Második feladat: Olyan feladat legyen, amit a hármas osztályzatért kell tudni. Fontos, hogy legyen benne valamilyen strukturált adattípus vagy strukturált utasítás. Harmadik feladat: Olyan feladat legyen, amit a négyes osztályzatért kell tudni. Valamilyen alprogram készítését és használatát kelljen megoldani. Negyedik feladat: Az ötös osztályzatért valamilyen objektum-osztályt kell felépíteni, és használni.

A lehetséges feladatokat a következő táblázatban foglaltam össze: Feladat száma Lehetséges feladatsorok 1. feladat 1.11 1.8 1.12 113 2. feladat 2.4 2.5 2.13 214 3. feladat 4.8 4.9 4.6 4.7 4. feladat 5.1 5.2 5.3 5.4 A tanulók a feladatok megoldása során használhatják mind a képletgyűjteményt, mind az algoritmusgyűjteményt. A dolgozat megírására a tanulók az egész óra idejét felhasználhatják. - 81 - E6 Az óra tárgya: Grafikus vezérlőelemek használata, TForm, TLabel, TEdit, TCheckBox, TRadioButton, TRadioGroup, TListbox, TComboBox, TScrollBar, TMemo Az óra típusa: Új ismeretanyagot feldolgozó óra. Az óra célja: A tanulók ismerjék meg a grafikus vezérlőelemeket, azok tulajdonságait, és hogy hogyan lehet azokat programozni. A mai órán a GUI programozásával ismerkedünk meg. Vajon mi lehet a Mi a GUI? GUI? Graphic User Interface. Grafikus Felhasználói felület Vagyis 3 perc minden, amit a Windows ablakain látunk. A form nem más, mint

maga az alkalmazásablak. Erre az elemre Az ablak, a szoktuk ráhelyezni a többi grafikus vezérlőelemet. A formnak sok form 5 perc tulajdonságát lehet beállítani: - milyen színű legyen - milyen legyen a kiindulási mérete - mi legyen a címsorba írva Ezeket a beállításokat elvégezhetjük az Object Inspectorban, de beépíthetjük a beállításokat a program utasítása sorai közé is. Az ablaknak nemcsak tulajdonságai vannak, hanem vele kapcsolatos események is: - átméretezés - mozgatás - az ablak létrejötte Az ablakkal kapcsolatos tulajdonságok a melléklet 31 oldalán táblázatban vannak összefoglalva. Mint a konzolalkalmazásoknál, a grafikus felületen is az egyik Kiíratás ablakra, legfontosabb dolog, hogy a program kommunikáljon a felhasználóval. Label A grafikus felületen ez a kommunikáció már jóval szélesebb körű, és 5 perc sokszor egy grafikus vezérlőelemet kiíratásra és bevitelre is tudunk használni. A kiíratás legegyszerűbb

eszköze a Label. Ez nem csinál mást, mint egy karakterláncot ír ki az ablakra. Természetesen a karakterek szépen formázhatóak, színezhetőek. A melléklet 31. oldalán ehhez az elemhez is találtok útmutatást A bevitelnek is megvan a maga grafikus eszköze: Az edit. Az edit nem A bevitel más, mint egy felület, ahol a felhasználó beírhat valamit. Ez a beírt eszköze: TEdit dolog a program számára pedig egy karakterlánc formában jelenik meg. 5 perc Korábban, valamelyik órán említettem, hogy a típusok konvertálása fontos lesz a grafikusfelületen. Nos, azért fontos, mert a grafikusfelületre kiírni, és a grafikusfelületen bevinni csakis karakterlánc formában lehet. Vagyis számértékek is karakterlánc formájában jelennek meg. A 32. oldalon ehhez az elemhez is találtok részletes útmutatást A grafikus programok egyik legfontosabb eszköze a nyomógomb. A A nyomógomb, legfőbb alprogramokat valamilyen gomb lenyomásának eseményéhez Button

szoktuk hozzárendelni. Legtöbb program úgy épül fel, hogy beviszünk 5 perc adatokat, és egy gombot lenyomunk, amikor a bevitellel kész vagyunk. Vagyis a gomb lenyomásához magát a számítási műveleteket rendeljük hozzá. A nyomógombbal kapcsolatos útmutatókat a melléklet 32. oldalán találjátok. A Listbox egy olyan elem, ami valamilyen listát jelenít meg. Listbox Természetesen nagyon sok elemet tud megjeleníteni és tárolni. A 5 perc - 82 - listbox lehetőséget biztosít arra is, hogy listával műveleteket végezzünk. Pl: új elem hozzáadása, elem törlése, vagy akár a teljes lista fájlba mentése. A lista elemeihez úgy tudunk hozzáférni, mintha egy tömb elemei lennének. Tulajdonképpen egy olyan tömb, ami karakterláncokból épül fel. A listboxszal kapcsolatos dolgokat a melléklet 34. oldalán találjátok Egy érdekes grafikus elem következik, a memo. Ez egy egész szöveg tárolására és szerkesztésére alkalmas. Vagyis egy komplett

szövegszerkesztő. Olyasmi, mint a jegyzettömb szerkesztőfelülete Természetesen a bevitt szöveget sima txt fájlba el tudjuk menteni. A memo a sorokat szintén tömbelemként tárolja, és minden egyes tömbelem egy-egy karakterlánc. A memoval kapcsolatos tulajdonságokat a 34-35. oldalon találhatjátok meg a mellékletben. Előfordul, hogy valamilyen értéket akarunk bevinni a programnak, valamilyen értéktartományban, és szeretnénk úgy megoldani a bevitelt, mintha egy tolópotmétert állítanánk be. Erre a célra van kitalálva a Scrollbar. Megadhatjuk neki a minimumot, maximumot E két érték között tudunk vele beállítani egy értéket. És meg tudjuk adni az alaphelyzetet is. A ScrollBarral kapcsolatos útmutatót a melléklet 33. oldalán találjátok meg. Jelölőnégyzetet olyan adatok bevitelére használjuk, amelynél csak el kell dönteni valamiről, hogy igaz vagy hamis. A jelölőnégyzet előtt általában valamilyen állítás van, és ha igaz, akkor

kipipáljuk a jelölőnégyzetet, ha hamis akkor nem pipáljuk ki. A kipipált jelölőnégyzetre ha újból rákattintunk, akkor a pipa eltűnik a jelölőnégyzetből. A jelölőnégyzettel kapcsolatos leírásokat a melléklet 32. oldalán találjátok meg. A mai órán megismerkedtünk a GUI elemeivel. A mellékletben nézzétek át a megfelelő oldalakat, valamint a típuskonvertáló függvényeket. IntToStr, StrToInt, FloatToStr, StrToFloat Erről a melléklet 16. oldalán olvashattok Valamint a hozzátartozó példaprogramokat is nézzétek át. - 83 - A Memo, szövegszerkeszt ő ablak 5 perc Scrollbar, vagyis „tolópotméter” 5 perc CheckBox, vagyis jelölőnégyzet 5 perc Az óra zárása 2 perc GY09 Az óra tárgya: Grafikus vezérlőelemek használata: TForm, TLabel, TEdit, TButton. Az óra típusa: Gyakorlati óra. Az óra célja: A tanulók ismerjék meg a grafikus vezérlőelemeket, azok tulajdonságainak gyakorlati oldalát. A mai órán a gyakorlatban is

megismerjük a GUI Bevezetés, közben gép programozását. Kicsit más lesz, mint a konzolalkalmazások indítása, Delphi készítése, de az ott megtanult programozási dolgokat itt futtatása ugyanúgy tudjuk majd használni. Miután a Delphi elindult, 3 perc most ne zárjátok be az üres formot. Az Object Inspectoron keressük ki a Caption-t. Ezzel meg A form tudjuk változtatni az ablakunk címsorát. Lapozzuk az Object 5 perc Inspectort úgy, hogy lássuk a width értéket. Méretezzük át a formot. Figyeljük az értékét Tegyük meg ugyanezt: Height, Top, Left, ClientWidth, ClientHeight. Futtassuk le a programot. Mit látunk? Egy üres ablakot Lépjünk ki. A mentés ugyanúgy történik, mint a konzolalkalmazás mentése. A bezárás a Close All paranccsal. Új alkalmazás: New/Application. Nézzük meg a 6.1-es feladat c pontját Kérjük be egy Feladat megoldása háromszög alapját, magasságát, számítsuk ki a háromszög 15 perc területét. 1. Először ki kell

alakítanunk a felületet Mit kell rátenni? Mit akarunk bekérni a felhasználótól? Alapot és magasságot. Tudjuk, hogy kell 2 Edit. Helyezzük rá a formra Figyeljük a neveket, mert nagyon fontos lesz! Ezután mindkét edit captionjét ürítsük ki. 2. Ezután célszerű a felhasználóval tudatni, hogy mit írjon az editekbe. Vagyis: tegyünk két labelt az editek elé A labelok captionjét pedig írjuk be. Label1 helyett: a=, Label2 helyett ma=. 3. Ezután szükségünk lesz egy gombra: legyen a captionje: számol. 4. Ezután szükségünk lesz egy kiíratásra is Ezt is egy labellel oldjuk meg. 5. Most jön a számítás Milyen esemény hatására kezdjen el számolni a program? A számol gomb lenyomásának hatására. Ezt úgy oldjuk meg, hogy az Object Inspectorban az Events fülre kattintunk. Keressük ki az OnClick eseményt, majd kattintsunk rá duplán. Ezután a forrásszerkesztőben kaptunk egy üres alprogramot. Ez lesz az az alprogram, ami a számol gomb

lenyomásakor végre fog hajtódni. 6. Fogalmazzuk meg a programot Először is változókra lesz szükségünk. var a,ma,T:real; 7. Lépésenként fogalmazzuk meg az alprogramot Tudjuk, hogy amit az editbe be fogunk vinni, az egy string lesz. Mégpedig a Text metódussal tudjuk lekérni. Hogy ebből Real típust kapjunk, ehhez át kell konvertálnunk a stringet reallé. a:=StrToFloat(Edit1.Text); ma:=StrToFloat(Edit2.Text); - 84 - Ezután jöhet a számítás: T:=(a*ma)/2 És végül ki kell íratnunk az eredményt: Label3.Caption:=FloatToStr(T); 8. Futtassuk le a programot Teszteljük, majd mentsük el Új feladat: Nézzük meg a 6.1-es feladat d pontját Próbáljátok Önálló önállóan megoldani. feladatmegoldás 10 perc Új feladat: Oldjátok meg önállóan az „a” pontot is. 10 perc A mai órán az alapvető grafikus vezérlőelemekkel ismerkedtünk Az óra zárása meg. 2 perc - 85 - GY10 Az óra tárgya: Grafikus vezérlőelemek használata: TListBox, TMemo

Az óra típusa: Gyakorlati óra. Az óra célja: A tanulók ismerjék meg a grafikus vezérlőelemeket, azok tulajdonságainak gyakorlati oldalát. A mai órán a Listboxszal és a Memoval fogunk megismerkedni. Bevezetés, közben Közös tulajdonságuk, hogy mindkettő string típusú tömbelemeket gép indítása, Delphi tartalmaz. futtatása 3 perc. Nézzük meg a 6.5-ös feladatot Töltsünk fel egy listboxot Feladat megoldása nevekkel, és rendezzük ABC szerinti sorrendbe. Oldjuk meg, 20 perc hogy a neveket tudjuk törölni is. 1. Lépés: tervezzük meg a program kinézetét Mit fogunk rátenni a formra? Először is kell egy listbox. Másodszor kell egy edit, amin be tudjuk írni a beviendő a neveket. Aztán kellenek nyomógombok. Milyenek és mennyi? Nyilván kell egy olyan nyomógomb, amely az edit1.text –et beviszi a listboxba. Kell egy másik gomb is, amivel tudunk törölni Kell egy harmadik gomb, amely lenyomásának hatására sorba rendeződik a listbox tartalma.

2. Tegyük fel őket a formra 3. Nézzük a bevitelt! Kattintsunk a „bevisz” nyomógombra, aztán az Object Inspector Events fülén az onClick eseményre kattintsunk duplán. Kapunk egy üres alprogramot Mit kell ennek az alprogramnak csinálnia? Az Edit1.Text értékét hozzá kell írnunk a listbox tartalmához. Vagyis: Listbox1.ItemsAdd(Edit1Text); Edit1.Text:=’’; 4. Kattintsunk a „töröl” gombra Szintén az events fülön jelöljük ki az onClick eseményt. Ismét kapunk egy alprogramot Itt törölnünk kell a listboxnak azt az elemét, ami ki van jelölve. Vagyis: Listbox1.DeleteSelected; 5. Most következik a sorba rendezés Kattintsunk egyet a „rendez” nyomógombra, és az onClick eseményhez rendeljük hozzá. Ismét egy üres alprogramot kaptunk A rendezéshez kellett változókat deklarálnunk. var n,i,j:integer; csere:string; Ezután már csak az n értékét kell meghatároznunk, és írhatjuk is az algoritmust. n:=Listbox1.Count-1; for i:=0 to n-1 do

for j:=i+1 to n do if ListBox1.Items[i]>ListBox1Items[j] then begin Csere:=Listbox1.Items[i]; ListBox1.Items[i]:=ListBox1Items[j]; ListBox1.Items[j]:=Csere; end; 6. Futtassuk a programunkat Írjunk be neveket Legalább 10 nevet írjon be mindenki. Kattintsunk a rendez gombra Tegyük az egeret az egyik névre, és kattintsunk rá egyet. Ekkor egy kék csík lesz a néven. Nyomjuk meg a „töröl” gombot - 86 - Mentsük el a programot. Oldjuk meg a 6.6-os feladatot Tegyünk egy formra memot, és Feladat megoldása egy gombot, melynek lenyomása esetén a memoban minden 10 perc karakter nagybetű lesz. Ismételt lenyomás esetén váltson át kisbetűsre. 1. Kell deklarálnunk egy olyan változót, amelyet a formon belül minden alprogram lát. Ebben azt fogjuk eltárolni, hogy a memoban a karakterek kisbetűsek vagy sem. Milyen típusú lesz? Boolean. Írjuk közvetlen a form adatmezejébe: kisbetus:boolean; Ennek a változónak a program indulásakor kell adni egy kezdeti

értéket. Tételezzük fel, hogy a felhasználó csak kisbetűkkel ír Kezdeti érték tehát true. De hol adjuk meg neki a kezdeti értéket? Nyilván akkor, amikor a form létrejön. Kattintsunk a formra Az events fülön kattintsunk duplán az onCreate eseményre. Megkaptuk az üres alprogramot. Írjuk bele: kisbetus:=true; 2. Ezután le kell programoznunk a gomb lenyomásának eseményét. Ez kétféle utasítássorozat lesz attól függően, hogy épp kisbetűs vagy nagybetűs szöveg van a memoban. Kattintsunk a nyomógombra, majd az events fülön az onClick eseményre. for i:=1 to Memo1.Count do for j:=1 to length(Memo1.Lines[i]) do if kisbetus Memo1.Lines[i][j]:=upcase(Memo1Lines[i][j]) else Memo1.Lines[i][j]:=downcase(Memo1Lines[i][j]); 3. Teszteljük programunkat, majd mentsük el Oldjátok meg önállóan a 6.3-as feladatot A mai órán a Listboxszal és a memoval ismerkedtünk meg. - 87 - Önálló munka 10 perc Az óra zárása 3 perc E7 Az óra tárgya: Grafikus

vezérlőelemek használata, fájlkezelő dialógusdobozok, menük Az óra típusa: Új ismeretanyagot feldolgozó óra. Az óra célja: A tanulók ismerjék meg a dialógusdobozok és menük készítését, használatát. A Delphi lehetőséget biztosít arra, hogy grafikus felületű Fájlmegnyitás, fájlmegnyitó részt építsünk programunkba. Ez a dialógusdoboz OpenDialog pontosan úgy néz ki, mint amikor magával a Delphi-vel nyitunk 15 perc meg valamit. Mi az amit várunk egy fájlmegnyitó dialógusdoboztól? - Listából tudjuk kiválasztani a nekünk megfelelő állományt. - Csak az olyan kiterjesztésű állományokat listázza, amelyet a programunk kezelni tud. - Miután kiválasztottuk az állományt, egy karakterláncba térjen vissza a kiválasztott állomány a teljes elérési úttal. Az OpenDialog megfelel ezeknek a kritériumoknak. Hogyan használjuk az OpenDialogot? Először is a komponensválasztón ki kell keresnünk a Dialogs fület. Ezután az OpenDialogot

ráhelyezzük formra. Valójában az maga a dialógusdoboz nem látható sem szerkesztéskor, sem futáskor. Csak akkor, ha futtatjuk a dialógusdobozt. Hogyan futtathatjuk a dialógusdobozt? Van neki egy Execute metódusa. Ha meghívjuk lefut az OpenDialog, és a Filename metódussal lekérdezhetjük, hogy a legutolsó futtatáskor milyen állományt nyitottunk meg. Az Execute valójában egy függvény. Amikor egy dialógusdoboz fut, megtörténhet, hogy a felhasználó nem választ ki semmit, hanem bezárja a dialógust, vagy a mégsem gombra kattint. Ilyenkor a visszatérési érték false. Ha állományt választott, akkor pedig true. Ebből következik a használat is: if OpenDialog1.Execute Then Memo1.LinesLoadFromFile(Opendialog1FileName); A fenti példa egy fájl betöltése memoba. Az objektum felügyelőben beállíthatjuk, hogy milyen kiterjesztésű állományok kerüljenek listázásra. Ezt a filter tulajdonságban állíthatjuk be. A SaveDialog használata gyakorlatilag

semmiben sem különbözik Fájl mentése, az OpenDialog használatától. Ugyanúgy rá kell helyezni a formra, SaveDialog ugyanúgy végre kell hajtani, és itt is egy stringet kapunk 8 perc; eredményül. Csak a gombok és a címsor feliratai különböznek if SaveDialog1.Execute Then Memo1.LinesSaveToFile(SaveDialog1FileName); Itt egy memo tartalmát mentettük el állományba. Ugyanúgy be tudjuk állítani itt is a filtert. A másik fontos dolog egy grafikus programban, hogy Menük tartalmazzon menüt. Ez áttekinthetőbbé teszi a programot a 15 perc felhasználó számára. Hogyan épül fel egy menürendszer? Vannak főmenük. A főmenükben lehetnek menüpontok vagy további almenük. Hogyan készíthetünk menüt? Először is válasszuk ki a menüt a komponensválasztó standard füléről. Helyezzük rá a formra Kattintsunk duplán az ikonra, és elindul egy menütervező. Itt egész egyszerűen végezhetjük el a szerkesztést, mintha - 88 - valamilyen grafikus

tervezőprogrammal dolgoznánk. Minden menüpont saját nevet kap. Kétfélét is Az egyik név az, amit a felhasználó lát, vagyis amit ráírunk. A másik név pedig az, amit a program lát. Ebbe ugye nem kerülhetnek sem ékezetes betűk, sem helyközök. A menütervező az ilyen karaktereket egyszerűen törli. Miután végeztünk a menü megtervezésével, azután már lehet látni a formon a menüt. Lépegethetünk is benne Ha rákattintunk duplán a menüpontra, akkor megjelenik egy üres alprogram. Ugyanúgy, mint amikor a button onClick eseményéhez rendeltük a megfelelő alprogramot. Ez a menü gyakorlatilag olyan, mintha rengeteg buttont építettünk volna be programunkba. A mai órán a menükkel és a dialógusdobozokkal ismerkedtünk Az óra zárása meg. Ha már ezeket ismerjük, és jól tudjuk használni, egész 2 perc komoly programokat tudunk létrehozni néhány egyszerű lépéssel. A menükről és dialógusdobozokról olvashattok a melléklet 35. oldalán.

Valamint vannak példaprogramok is - 89 - GY11 Az óra tárgya: Grafikus vezérlőelemek használata, fájlkezelő dialógusdobozok, menük Az óra típusa: Gyakorlati óra. Az óra célja: A tanulók ismerjék meg a dialógusdobozok és menük készítését, használatát a gyakorlatban. A mai órán megnézzük a gyakorlatban is, hogyan használhatjuk a A gép indítása, dialógusdobozokat és a menüket. Egy programot fogunk megoldani Delphi futtatása kétféleképpen: Egyszerű, jegyzettömbszerű szövegszerkesztőt 3 perc fogunk írni. Először nyomógombokat fogunk csak használni, aztán menüket. Először is helyezzünk egy memot a formra. Aztán tegyünk rá egy Programírás nyomógombot, amire legyen ráírva, hogy mentés. Mi kell nekünk a 15 perc mentéshez? Egy SaveDialog. Keressük ki a komponensválasztó Dialogs fülén, majd tegyük rá a formra. Csináljuk úgy, hogy csak txt állományokat tudjunk vele kilistáztatni. Keressük ki az objektum

felügyelőben a filtert. Amint látjuk, itt akár több filter is megadható Mi adjuk meg, hogy *.txt, és szövegfájlok Ezután kattintsunk duplán a mentés nevű nyomógombunkra, és már írhatjuk is a hozzá tartozó alprogramot. Vagyis: if SaveDialog1.Execute Then Memo1.LinesSaveToFile(SaveDialog1FileName); Ezután tegyünk még egy gombot a formra. Legyen a neve megnyitás. Mi kell ahhoz, hogy egy állományt megnyissunk? Egy OpenDialog. Keressük ki a komponensválasztó Dialogs fülén, és helyezzük a formra. Szintén írjuk át a filtert *.txt-re Aztán szintén egy duplakattintás a megnyitás nyomógombra, és írhatjuk az alprogramot hozzá: if OpenDialog1.Execute Then Memo1.LinesLoadFromFile(Opendialog1FileName); Hogy megfelelő módon használhassuk, a programunkat, szükségünk van egy olyan nyomógombra is, amivel új dokumentumot kezdhetünk. Ez az „új” nyomógomb tulajdonképpen csak annyit csinál, hogy kiüríti a memot. Ehhez a gombhoz a következő

alprogramot rendeljük: Memo1.Clear; Futtassuk le a programot. Írjunk bele egy rövid szöveget, mentsük el, és próbáljuk újra betölteni. Close All aztán New Application. Most ugyanezt a programot írjuk meg másképp. Kicsit Programírás céltudatosabban: 15 perc 1. megtervezzük a formot 2. felpakoljuk a szükséges elemeket 3. megszerkesztjük a menüt 4. es csak ezután fogunk hozzá az alprogramok elkészítéséhez Milyen elemekre lesz szükségünk? - Memo - OpenDialog - SaveDialog - Menü Ezután szerkesszük meg a menüt. Kattintsunk duplán a menü jelére Kapunk egy menüszerkesztőt. Amiket most fogunk csinálni menüpontokat, azok vajon melyik főmenüben szoktak lenni? A fájl - 90 - menüben. Csináljunk egy fájl menüt Aztán az almenüket: Új, Mentés, Megnyitás. Ezután zárjuk be a menüszerkesztőt. Látjuk a menüt a formon Kezdjük el megtervezni. Csináljunk egy duplakattintást az Új menüponton. Adjuk meg a megfelelő utasítássorokat:

Memo1.Clear; Aztán kattintsunk duplán a Mentés menüpontra: if SaveDialog1.Execute Then Memo1.LinesSaveToFile(SaveDialog1FileName); És végül a Megnyitás menüpontra: if OpenDialog1.Execute Then Memo1.LinesLoadFromFile(Opendialog1FileName); Kész is a programunk, teszteljük. Valamelyik órán csináltunk egy olyan feladatot, hogy kisbetűsre és nagybetűsre tudtuk a szöveget változtatni. Ezt építsük be a programunkba. Önálló munka, 10 percetek van A mai órán megismertük a menük és a dialógusdobozok használatát. Nézegessétek a példaprogramokat, és elemezzétek őket. Akiknek van gépük, azok próbáljanak rajtuk változtatni - 91 - Önálló munka 10 perc Az óra zárása 2 perc E8 Az óra tárgya: A Delphi grafikus lehetőségei, Canvas, TImage Az óra típusa: Új ismeretanyagot feldolgozó óra. Az óra célja: A tanulók ismerjék meg a dialógusdobozok és menük készítését, használatát. A mai órán egy új lehetőségét ismerjük meg a

Delphinek. A Bevezető grafikus lehetőségeket. Eddig is grafikus felületen, grafikus 3 perc vezérlőelemekkel dolgoztunk, de ténylegesen grafikával még nem foglalkoztunk. A mai órán a grafika elemeit fogjuk megismerni Minden grafikus vezérlőelemnek létezik egy canvas tulajdonsága. A Canvas Ez magyarul azt jelenti, hogy rajzvászon. Ebbe a canvas 5 perc tulajdonságban össze van gyűjtve minden grafikával kapcsolatos programozási elem. Először is a formra fogunk rajzolni. Nézzük, hogy hogyan tudjuk A form canvassa használni a form canvassát. 20 perc 1. Mivel a rajzolás úgy történik, mintha egy koordináta rendszerben dolgoznánk, ezért célszerű tudnunk, hogy hol vannak e koordinátarendszernek a kezdőpontjai és a végpontjai. Ez pontosan a következő: (0,0)(ClientWidth, ClientHeight) Ha nem a formra rajzolunk: (0,0)(Objektumnév.ClientWidt, ObjektumnévClientHeight) 2 Ismernünk kell a rajzeszközöket is: Ezek a Pen és a Brush. A Pen a ceruza, vagy a

toll. Ezt vonalhúzásra használjuk A következő tulajdonságaik vannak: Canvas.PenColor: Itt valamilyen színkódot kell megadnunk Például a kék szín: Canvas.PenColor:=$FF0000; Canvas.penStyle: psSolid: normál vonal psDot: pontozott vonal A Brush-nak ugyanezek a tulajdonságai vannak, de a Style más értékeket használ: Canvas.BrushStyle: bsSolid: egyszínű, bsCross: rácsozott 3. Ezután jönnek az alakzatok: Canvas.Rectangle(xk,yk, xv,yv); Ez az eljárás egy téglalapot rajzol. LineTo(x,y); A LineTo a grafikus kurzor aktuális pozíciójától vonalat húz a megadott pozícióig, és a grafikus kurzort is elmozgatja oda. A grafikus kurzor kiindulási pontja a (0,0) pont Ez a bal felső sarok. MoveTo(x,y); A MoveTo a grafikus kurzort a megadott pontra helyezi. Pixels[x,y]:=Color; Így rajzolhatunk adott színű pontot az (x,y) helyre. Szin:=Pixels[x,y]; Így kérdezhetjük le, hogy a Canvas adott pontja milyen színű. Ha szeretnénk a formra egy piros téglalapot, amelyet

zöld vonalak határolnak akkor így tehetjük meg: Canvas.PenColor:=$00FF00; Canvas.BrushColor:=$0000FF; Rectangle(0,0,ClientWidt,ClientHeight); De megadhatunk saját koordinátákat is. 4. Már csak egy kérdés maradt Milyen eseményhez rendeljük hozzá. Legtöbbször az onCreate eseményhez szoktuk hozzárendelni, de ha átméretezzük az ablakot, akkor szétcsúszik a - 92 - grafika. Ezért egyszerre két eseményhez is hozzárendeljük: onCreate onResize Most szenteljünk egy kis időt a színekre. Azért lesz ez fontos, mert ez a kódolás nem csak a Delphiben működik, hanem például ha webgrafikával vagy más programozással fogtok foglalkozni életetek során, akkor is ugyanígy vagy hasonlóan fog történni a színek megadása. Először is azért használjuk hexadecimális formában, hogy a 3 byte-ot szemmel is el tudjuk különíteni. Egy bájtot ugyanis pontosan 2 darab hexadecimális jel ír le. Egy bájttal egy főszínnek az intenzitását adjuk meg. 3

főszínünk van: B, G, R. Blue, Green, Red Kék, Zöld, Piros A következőképpen adjuk meg: $BBGGRR Ebből a 3 színből minden színt ki tudunk keverni. A melléklet 36 oldalán megtaláljátok a legkönnyebben megjegyezhető, megérthető színek kódjait. És az utolsó fontos grafikai elem, a TImage: Ez egy olyan elem, ami tulajdonképpen csak egy Canvas, aminek tartalmát fájlba is el tudjuk menteni, illetve onnan be tudjuk tölteni. Amit innen mentünk, az tömörítetlen bmp formában kerül mentésre. Színek 10 perc TImage 5 perc Image1.CanvasPenColor:=$00FF00; Image1.CanvasBrushColor:=$0000FF; Image1.Rectangle(0,0,Image1ClientWidt, Image1.ClientHeight); Elmenteni a következőképpen lehet: Image1.PictureSaveToFile(’fájlnévbmp’); Betöltés: Image1.PictureLoadFromFile(’fájlnévbmp’); A mai órán a grafikával ismerkedtünk meg. A melléklet 36-37 Az óra zárása oldalán találtok leírást, és a megfelelő példaprogramokat is 2 perc nézzétek át.

- 93 - GY12 Az óra tárgya: A Delphi Grafikus lehetőségeinek használata. Az óra típusa: Gyakorlati óra. Az óra célja: A tanulók tudjanak egyszerű grafikát készíteni Delphiben. A mai órán megnézzük, hogy gyakorlatban hogy is működik a grafika. A gép indítása, Delphi futtatása 3 perc Nézzük meg a melléklet 6.9-es feladatát Rajzoljunk a formra 2 Feladat egyenest, amely összeköti a form canvassának átellenes pontjait. Az megoldása 10 perc egyik vonal zöld, a másik piros legyen. 1. Kattintsunk a formra, majd az events fülön kattintsunk duplán az onCreate eseményre. 2. Mit kell először csinálnunk? Egy zöld vonalat húzni a bal felső saroktól a jobb alsó sarokig. Vajon mi lesz a zöld színkódja? Vagyis: Canvas.PenColor:=$00FF00; Canvas.Moveto(0,0); Canvas.Lineto(ClientWidth, ClientHeight); Ezután egy piros vonalat kell húznunk a jobb felső saroktól a bal alsó sarokig. Vajon mi lesz a piros színkódja? Canvas.PenColor:=$0000FF;

Canvas.Moveto(ClientWidth,0); Canvas.Lineto(0, ClientHeight); 4 Futtassuk le a programot. Változtassunk egy kicsit a grafikánkon! A vonalak alá tegyünk egy A feladat olyan téglalapot, amelynek kerete cián színű, a kitöltése pedig bíbor. átalakítása Töltse ki az egész canvast. 10 perc Először is hová kell írnom? Ha az alprogram végére írom, akkor el fogja takarni a két vonalat. Tehát írjuk az elejére: Canvas.BrushColor:=$FF00FF; Canvas.PenColor:=$FFFF00; Canvas.Rectangle(0,0, ClientWidth,ClientHeight); Futtassuk le. Méretezzük át az ablakot! Mi történik? A kép összezavarodik. Szeretnénk, hogy kövesse az ablakot. Vajon mit kell csinálnunk? Keressük ki az Events fülön az onResize eseményt. Ha egyet kattintunk, akkor egy legördülő menü kapunk, ahol ki tudjuk választani a már kész alprogramunkat. Futtassuk le ismét, és méretezgessük az ablakot. Most mindenki önállóan próbálgassa a színkódokat. Próbáljátok Színek önálló

értelemszerűen kevergetni a színeket. (BGR) próbálgatása. 5 perc Új feladat. Készítsük el ugyanezt a programot, de úgy, hogy a képernyő Feladat elmentődjön egy bmp fájlba. Mit kell csinálnunk? Ugyanezt fel kell megoldása rajzolnunk egy Image canvassára. 10 perc Image1.CanvasBrushColor:=$FF00FF; Image1.CanvasPenColor:=$FFFF00; Image1.CanvasRectangle(0,0, Image1.ClientWidth, Image1ClientHeight); Image1.CanvasPenColor:=$0000FF; Image1.CanvasMoveto(Image1ClientWidth,0); Image1.CanvasLineto(0, Image1ClientHeight); Image1.CanvasPenColor:=$00FF00; - 94 - Image1.CanvasMoveto(0,0); Image1.CanvasLineto(Image1ClientWidth, Image1.ClientHeight); Image1.PictureSaveToFile(’kepbmp’) Szintén rendeljük hozzá mindkét eseményhez. onCreate, onResize Képnézővel nézzük az elmentett képet. Minden átméretezéssel frissül a képfájl. Csináljuk meg, hogy dialógusdobozban adjuk meg az elmentendő fájl nevét! A következő órán dolgozatot fogunk írni. Nézzetek

át mindent a grafikus vezérlőelemekkel és a grafikával kapcsolatban. - 95 - Önálló munka 5 perc Az óra zárása 2 perc SZ2 Az óra tárgya: Számonkérés. Az óra típusa: Számonkérő óra Az óra célja: Felmérés, hogy a tanulók hogyan készültek fel a GUI programozásából, és a grafika programozásából. Az első feladat: Olyan feladat legyen, amelyet minimális felkészültséggel meg lehet oldani. Ez az a feladat, amit a kettes osztályzatért tudni kell. Olyan feladat legyen, melyben valamilyen matematikai képlet kiszámítását kell a GUI programozásának segítségével megoldani. (TLabel, TEdit, TButton) Második feladat: Olyan feladat legyen, amit a hármas osztályzatért kell tudni. Fontos, hogy legyen benne valamilyen strukturált adattípus vagy strukturált utasítás. Itt szintén a GUI-n kell dolgozni (TListbox, TMemo) Harmadik feladat: Olyan feladat legyen, amit a négyes osztályzatért kell tudni. Menü, Dialógusdoboz. Negyedik feladat:

Az ötös osztályzatért valamilyen Grafikát kell tudni elkészíteni. A lehetséges feladatokat a következő táblázatban foglaltam össze: Feladat száma Lehetséges feladatsorok 1. feladat 6.1/g 6.1/h 61/e 61/i 2. feladat 6.3/a 6.3/b 63/c 65 3. feladat 6.7 6.7 6.7 6.8 4. feladat 6.9 6.9 6.9 6.11 A tanulók a feladatok megoldása során használhatják mind a képletgyűjteményt, mind az algoritmusgyűjteményt. A dolgozat megírására a tanulók az egész óra idejét felhasználhatják. Az utolsó oszlopban olyan feladatok vannak, amelyet jobb képességű csoportnak lehet adni. - 96 - Irodalomjegyzék Kuzmina Jekatyerina – Dr. Tamás Péter – Tóth Bertalan: Programozzunk Delphi 7 rendszerben! ComputerBooks 2004 ISBN 963 618 307 4 Járdán Tamás – Pomaházi Sándor: Adatszerkezetek és algoritmusok, Líceum Kiadó 1998 Zsakó László: Programozási Feladatok II, Kossuth Kiadó 1997, ISBN 963 09 3977 0 Angster Erzsébet: Programozás Tankönyv I. Akadémiai

Nyomda, Martonvásár 1995 ISBN 963 450 955 Négyjegyű Függvénytáblázatok, matematikai, fizikai, kémiai összefüggések Tankönyvkiadó, Budapest 1992, ISBN 963 18 3884 6 - 97 -