3
BEVEZETŐ
Harmadik éve tanítok számítástechnikát egy vidéki kisváros gimnáziumában. Iskolámban a négyosztályos gimnáziumi tagozat mellett néhány éve nyolcosztályos csoportok is elindultak, jelenleg hetedik (az új számozás szerint tizenegyedik) évfolyamosak az első „fecskék”. Jómagam zömmel ilyen osztályokban tanítok, s inkább az alsóbb évfolyamokon. Abban a szerencsés helyzetben vagyok, hogy a számítástechnika mellett csoportjaimban matematikát is oktathatok. Így a két tantárgy adta koncentrációs lehetőségeket a tőlem telhető legmaximálisabb módon igyekszem kihasználni. Miért a címben szereplő nyelvet választottam? Iskolánk gépparkja igen jónak mondható. Jelenleg két számítástechnika terem, 20-20 géppel - melyek fele már Pentium minőségű - áll az oktatás szolgálatában, jogtiszta szoftverek segítik munkánkat, így többek között a Turbo Pascal is rendelkezésünkre áll. Tudom, hogy nem kimondottan ez a nyelv ajánlott ennek a korosztálynak, de mivel iskolánkban a nyolcosztályos gimnáziumi tagozaton már igen korán, s viszonylag magas óraszámot biztosítanak az informatika tantárgy oktatására, döntöttem úgy, hogy a nyolcadikos korosztállyal elkezdhetünk e programozási nyelvvel foglalkozni. A tanulók hatodikos koruktól (11-12 év) tanulnak számítástechnikát. Minden évfolyamon heti két órájuk van a gyerekeknek tizedikes korukig. Tizenegyedikes koruktól fakultáció keretében még további két esztendőre választhatják a tantárgyat heti négy órában, s akkor érettségizhetnek belőle. A korai kezdés, és a viszonylag magas óraszám tette lehetővé, hogy már hatodikos korukban megismerték a számítógépet, minden órájuk a gépteremben, a számítógépek közelében lehetett. Megtanulták, hogy a számítógép alkalmas szöveg, grafika, animáció megjelenítésére, hangot is kelthet, irányíthat más gépeket. Gyakorlatot szereztek szövegszerkesztő, rajzoló és oktató programok futtatásában. Képesek e programokat saját céljaikra felhasználni. Ismerik az általuk használt számítógép felépítését, tudják a fő részek nevét és feladatát, önállóan fellépnek az iskolai hálózatra, a megismert programokkal tudnak tevékenykedni a program kívánalmai szerint. Megismerték és tudják az algoritmus fogalmát, tudnak egyszerű, a mindennapi életben előforduló algoritmusokat megtervezni, ismernek algoritmus-leíró eszközöket. Tanultak a kézi adatrendezés eszközeivel és módszereivel adatokat rendezni. Elemeztek egyszerűbb algoritmusokat, képesek megállapítani azokról, hogy mit csinálnak. Elágazásokat, döntéseket is tartalmazó algoritmusokat is készítettek. Már az első évben megismerkedtek a Logo-val, amely megteremtette az algoritmus azonnali kipróbálásának lehetőségét, fejlesztette alkotói fantáziájukat, könnyedén „programozói” sikerélményhez juttatta őket.
4
Megtanultak utasításokat, parancsokat, megismerték az ismétlés célját, megvalósítását. Írtak eljárásokat, alkalmaztak paramétereket. Kódolták az algoritmusaikat, kész programrészletekről megmondták, hogy mit csinál. Mindehhez természetesen rendelkezésükre állt a számítógép, így már egy nyelv fejlesztői környezetét is megismerték. Ennyi előzmény után úgy gondoltam, hogy talán nem túl korai a harmadik évben megismerkedni egy másik programozási nyelvvel. Szakdolgozatom anyagául azért választottam e feladatgyűjteményt, mert munkámat elkezdve e nyelv oktatásában, nem találtam kimondottan nekik szóló példatárat. Nagyon sok jó Pascal könyv, feladatgyűjtemény létezik már, de szerintem igen kevés célozza ezt a korosztályt (13-14 évesek). A példatárat úgy szerveztem, hogy egészen a kezdetektől induljon, egyszerű kis feladatokon keresztül ismertesse meg a tanulókat a legalapvetőbb utasításokkal. A feladatok kiválasztásánál figyelembe vettem e korosztály matematikai, fizikai ismereteit. Néhány helyen úgy tűnhet, hogy ezek a felhasznált ismeretek kicsit túllépnek a normál általános iskolai matematikai követelményeken, de én ezt a feladatgyűjteményt elsősorban a nyolcosztályos gimnáziumba járó e korosztályba tartozó tanulóknak szántam, s ebben az iskolatípusban matematikából és egyéb tárgyakból is valamivel magasabbak a követelmények, bővebb a tananyag. Így bizonyos feladatok programozásánál nyugodtan építhetek meglévő tágabb matematikai ismereteikre, annál is inkább, mivel az adott évfolyamon a matematikát is én tanítom, így tudom, hogy ott már mi mindennel foglalkoztunk. A feladatgyűjtemény négy nagyobb egységre tagolható: I. A legalapvetőbb utasításokhoz kapcsolódó feladatok, I - XIII. fejezet II. Programozási tételek, és hozzájuk kapcsolódó feladatok, XIV - XXVII. fejezet III. Összetettebb programozási feladatok, XXVIII- XXIX. fejezet IV. Mintaalkalmazások, XXX. fejezet A példatár első részében olyan feladatokkal foglalkozom, amelyekben a legalapvetőbb utasításokkal ismertetem meg a tanulókat. Ilyenek a kiíró utasítások. Ezt tartalmazza az első fejezet. Természetesen a kezdet kezdetén a program felépítésével foglalkozunk. A Crt unitot a kezdettől használjuk, nem kell különösebb magyarázatokba bonyolódnunk ezzel kapcsolatban, elég ha a közlés szintjén elmondjuk tanulóinknak, hogy a Turbo Pascal a képernyő kezelésére vonatkozó rutinokat ebben tárolja, s ha használni akarjuk őket, akkor a „unitot” előbb meg kell nyitni. A megnyitás annyit jelent, hogy a programfej alatti sorba beírjuk a következő utasítást: „Uses Crt;”. Annyit elmondhatunk még, hogy mi eleinte a Clrscr, GotoXY, TextColor, TextBackGround, stb. utasításokat használjuk ebből. Később a grafikai feladatok megoldásánál ugyanilyen módon vezetjük be a „Graph unitot”. Az első fejezet példáiban elsősorban különböző kiíratások szerepelnek, itt terveztem megmutatni nekik a szöveg- és háttérszínező utasításokat, illetve a pozícionálási lehetőségeket. Már itt is szerepelnek olyan jellegű feladatok,
5
amelyekben a programrészlet szövegének ismeretében találják ki, mit is csinál az adott programrész. A második fejezet hivatott részben a legegyszerűbb adattípusok megismertetésére, felhasználva a matematikából számukra jól ismert műveleti sorrend szabályt, illetve ennek gépi megvalósítását, zárójelezési lehetőségeket. Itt ismernek meg néhány egész típust, a Byte, Integer, Word és a LongInt típusokra gondoltam. A valós típusok közül a Real-t tanítom, mert az nem igényel matematikai kooprocesszort vagy annak emulációját. Itt már készítünk egyszerű, konkrét számokkal dolgozó matematikai problémát megoldó programot. Ilyen a kör területét, kerületét számoló feladat, ahol már a konstans fogalma is előkerül, Pi értékét a deklarációban megadhatjuk konstansként, de hivatkozhatunk arra is, hogy a TP magasabb verziói ismerik a Pi-t. Ekkor már törekedhetünk a szép, esztétikus kiíratásokra, arra, hogy ha a programot más felhasználó működteti, számára is világos legyen, hogy az adott program mit csinál. Ekkor akár már futtatható fájlt is készíthetünk a programunkból. A harmadik fejezet feladatai a deklaráció fontosságára, a szám, logikai, karakter és szöveg típusok használatának elmélyítésére, a megfelelő típus megválasztásának fontosságára szolgálnak. Már a kezdetekre terveztem a logikai típus megtanítását, hisz a nyolcosztályos gimnáziumi matematika anyagban ekkorra már ismernek különféle halmazelméleti és matematikai logikai fogalmakat. Ide is tettem olyan feladatokat, amelyekben a programrész szövegéből kell következtetni a futás eredményére. Ezek a nehezebb feladatok, éppen ezért mindig adok lehetőséget a gépi megvalósításra, ellenőrzésre. Néhány beépített függvényt közlés szinten megmutathatunk a tanulóknak, s azokat használhatják is. A negyedik fejezet foglalkozik az adatbeolvasással. Itt már olyan feladatokat készítünk, ahol a felhasználó adhat értéket a deklarált változóknak, vagyis nem egyetlen konkrét adatra írjuk programjainkat, hanem tetszőlegesekre. Az alkalmazott adattípusok elsősorban elemi típusok: egész, valós, karakter, logikai, illetve az összetettek közül a szöveg típust terveztem ide. Természetesen itt is ügyeljünk arra, hogy a program által megjelenített képernyő esztétikus, a programszöveg is tagolt, könnyen áttekinthető legyen! Ekkor már ablakot is definiálhatunk a képernyőre. Tapasztalatom szerint a gyerekek nagyon örülnek, ha valami szép színesen jelenik meg a képernyőn, főleg ha azt maguk alakíthatták. Érdemes már ekkor kihasználni ezt a lehetőséget. Természetesen a képernyő és a szöveg színét a programok végén mindig állíttassuk velük vissza. Már ebben a fejezetben gondoltam eljárásokra tagolni a programokat. Célszerűnek tartom a programokat itt három eljárásra bontani, beolvasó, kiíró és tényleges végrehajtó részre. Itt használunk először főprogramot. Itt beszélhetünk először arról, hogy az eljáráson belül is lehet deklarációs rész, s abban helyi (lokális) változókat is megadhatunk, amelyek csak az eljáráson belül érvényesek, máshol hivatkozva rájuk hibaüzenetet kapunk. A program elején deklarált változókra azonban bárhol hivatkozhatunk, mivel hatásuk mindenütt érvényes, ezek a globális változók. Eleinte mi még csak globális változókkal dolgozunk, mindent a program deklarációs részében adunk meg.
6
Az ötödik, hatodik és a hetedik fejezet az ismétlési szerkezetekkel foglalkozó feladatokat tartalmazza. Igen fontos rész ez minden programozási nyelvben, ezért eléggé az elejére tettem, az elágazások elé, hisz ismétlő szerkezettel már korábban a Logo nyelvben is találkoztak a tanulók. Ebben a korban a számlálós ciklus a legérthetőbb, s a leggyakrabban használt, ezért ebből a fajtából terveztem a legtöbb feladatot. A másik két ciklusfajtából kevesebb feladatot terveztem, hisz ezek a későbbiekben úgyis többször előfordulnak. Ekkor már az eljárásokban definiálhatunk lokális változókat is, például a ciklusváltozók. A nyolcadik, kilencedik fejezet foglalkozik az elágazásokkal. Ide képzeltem még néhány, gyakran előforduló beépített függvény megtanítását (pl. abs, random stb.). A sorozattípusok közül ebben az életkorban a tömböt tartottam befogadhatónak. Ennek ismeretére igen nagy szükségünk van bizonyos feladattípusok megoldásához. Két fejezetet szántam e témára. A tizedik az egydimenziós, a tizenegyedik a kétdimenziós tömbökkel foglalkozik. A dimenzió szakkifejezés helyett használhatjuk az indexű kifejezést, talán közelebb áll a tanulókhoz, hisz sorozatokról matematikában ekkor már tanultak, ahol az elemek elnevezésénél használtunk indexet (pl. a1, a2, a3,…,an). Az egydimenziós tömbök megértéséhez szükséges matematikai ismereteik tehát léteznek, de érdemes azokat egy-egy feladat előtt feleleveníteni. Feltétlenül felhívom a tanulók figyelmét arra, hogy a programozásban használt vektor elnevezés egyindexű tömböt takar, nem pedig a matematikából ismert irányított szakasz definíciónak felel meg. A kétdimenziós tömbökkel, azaz a mátrixokkal is feltétlenül foglalkozni kell, hisz a programozáshoz nélkülözhetetlen ismeretük. Legfeljebb ne nevezzük mátrixnak, hanem képzeltessük el a gyerekekkel, mint egy táblázatot. Nagyon jó iskolai példa erre a gyerek órán elfoglalt helye. Bármely tanuló helyzetét meghatározhatjuk két számmal, az egyik jelöli az oszlopot, amelyben a tanuló ül, a másik szám pedig azt , hogy az oszlopon belül hányadik. Ebbe a fejezetbe tettem néhány egyszerű, rekord adattípussal megoldható feladatot. A következő két fejezet grafikai feladatokat tartalmaz. Már említettem, milyen fontos ebben a korban a látvány, a szín jelenléte a gyerek életében. Éppen ezért az alapvető utasítások megismerése után a grafikai feladatokat ajánlom programozásra. Viszonylag rövid programszövegekkel, néhány utasítással igen szép, színes ábrákat készíttethetünk a gyerekekkel. Megpróbáltam velük, úgy hogy merem ajánlani mindenkinek, nagyon élvezték a gyerekek. E mellett fejleszti a síkbeli látásmódjukat is. Az ábrák pozícionálását hagyjuk rájuk, önállón számolják ki, tapasztalják meg az ábra arányos elhelyezését a képernyőn, természetesen a grafikus képernyő felbontásának ismeretében. A már ismert ciklusszervezéseket, elágazásokat is jól használhatják ebben a fejezetben. A szöveges képernyőről grafikusra váltás eljárását közlés szintjén elég megmondani, közös munkában megírhatjuk a két eljárást (nyit és zár néven), majd ezt minden grafikai munkájukhoz betölthetik.
7
Az Elemi grafikai feladatok II. fejezetet nem minden tanulónak ajánlom, inkább szakköri feldolgozásra, számítástechnikából versenyre készülőknek szántam, hisz absztraktabb gondolkodásmódot igénylő feladatok. A feladatgyűjtemény második nagyobb egységében az egyszerűbb programozási tételekhez kapcsolódó feladatmegoldásokat terveztem. Az unió és metszet, mint halmazelméleti fogalmak ismertek ebben a korban, így nem igényelnek külön „matematika órát”, de a tétel előtt azért szerepel a gyűjteményben a matematikai definíciójuk úgy, ahogy azt jelenleg matematikából tanulják. A rendezéseket fontosnak tartottam beletenni, mivel a mindennapi élet gyakran veti fel a „rendezés valamilyen szempont szerint” igényt. A gyerekek korábban kézi eszközökkel és módszerekkel már rendeztek adatokat, ezért célszerű ennek gépi megvalósítási lehetőségét is megbeszélni. A példatár harmadik nagyobb egysége két részre bontható. Ide vegyes programozási feladatokat tettem. Az XXVIII. fejezet matematikai versenyfeladatokkal foglalkozik. Mi késztetett arra, hogy ilyen feladatokat is tervezzek e példatárba? Minden matematika tanár életében, ha nem is túl gyakran, de akadnak matematikából tehetséges tanulók. Abban a szerencsés helyzetben vagyok, hogy a gimnázium nyolcosztályos tagozatán van néhány, matematikából igen kimagasló tudást nyújtó tanulóm, pontosan azokban az osztályokban, ahol a számítástechnikát is én tanítom. A korábbi években is, de ebben a tanévben különösen sokszor szerepeltünk matematika versenyeken, levelező feladatmegoldó vetélkedőkön. Ezeken a gyerekek gyakran kapnak olyan feladatokat, amelyek elemi matematikai módszerekkel csak igen nehézkesen, hosszan oldhatók meg, s ha el is jutnak az eredményig, nem biztos, hogy minden megoldást megtaláltak. Munkánk ellenőrzésére találtuk ki e feladatok programozását, hisz bizonyos példák a meglévő ismereteikkel egyszerűen programozhatóak, rövidek, és körültekintő feltétel-megfogalmazások után az összes megoldást kiírja a program. Nem a matematikai gondolkodás helyett ajánlom, inkább érdekességként, és az elemi matematikai módszerekkel való feladatmegoldás ellenőrzésére. Bár olyan gyereknek is adhatnak sikerélményt, aki matematikából nem olyan jó, de ügyesen programozik. Alkalmazva tanítványaimnál e feladattípus programozását tapasztaltam, hogy „elhűltek”, mi mindent „tud a TP”, és bizton állíthatom, hogy a programozás jelentősége nagyot nőtt a szemükben. A második részbe vegyes programozási feladatokat gyűjtöttem. Ekkor már az alapvető programozási ismeretekkel rendelkeznek a tanulók. Ismerik az egyszerű programozási tételeket, tudnak elágazásokat, ciklusokat tervezni, programjaikat eljárásokba szervezni. A X. fejezettől kezdődően kezdjük el komolyan a lokális és globális változók szétválasztását. Itt derül ki a változók szerepe, az eljárások tényleges haszna. Itt konkretizáljuk, hogy a globális változó a program teljes egészében ismert, míg a lokális - amelyet az eljárás elején deklarálunk - csak az eljárásra vonatkozik, hatásköre így az adott eljárásra terjed ki. Ettől kezdve paraméterezzük az eljárásokat, beszéljük meg a paraméterátadás kérdését.
8
A Logo esetében is annak idején, s most is minden alkalommal amikor géphez ülünk engedem használni a tanulóknak a jegyzeteiket, legyen az közös munka, egyéni tervezés vagy akár számonkérés az adott témában. Ne kívánjuk Tőlük, hogy utasításokat magoljanak be! Inkább a meglévő jegyzeteikben, könyveikben tudjanak utánanézni a szükséges ismereteknek, neveljük Őket arra, hogy a már meglévő eljárásaikat igenis használják fel újabb programok írásánál, felesleges gépeltetéssel ne töltsük az időt, hisz az úgyis mindig kevés. A feladatgyűjteményben osztályoztam a feladatokat nehézségi szintjük szerint, Könnyebbek, közepesek és nehezek. Ebben a sorrendben a feladatok szövege előtt jelzés áll, ami a nehézségi fokot mutatja. A jelek: Könnyebb Közepes Nehéz
A feladatgyűjtemény 320 feladatot és 62 mintaalkalmazást tartalmaz. Az utolsó nagy egység a mintaalkalmazások fejezete. E mintamegoldásokban igyekeztem a legegyszerűbb, a gyerekek számára közérthető módon programozni, „beszédes” változónevekkel dolgozni. A kidolgozott feladatok programcíme megegyezik az adott fejezetben a fejezet és a példa sorszámával, azaz prog_fejezetszám_példaszám címekkel láttam el őket. A program neve hasonló, csak a maximum nyolc karakteres megkötés miatt a pr_fejezetszám_példaszám elnevezést választottam. Az alkalmazásokban elsősorban a feladat lényegi megoldására törekedtem a gyerekek számára minél érthetőbben, nem foglalkoztam ezért túl sokat pozícionálással, színezéssel. Úgy gondoltam, hogy ez úgy is egyéni ízlés kérdése, ezért ezt rábízhatjuk a gyerekekre.
9
I. KIÍRÓ UTASÍTÁSOK
1.1.Írj programot, amely a következőt írja a képernyőre: Első Pascal programom! 1.2.Módosítsd az előző feladatot úgy, hogy a képernyő közepén egy általad választott színnel jelenjen meg a szöveg! 1.3.A háttérszínt is Te válaszd meg az előző munkádban! 1.4.Készíts
programot,
amely
arányosan
a
képernyő
közepén
megjeleníti teljes nevedet, iskoládat és évfolyamodat! A színeket magad választhatod. 1.5.Lesz-e látható különbség a képernyőn való megjelenésben az alábbi két program lefuttatása után? ...
...
Begin
Begin
Write(‘Hello!’); End.
Writeln(‘hello!’); End.
1.6.Mi a különbség a képernyőn való megjelenésben a következő két kis programban? Program bp1;
Program bp2;
uses crt;
uses crt;
begin
begin
end.
clrscr;
clrscr;
gotoxy(35,10);
gotoxy(35,10);
write(‘BUDA’);
writeln(‘BUDA’);
write(‘PEST’);
writeln(‘PEST’);
readln;
readln; end.
10
1.7.Írj programot, amely a képernyőn megjeleníti az osztályod vagy csoportod matematika órai ülésrendjét! 1.8.A
programod
a
kötőjel
segítségével
rajzoljon
téglalapot
a
képernyőre! A helyet és a rajz színét Te határozhatod meg! 1.9.Módosítsd az előzőt úgy, hogy a téglalap egyik párhuzamos oldalpárját az egyenlőségjellel, a másikat csillagokkal rajzoltatod! 1.10.Van-e különbség a következő két utasítás között az 5-ös szám megjelenítésében a képernyőn? a. / ...
b./
Write(5);
... Write(‘5’);
...
...
1.11.Az alábbi két program közül melyik jeleníti meg a képernyőn az „a” betűt? a./
b./ Begin
Begin
Write(a);
Write(‘a’);
End;
End;
II. SZÁMOK ÉS MŰVELETEK
2.1.A következő programban a writeln utasítás mögött szereplő műveleteket fejben végezd el, jegyezd fel az eredményeket! Majd a programot gépeld be és futtasd! Mit tapasztalsz? Program muveletek; uses crt; begin writeln(100-(20-(40-80)));
11
writeln(12*13); writeln(-25*(-25)); writeln(1000/25); writeln(1/3); writeln(12.5*3); writeln(12.5/3); readln; end. 2.2.Mi történne, ha minden writeln utasítást write-ra cserélnél? Ki is próbálhatod! Hogyan lehetne az ilyen kiíratást tagolttá tenni? 2.3.Módosítsd a valós számokkal végzett műveletek eredményének kiíratását úgy, hogy az ne normálalakban, hanem meghatározott tizedesjegy pontossággal jelenjen meg! (Ajánlott 2-3 tizedesjegy) 2.4.Az
előző
programot
egészítsd
ki
a
következő
két
sorral:
writeln((23+7)*5) és writeln(23+7*5)! Futtatás után miért más a két eredmény? 2.5.Milyen
sorrendben
végezné
el
a
számítógép
a
következő
műveleteket? Sorszámozd a végrehajtást, számold is ki az eredményeket! Ha időd engedi, egészítsd ki az előző programodat e sorokkal, és ellenőrizd gondolatmeneted helyességét! a./
(10+5)*20-100/4=..........
b./
10+5*20-100/4=..........
c./
10+5*(20-100)/4=..........
2.6.Írj programot, amely kiszámítja a következő műveletek eredményét két tizedesjegy pontossággal! a./
6532 : (12+88) + 782 : (44+56)
b./
3,76 + 12,53 * 27,35 - 1,45 : 12,5
12
2.7.Készíts egy 5 cm sugarú kör kerületét és területét meghatározó programot, amely két tizedesjegyig számol, és a képernyőn az is megjelenik, hogy miről is van szó! Pl. A kör sugara:
5 cm
A kerülete:
.....cm
A területe:
......cm2
2.8.Írj programot, amely általad tetszőlegesen választott két valós számmal elvégzi a négy alapműveletet, és kiírja az összeget, különbséget, szorzatot és hányadost! Ügyelj arra, hogy külső szemlélő is tudja, melyik eredmény melyik művelethez tartozik!
III.
VÁLTOZÓK DEKLARÁLÁSA, ÉRTÉKÜK KIÍRATÁSA
3.1.Egészítsd ki a következő deklarációkat a megadott intervallumoknak megfelelően! Több lehetőség esetén a legkevesebb helyfoglalásút add meg! a./
var a:...................................; (a, 0 a 255)
b./
var a:...................................; (a, -5000 a 5000)
c./
var a:...................................; (a, 0 a 60000)
d./
var a:...................................; (a, -106 a 106)
e./
var a:...................................; (a, -128 a 127)
f./
var a:...................................; (aR)
13
3.2.Értelmezd a következő programrészleteket! a./
begin
b./
a:=30;
a:=15.2;
b:=20;
b:=5;
t:=a*b;
h:=15.2/5;
write(t);
write(h:6:2);
end. c./
begin
end.
begin
d./
begin
a:=20000;
a:=-20000;
b:=25;
b:=40;
p:=a*b;
p:=a*b;
write(‘p= ‘,p);
write(‘p= ‘,p);
end.
end.
- Mi az alapvető különbség az a./ és b./ feladatok között? - Miben különböznek egymástól a./ , b./ és d./ feladatok? A változókat (a,b,t,h,p) milyen típusnak deklarálnád a feladatokban? 3.3.Írj programot, amely A=20 és B=10 számok összegét, különbségét és
szorzatát
meghatározza,
és
megjelenítéshez használd korábbi
megjeleníti
a
képernyőn!
A
ismereteidet (cím, pozícionálás,
esetleg színezés)! 3.4.Bővítsd az előző programot úgy, hogy a két érték hányadosát is meghatározza! Milyen hibát tapasztalsz, ha a hányados változót is egész típusúnak deklarálod? Hogyan javítható a hiba? Keress több megoldást! 3.5.Mindenképpen csak egész típussal szeretnénk dolgozni az előző feladatban. Milyen osztás kerüljön ekkor végrehajtásra?
14
3.6.Az előző osztást módosítsd úgy, hogy az osztás maradékát jelenítse meg a program!
3.7.A
következő
programrészletek
mindegyikénél
add
meg
a
következőket: - Milyen típusúnak kell deklarálni A, B és C -t? - Mit írnak ki az egyes programok képernyőre? a./ A:=10;
b./
A:=7;
c./
A:=2;
B:=12
B:=3;
B:=4;
B:=A;
A:=A+1;
B:=B div 2;
C:=B-A;
C:=A+B;
A:=A mod 2;
Write(C );
Write(C );
C:=A*B;
Típus: A:……………….
……………….
……………….
B:……………….
……………….
……………….
C:……………….
……………….
……………….
Érték: C=………………
……………….
……………….
Write(C );
d./
A:=5000;
e./
A:=5;
B:=40;
B:=4;
A:=A-2;
A:=A+1;
B:=B+1;
C:=A/B;
C:=A*B;
write(C );
write(C );
15
Típus: A:……………….
……………….
……………….
B:……………….
……………….
……………….
C:……………….
……………….
……………….
Érték: C=………………
……………….
……………….
3.8.Legyen A=3,
B=4,
C=5. Cseréld fel a memóriában A, B és C
változók értékét a következő módon: X segédváltozó vegye fel A értékét, B a C-ét, C pedig X segítségével A-ét! Írasd ki a kezdeti és a végállapotot! 3.9.Értelmezd a következő rövid programot! Program karakter; uses crt; var betu,jel,kod:char; begin clrscr; betu:=’B’; jel:=’+’; kod:= ‘#’; writeln(betu); writeln(jel); writeln(kod); readln; end. 3.10.Az
előző
programban
a
betu:=’B’
helyett
betu:=’peterke’
szerepeljen. Mit tapasztalsz? 3.11.A Writeln(jel) után a következő sorokat iktasd be: - writeln(succ(jel)); - writeln(pred(jel)); - writeln(ord(jel)); Mit tapasztalsz? 3.12.A
tízes
feladatban
töröld
a
writeln(kod)
writeln(chr(176)) utasítás kerüljön! Mi történik?
sort,
helyére
a
16
3.13.Az „A”
logikai változó értéke legyen igaz, a „B” logikai változó
értéke hamis. Írj programot, amely meghatározza a következőket: a./
A és B
b./
A és nem B
c./
nem A és nem B
d./
nem A és B !
3.14.Az előző feladatban változtasd meg A és B logikai értékét! Az így futtatott programokat más néven mentsd! Lehetőségek:
A - igaz
B - igaz
A - hamis
B - hamis
A - hamis
B – igaz
3.15.Az előző programokban az és logikai műveletet cseréld vagy -ra! 3.16.A következő konstans deklarációk közül melyekben van szintaktikai hiba? A javítást a pontozott részre írd! a./
const nagy = 350;
...................................................
b./
const kicsi = 0 or 1 or 2;
...................................................
c./
const elso: ‘a’
...................................................
d./
const also=-500; felso= 3E+5;
...................................................
IV.
ADATBEOLVASÁS: BEOLVASÓ UTASÍTÁSOK
17
4.1.Készíts programot, amely két tetszőleges valós számra elvégzi a négy alapműveletet! 4.2.Szépítsd a kiírások küllemét úgy, hogy a program minden fontosat jelenítsen meg! 4.3.Gépeld be, majd futtasd a következő programot! Mit tapasztalsz? Program beolvas; Uses crt; var b1,b2:char; Begin Clrscr; Read(b1); Read(b2); Write(b1,b2); ReadLn; End. Cseréld a read utasításokat readln-re! Mi történik? 4.4.Írj programot, amely a felhasználó által megadott két tetszőleges karaktert kiír a képernyőre: a./ egymás mellé b./ egymás alá 4.5.Készíts programot, amely bekéri a felhasználó nevét, majd kiírja a képernyőre a következőt: Üdvözöllek .....................! Az illető név kerül a kipontozott helyre. 4.6.Írj programot, amely bekér két tetszőleges számot, majd kiszámítja és kiírja a következőket: a./
a számok számtani közepe
b./
négyzetük összege
c./
összegük négyzete !
4.7.Készíts mértékegységváltó programokat! a./ Órákban
megadott
értéket
megjelenít
percekben
és
másodpercekben is! b./ Másodpercben adottakat átírja óra, perc, másodpercre! 4.8.Találj ki hasonló feladatokat! Készíts hozzájuk programot! 4.9.Írj programot, amely egy egyenes vonalú egyenletes mozgást végző test esetén meghatározza a következőket: a./ Az út és idő ismeretében a sebességet!
18
b./ Az út és sebesség ismeretében az időt! c./ A sebesség és idő ismeretében az utat! Természetesen ne írj minden esetben teljesen új programot, hanem az előzőt módosítsd, majd a módosítottat mindig új néven mentsd el!
4.10.Hasonló feladatokat Te is készíthetsz a fizika területéről vett ismereteid alapján, például: a./ Feszültség, áramerősség és ellenállás b./ Tömeg, térfogat és sűrűség c./ Feszültség, áramerősség és teljesítmény d./ Tömeg, fajhő, hőmérséklet-változás és hőmennyiség stb. 4.11.Készíts árazó programot, amely az áru árából és a./ a százalékos emelkedésből meghatározza az új, emelt árat b./ a százalékos csökkenésből kiszámítja az új, csökkentett árat! 4.12.Készíts felszín- és térfogatszámító programokat! (Téglatestre, hengerre, gömbre stb.) 4.13.Készíts nettó jövedelmet számító programot! A program kérje be az illető nevét, havi bruttó jövedelmét, és azt, hogy hány százalékkal szeretne adózni! Ezután a program vonjon le 6%-ot nyugdíjra, 4%-ot egészségbiztosításra, majd az így megmaradó összeget csökkentse az adott adószázalékkal! A képernyőn az illető neve és a kapott nettó összeg jelenjen meg! 4.14.Módosítsd az előző programot úgy, hogy a bruttó jövedelem, valamint az egyes levonások is nevükkel és értékükkel megjelenjenek a képernyőn! Pl.
Kovács János jövedelme
Bruttó:
50.000,- Ft. (felhasználó által megadott)
Adókulcs:
40%
(felhasználó által meghatározott)
Levonások: 6% nyugdíj:
3.000,- Ft.
(mindig 6%)
19
4% eg.bizt.
2.000,- Ft.
40% adó
18.000,-Ft.
Nettó:
27.000,-Ft.
(mindig 4%)
(A 6%+4% -kal csökkentett értékből számítandó) A megjelenítéshez definiálhatsz egy megfelelő méretű színes ablakot is a képernyőre. Vigyázz, hogy adott színű háttérre milyen színnel írod a szöveget!
ISMÉTLÉSEK SZERVEZÉSE V. A SZÁMLÁLÓS CIKLUS
5.1.Készíts programot, amely öt sort teleír a keresztneveddel a képernyőn! Az egyes kiírások között feltétlenül legyen szóköz! 5.2.Írasd ki 1-től 20-ig a természetes számokat a képernyőre: a./ egymás mellé (legalább egy szóköz legyen a számok között) b./ egymás alá (minden szám új sorban)! 5.3.Az előző feladatot módosítsd úgy, hogy a számok csökkenő sorrendben jelenjenek meg! 5.4.Írasd ki az angol ABC nagybetűit növekvő sorrendben! 5.5.Az előző programot módosítsd úgy, hogy csökkenő sorrendben jelenjenek meg a betűk! 5.6.Módosítsd a második feladat a./ részét úgy, hogy a számok alatt a négyzetük is szerepeljen a képernyőn! 5.7.Írj programot, amely összeadja az első száz természetes számot! 5.8.Módosítsd a programot úgy, hogy Te dönthesd el, hány darab egymást
követő
meghatározni!
természetes
számra
szeretnéd
az
összeget
20
5.9.Módosítsd az előző feladatot úgy, hogy tetszőleges kezdőértéktől tudjon a program összeget számolni! 5.10.Készíts számtani sorozat tagjait kiszámító programot! A gép az első elem, a differencia és az elemszám ismeretében írja ki a sorozat elemeit! 5.11.Az előző feladatot oldd meg mértani sorozatra is! (Be: a1, q, n ); 5.12.Írj programot, amely csillagokból egy 30*10-es téglalapot rajzol a képernyő közepére! 5.13.Különböző jelekkel rajzoltass a képernyőre alakzatokat (háromszög, kereszt, stb.)! 5.14.Készíts vastagvonalas keretet egy színes ablak köré a képernyőre! (A szükséges ASCII kód 219 = ). A keret a képernyő széleitől arányosan helyezkedjen el (pl. felülről és alulról 5-5 egységre, oldalról 10-10 egységre)!
VI. AZ ELÖLTESZTELŐ CIKLUS
6.1.Készíts programot, amely „0” végjelig elfogad valós számokat! 6.2.Módosítsd az első programot úgy, hogy a beolvasott számok átlagát is meghatározza! Vigyázz! A 0 ne szerepeljen az átlagok között! 6.3.Írj programot, mellyel karaktereket olvashatunk be „*” végjelig! 6.4.Módosítsd az előző programot úgy, hogy a beolvasott karaktereket egy szöveggé fűzve írja is ki! 6.5.Írassuk ki a 200-nál kisebb négyzetszámokat! 6.6.Adjuk össze 3 egész számú többszöröseit 100-ig!
21
6.7.Az első hány darab természetes számot kell összeadnunk, hogy az összeg kisebb legyen 1000-nél? 6.8.Módosítsd az előző programot úgy, hogy az összeget a felhasználó adhassa meg! 6.9.Az 5 természetes szám egész számú többszöröseiből hány darabot kell összegeznünk, hogy az összeg ne lépje túl az integer tartomány felső határát! 6.10.Változtasd meg az előző programot úgy, hogy a felhasználó által meghatározható
értékkel
indulva,
megadható
lépésközzel
és
összeghatárig számoljon! 6.11.Hány faktoriális értéke nem haladhatja meg az integer típus felső határát? 6.12.100000Ft megtakarított pénzemet 15%-os éves kamatot garantáló államkötvénybe fektetve mennyi idő múlva éri el a pénzem a 200000Ftot? (Kamatos kamat!) 6.13.Módosítsd az előző programot úgy, hogy a kiinduló összeget, a kamat mértékét és az elérendő összeget a felhasználó adhassa meg!
VII.
A HÁTULTESZTELŐ CIKLUS
7.1.Kérjen be a program billentyűzetről természetes számokat! Csak akkor fogadja el a beütött számot, ha az 0 és 50 közötti!
22
7.2.Írassunk véletlen számokat a képernyőre addig, amíg a gép egy bizonyos számot el nem talál! Például 0 és 10 közötti számok esetén akkor legyen vége, ha 6-ot generál a program! 7.3.Készíts
programot,
mellyel
karaktereket
vihetünk
be
általad
megszabott végjelig! 7.4.Írasd ki a nevedet a képernyő közepére, tetszőleges billentyű lenyomására léphessünk ki a programból! (Ne csak az ENTER-re!) 7.5.Írj programot, amelybe tanulmányi átlagokat vihetünk be „0” végjelig, s a program meghatározza az átlagot! Vigyázz! A végjel 0-át ne számítsd hozzá az átlaghoz! 7.6.Készíts programot, amely közönséges törtek tizedes tört alakját írja ki hat tizedes jegyig! 7.7.Módosítsd az előző programot úgy, hogy addig fusson, amíg a számláló értékül 0-át nem kap! 7.8.Olvassuk be egy háromszög három oldalának hosszát! A beolvasás addig ismétlődjön, míg az adatokra nem teljesül a háromszögegyenlőtlenség! (Háromszög-egyenlőtlenség: bármely két oldal összege nagyobb a harmadik oldalnál!) A program adjon különböző üzeneteket is! 7.9.Módosítsd az előző feladatot úgy, hogy a következő feltétel is teljesüljön: a kerület 20 és 30 közé essen!
ELÁGAZÁSOK
VIII. A KÉTIRÁNYÚ ELÁGAZÁS
23
8.1.Készíts programot, amely egy beolvasott számról eldönti, pozitív-e! A kiíratásnál használj különböző színeket! 8.2.Írj programot, amely meghatározza egy beolvasott szám abszolút értékét! Nem használhatod az abs függvényt! 8.3.Írd meg a programot az abs függvénnyel is! 8.4.Készíts programot, amely két ember testmagassága ismeretében eldönti, melyikük a magasabb! 8.5.Módosítsd az előző feladatot úgy, hogy egyenlő magasságok esetén is jól működjön! 8.6.Az első feladatot alakítsd át úgy, hogy a beolvasott számról azt is kiírja, hogy 0 vagy negatív! 8.7.Döntse el a program két beolvasott számról, hogy megegyező előjelűek-e! 8.8.Írj programot, amely két tetszőleges számról eldönti, melyikük a nagyobb! 8.9.Egészítsd ki az előző programot úgy, hogy a számokat írja is ki növekvő sorrendben! 8.10.Az előző két feladatot módosítsd úgy, hogy három számra is működjön! 8.11.A fejezet nyolcadik feladatát oldd meg számok helyett névsorba rendezendő két névre! 8.12.Az előző feladatot módosítsd úgy, hogy három névre is működjön! 8.13.Készíts
programot,
amely
három
mérőszámról
eldönti,
szerkeszthető-e velük háromszög! 8.14.Egészítsd ki az előző programot úgy, hogy ha szerkeszthető háromszög, akkor arról mondja meg a program, hogy derékszögű-e! 8.15.Bővítsd tovább a programot! Ha szerkeszthető háromszög, akkor az hegyesszögű, derékszögű vagy tompaszögű-e! 8.16.Írj programot, amely egy beolvasott számról eldönti osztható-e 15tel!
24
8.17.Módosítsd az előzőt úgy, hogy az osztót is a felhasználó adhassa meg! 8.18.Egy beolvasott életkorról döntse el a program, hogy az illető gyerek(0-6év), iskolás(7-18 év), dolgozó(19-62 év) vagy nyugdíjas! 8.19.Adott egy tetszőleges pont a síkban koordinátáival, döntsük el, melyik síknegyedben van! 8.20.Bővítsd az előző programot úgy, hogy tengelyen lévő pontokra is jól működjön! 8.21.Készíts programot, amely egy beolvasott évszámról eldönti, szökőév-e! A beírható évszám ésszerű határok között mozogjon!
IX. A TÖBBIRÁNYÚ ELÁGAZÁS
9.1.Írj programot, amely számként bevitt osztályzatoknak kiírja a szöveges megfelelőjét! (Pl. 5-re a jeles szöveget jeleníti meg) 9.2.Készíts dolgozatot a pontszám alapján értékelő programot! A maximális pontszám legyen 50. A határok:
0-25 elégtelen 26-30 elégséges 31-39 közepes 40-45 jó 46-50 jeles
A begépelt tanulói pontszám alapján a program írja ki az osztályzatot! 9.3.Írj programot, amely bekéri az osztályzatodat, és ez alapján kiírja szüleid véleményét! Ötletes megjegyzéseket jeleníts meg a képernyőn!
25
9.4.Készíts programot, amely egy beolvasott karakterről megmondja, milyen kategóriájú! A...Z nagybetű; a...z kisbetű, 0...9-ig szám, minden más eset legyen speciális jel. 9.5.Tervezz programot, amelyben a case utasítás segítségével menüszerűen választható, hogy mit szeretnénk kiíratni! Olvasunk be egy egész számot: 1-nél magát a számot 2-nél a szám abszolutértékét 3-nál a szám négyzetét 4-nél a szám ellentettjét írja ki! 9.6.Írj programot, amely egy beolvasott számhoz hozzárendeli, hogy a hét melyik napja! (1 - hétfő, 2 - kedd, stb.) 9.7.Készíts programot, amelyben menüszerűen választhatunk, hogy mely síkidom területét akarjuk kiszámítani! (Pl. 1- téglalap, 2- trapéz, 3- kör, stb.) A korábban megírt területszámító programjaid megfelelő eljárásait átmásolhatod ebbe a programba! 9.8.Készíts programot, amely egy szótagból álló szavakról megmondja, hogy a szó magas vagy mély hangrendű!
X. FELADATOK EGYINDEXES TÖMBÖKKEL
10.1.Készíts programot, amely bekér öt pozitív egész számot, ezeket egy tömbben tárolja (feltételvizsgálat legyen), majd kiírja azokat a képernyőre egymás mellé! 10.2.Öt darab véletlen számmal tölts fel egy tömböt, majd add meg a számok összegét és átlagát! 10.3.Egy vektorban tárold családod tagjainak keresztneveit, majd írasd ki ezeket a a képernyőre egymás mellé szóközökkel elválasztva! 10.4.Olvassunk be numerikus adatot egy tömbbe 0 végjelig! A beolvasást addig ismételjük, amíg a bemenő adat nem megfelelő, azaz a
26
program ellenőrizze, hogy számot olvastunk-e be és nem karaktert! A program írja ki a beolvasandó adat indexét is! 10.5.Írj programot, amely beolvasott jegyeid alapján megadja az adott tantárgyból az átlagodat! (Maximálisan tíz jegyre készüljön!) Kérje be a tantárgy nevét is, s a kiíratásnál azt is jelenítse meg! (Pl. így: matematikából az átlagod: 4.3) 10.6.Kérjen be a program két vektort, számítsa ki összegüket! 10.7.Az előző programot módosítsd úgy, hogy a vektorok különbségét is meghatározza! 10.8.Számíttasd ki a két vektor skalárszorzatát is! 10.9.Mérjük meg tíz gyerek testsúlyát, a mért értékeket sorban vigyük be egy tömbbe. Kérdés, hogy melyik gyerek súlya tér el legjobban az átlagtól? 10.10Írj programot, amely bekéri évenként 1990 és 1997 között, hogy mennyi pénzt költött ruhára Gábor és Évi. Ezután tedd lehetővé annak megkérdezését, hogy mennyit költöttek egy adott évben külön-külön és együtt! A lekérdezés addig folytatódjon, amíg az adott évnél nullát nem ütnek! 10.11.Egy börtönben 100 cella van, mindegyikben egy rab ül. Kezdetben a cellák zárva vannak. A börtönőrnek játszani támad kedve: végigmegy az összes cella előtt, és mindegyik ajtó zárján fordít egyet. Fordításkor a nyitott cellát bezárja, a zártat kinyitja. Ha végigment elkezdi elölről, és minden második cella zárján fordít egyet. Aztán minden harmadikon fordít, és így tovább, összesen százszor.
Ezután amelyik cella ajtaja nincs
lezárva, abból a rab elmehet. Készíts programot, amely megadja a szabaduló rabok cellaszámát! Próbáld ki a programot magasabb cellaszámra is (Pl. 1000)! 10.12.Olvassunk be neveket
‘*’
végjelig! A beolvasott neveket
osztályozzuk hosszuk szerint, és készítsük el a következő statisztikát: Hossz
Darab
0–9
:………
10 –19
:………
20 – 29
:………
27
30 – 39
:……….
40 -
:……….
XI. FELADATOK TÖBBINDEXES TÖMBÖKKEL
11.1.Tölts fel egy 3x3-mas táblázatot véletlenszerűen 0 és 1 elemekkel! Írasd ki! Pl. a következő formában:
1
1
0
0
0
1
1
0
1
11.2.Módosítsd a feladatot N * M-es táblázatra! N és M értékét is a felhasználó adhassa meg, természetesen ésszerű határok között! ( 2 <= N,M <= 10) 11.3.Az előző táblázatban a 0 elemeket cseréld 5-re! 11.4.Írj
programot,
amely
beolvassa
öt
ismerősöd
nevét
és
telefonszámát, majd kiírja ezeket a képernyőre a következő módon: Név XXXX
Telefonszám YYYY
11.5.Módosítsd az előző programot úgy, hogy az ismerőseid nevén kívül a lakcímük is megjelenjen a képernyőn!
28
11.6.Készíts programot, amely a teljes hetes szorzótáblát megjeleníti a képernyőn! 11.7.Módosítsd az előző programot úgy, hogy a felhasználó adhassa meg ésszerű határok között, hogy melyik szorzótáblát szeretné látni! 11.8.Legyenek A és B N * M-es táblázatok. Töltsd fel őket 0 és 10 közötti természetes számokkal véletlenszerűen! Az így kapott táblázat neve mátrix. Határozd meg e két mátrix: a./ összegét b./ különbségét Az összeadás és kivonás szabálya: a
b
e
f
+ c
a+e
b+f
c+g
d+h
=
d
g
h
11.9.Készíts programot, amelyben beolvashatjuk tanulók nevét és születési évét, majd ezen adatok felhasználásával ezeket kiírja táblázatos formában a képernyőre! 11.10.Módosítsd az előző programot úgy, hogy írók nevét, könyvük címét és a kiadási évet olvashassuk be! Hogyan változik a rekord szerkezete ekkor? 11.11.Készíts
hasonló
feladatokat
Te
is!
Például
a
barátaidra
vonatkozóan: név, lakcím, telefonszám, kedvenc étele stb. szerepelhetnek benne.
XII. ELEMI GRAFIKAI FELADATOK I.
29
12.1.Készítsünk
szövegesről
grafikus
képernyőre
átváltó
keretprogramot! Ezt a programot a továbbiakban mindig felhasználhatod. 12.2.Rajzoltass zöld színnel pontokat a képernyő következő helyeire: A(160,320) B(480,320) C(420,160) D(220,160)! 12.3.Az előző feladat pontjait kösd össze szakasszal! Milyen négyszöget kaptál? 12.4.A LINE utasítás felhasználásával rajzolj a képernyőre különböző háromszögeket! Legyen hegyesszögű, derékszögű, tompaszögű, egyenlő szárú és egyenlő oldalú is közöttük! 12.5.Rajzolj a képernyőre koncentrikus köröket! Középpontjuk a (320,240) pont, sugaraik rendre 50, 100, 150. 12.6.Módosítsd az előző programot úgy, hogy a CIRCLE utasítást csak egyszer írd le! 12.7.Rajzoltass a képernyő középpontjában tetszőleges számú, sugarú és
színű
koncentrikus
köröket!
(Vigyázz
a
legnagyobb
sugár
megválasztásánál!) 12.8.Írj programot, amely kirajzolja a képernyőre az olimpiai ötkarikát különböző színekkel! 12.9.Készíts programot, amely három egybevágó, különböző színű téglalapot rajzol a képernyőre: a./ egymás mellé arányosan elhelyezve b./ egymás alá c./ átlósan! 12.10.Módosítsd az előző programodat úgy, hogy a RECTANGLE utasítást csak egyszer kelljen leírnod! 12.11.Készítsd el három egymásba ágyazott téglalap rajzát a képernyő közepére! A méreteket Te add meg! 12.12.Módosítsd az előző feladatot úgy, hogy a téglalapok különböző színnel kitöltöttek legyenek, a legkisebb legyen legfelül!
30
12.13.Írasd ki a nevedet a grafikus képernyőre középre, vízszintes irányban, az általad választott betűtípussal és mérettel! 12.14.Az előző feladatot módosítsd úgy, hogy függőlegesen jelenjen meg a neved! 12.15.Írass értelmes szöveget átlósan a grafikus képernyőre! 12.16.Készíts programot, amely trapézokat, paralelogrammát, téglalapot és négyzetet rajzol a képernyőre arányosan elrendezve! Minden alakzatban jelenjen meg annak neve! A kép alján pedig legyen ott a készítő neve! Valahogy így:
TRAPÉZ
SZ.TRAPÉZ
PARALELOGRAMMA
TÉGLALAP
D.TRAPÉZ
NÉGYZET
Nagy Péter 12.17.A negyedik feladatot egészítsd ki feliratokkal! Minden háromszög alatt jelenjen meg, hogy milyen típusú! 12.18.A jegyzeted alapján rajzolj különböző alakzatokat a képernyőre! Ellipszist, körcikket, ellipsziscikket stb. 12.19.Készíts egy tortát, majd egy tortaszeletet a képernyőre! A látható lapokat fesd be más-más színnel!
31
12.20.A
sokszögrajzoló
utasítás
segítségével
rajzolj
szabályos
háromszögeket a képernyőre, majd színezd be azokat különböző színnel és mintával! 12.21.Az előző feladatot módosítsd szabályos hatszögre! 12.22Készíts programot, amely a Föld körüli pályán keringő Hold mozgását mutatja be! Feliratozd a bolygókat!
12.23.Az előző feladatot módosítsd úgy, hogy a Nap körül keringjen a Föld, s a Föld körül a Hold!
32
12.24.Készíts koordináta rendszert rajzoló eljárást! A tengelyek mellett szerepeljen a nevük, s a tengelyekre készíts beosztásokat! 12.25.Az előző feladat koordináta rendszerét felhasználva ábrázold az Y=2*X-1 elsőfokú függvény pontjait a [-10; +10] intervallumon! 12.26.Módosítsd az előző feladatot úgy, hogy tetszőleges Y=A * X + B alakú elsőfokú függvényre is működjön!
XIII. ELEMI GRAFIKAI FELADATOK II.
Most olyan feladatok szerepelnek a példatárban, melyek megoldása során csak a következő grafikus utasításokat használhatod fel: képernyőtörlés egy pont rajzolása egy pont törlése adott pont rajzolt vagy rajzolatlan állapotának vizsgálata 13.1.Készíts programot, amely besatírozza a képernyőt függőleges vonalakkal! 13.2.Módosítsd az előző programot úgy, hogy vízszintes vonalakkal satírozzon! 13.3.Rajzoltass a képernyőre vonalakat spirális alakban! Valahogy így:
33
13.4.Készíts szakaszrajzoló eljárást a pontrajzoló eljárás segítségével! 13.5.Rajzoljunk a képernyőre véletlenszerűen szakaszokat! 13.6.Készítsünk körrajzoló programot, a kör Descartes-féle koordinátarendszerben felírt egyenletének ismeretében! (Az egyenlet: X2+ Y2 = R2 alakú) 13.7.Készíts negyedkört rajzoló eljárást! A sugár legyen 100, az ívhez tartozó kör középpontja a képernyő közepe! 13.8.Módosítsd az előző programot úgy, hogy az adatokat a felhasználó adhassa meg! 13.9.Készíts programot, amely adott negyedkört rajzol a képernyőre, majd az ENTER billentyű lenyomására azt tükrözi a tengelyekre és a középpontra, előállítva ezzel a teljes kör rajzát! Az egyes lépésekhez rendelhetsz különböző színeket!
PROGRAMOZÁSI TÉTELEK
A most következő fejezetek feladatainak megoldása során a feladattípus általános megoldó algoritmusát követjük. Néhány esetben ezt egészítjük ki egyéb számításokkal.
34
XIV. A SOROZATSZÁMÍTÁS (ÖSSZEGZÉS) TÉTELE
Ez a feladattípus adott sorozathoz rendel egy értéket. A sorozat tagjainak meghatározza összegét, szorzatát, átlagát stb. A feladattípus általános megoldó algoritmusa: Eljárás sorozatszámítás: S:= kezdőérték Ciklus I=1-től N-ig S:= S művelet X( I ) Ciklus vége Eljárás vége 14.1.Adjuk össze az első tíz természetes számot! (Az első elem 1 legyen!) 14.2.Tetszőleges helyről indítva adjunk össze tíz darab szomszédos egész számot! 14.3.Az előző programodat módosítsd úgy, hogy tetszőleges, a felhasználó által megadott számú szomszédos természetes számra működjön, 1-től indítva! 14.4.Határozzuk meg N db egymást követő egész szám számtani közepét! 14.5.Egy héten keresztül mértük a déli hőmérsékletet. Írj programot, amely ezen adatokból meghatározza a heti déli átlaghőmérsékletet! 14.6.Készíts
programot,
amely
N
tanuló
adott
dolgozatjegyéből
meghatározza az osztály átlagát az adott tantárgyból! 14.7.N napon keresztül mérjük a lehullott csapadék mennyiségét (mmben). Határozzuk meg, hogy mennyi eső esett ezen időszakban! 14.8.Határozza meg a program 10 faktoriális értékét!
35
14.9.Módosítsd az előző feladatot úgy, hogy N faktoriális értéket számoljon! Ellenőrizd N értékét, nehogy túlcsordulás legyen! 14.10.Adott egy N elemű betűsorozat! Fűzzük össze egyetlen változóba N hosszúságú szöveggé! 14.11.Egy horgászverseny adatait egy táblázatban tároljuk: H(i,j) jelenti, hogy az „i.” horgász a j. halfajtából mennyit fogott. Írj programot, amely kiszámítja, hogy a horgászok összesen hány halat fogtak az egyes fajtákból! 14.12.Írd át az előző feladatot úgy, hogy azt is megadja, hogy a horgászok egyénenként hány halat fogtak!
XV. AZ ELDÖNTÉS TÉTELE
Ez a feladattípus adott sorozathoz rendel egy logikai értéket. A logikai érték „igaz”, ha a sorozatban létezik az általunk megadott tulajdonsággal rendelkező elem, és „hamis”, ha nincs a sorozatban ilyen tulajdonságú elem. A feladattípus általános megoldó algoritmusa: Eljárás eldöntés: I:=1 Ciklus amíg I N és X( I ) nem T tulajdonságú I:=I+1 Ciklus vége VAN:=( I N ) Eljárás vége
36
15.1.Írj programot, amely beolvas öt pozitív egész számot, majd eldönti van-e közöttük öttel osztható! 15.2.Kosárlabda csapat tagjainak magasságát tároljuk egy tömbben. Készíts programot, amely eldönti, van-e a csapatnak 210 cm-nél magasabb játékosa! 15.3.Egy osztály tanulóinak év végi átlagát tömbben tároljuk. Döntsd el, hogy az osztályban van-e bukott tanuló! 15.4.Ismert N autó fogyasztása (100 km/liter). Döntsd el, hogy minden autó 8 liter alatt fogyasztott-e! 15.5.Ismerjük egy osztály tanulóinak születési hónapjait. Döntsük el vane az osztályban évvesztes! 15.6.Döntsük el egy számról, hogy prímszám-e! 15.7.Adott egy tetszőleges, pozitív, 1-nél nagyobb egész szám. Döntsd el, tagja-e a Fibonacci sorozatnak! (Emlékeztető: A Fibonacci sorozat elemei : 1;1; 2; 3; 5; 8; 13; 21; ...) 15.8.Egy adott, értelmes szövegről döntse el a program, hogy több szóból áll-e! 15.9.Egy bűnügyi nyilvántartásban a zsebtolvajokról négy adatot tartanak nyilván: magasság, szemszín, hajszín, eddig letöltött büntetés. Döntsük el, van-e két olyan zsebtolvaj, akiket ez a nyilvántartás nem különböztet meg! 15.10.Készíts programot, amely eldönti egy természetes számról, hogy tökéletes szám-e! Tökéletesnek nevezünk egy számot, ha osztóit (önmaga kivételével) összeadva magát a számot kapjuk, pl. 6=1+2+3.
37
XVI. A KIVÁLASZTÁS TÉTELE
Ez a feladattípus egy adott sorozat elemei közül kiválaszt egy bizonyos tulajdonságú elemet. A sorozat tagjai között e feladatokban biztosan van a megadott tulajdonsággal rendelkező elem. A feladattípus általános megoldó algoritmusa: Eljárás kiválasztás: I:=1 Ciklus amíg X( I ) nem T tulajdonságú I:=I+1 Ciklus vége SORSZÁM:=I Eljárás vége 16.1.Határozzuk
meg
az
N
(>1)
természetes
szám
legkisebb
prímosztóját! 16.2.Határozzuk meg az N (>1) természetes szám legnagyobb prímosztóját! 16.3.Készíts programot, amely egy 10 elemű tömb elemei közül kiválasztja az első 5-tel oszthatót! (A tömb elemei között biztosan legyen ilyen szám!) 16.4.Ismerjük egy osztály tanulóinak születési hónapjait. Ezek között az év minden hónapja előfordul. Írj programot, amely kiválasztja az első évvesztest.! 16.5.Téli napok déli hőmérsékleteit tároljuk egy tömbben. Adjunk meg egy napot amikor nem fagyott! (A hőmérsékletek között biztosan van 0-nál nagyobb!)
38
16.6.Határozzuk meg az első 1-re végződő négyjegyű prímszámot! 16.7.Módosítsd az előző programot úgy, hogy N jegy esetére is működjön! (N értéke ésszerű határok között mozoghat!) 16.8.Határozzuk meg azt a legnagyobb legfeljebb háromjegyű számot, amelyben a számjegyek összege négyzetszám! 16.9.Írj programot, amely megadja az első 10-nél nagyobb tökéletes számot! Tökéletesnek nevezünk egy számot, ha osztóit (önmaga kivételével) összeadva magát a számot kapjuk, pl. 6=1+2+3. 16.10.Hónapnévvel adott dátumot alakítson a programod számmal megadottá! 16.11.Adjuk meg egy hónapról, hogy milyen évszakba esik!
XVII. A KERESÉS TÉTELE
Ez a feladattípus sorozathoz rendel egy elemet. Megadott sorozatban kell bizonyos tulajdonságú elemet keresni. Nem biztos, hogy a megadott sorozatban létezik ilyen tulajdonságú elem. Ha van ilyen elem, akkor vagy magát az elemet, vagy a sorozatban elfoglalt helyének sorszámát kell a programnak meghatároznia (esetleg mindkettőt). A feladattípus általános megoldó algoritmusa: Eljárás keresés: I:=1 Ciklus amíg I N és X( I ) nem T tulajdonságú I:=I+1 Ciklus vége VAN:= ( I N ) Ha VAN akkor SORSZÁM := I Eljárás vége
39
17.1.Kosárlabdacsapat nyilvántartása tartalmazza a játékosok nevét és magasságát. Írjunk programot, amely megadja egy 210 cm-nél magasabb játékos nevét! 17.2.Ismerjük N tanuló nevét és születési hónapját. Keressünk a csoportban egy évvesztes tanulót! 17.3.Adjuk meg egy természetes szám egy valódi osztóját! 17.4.Keressük meg egy szám legnagyobb valódi osztóját! 17.5.Adott egy vektor. Határozzuk meg egy negatív elemének indexét! 17.6.Egy színház nyilvántartása tartalmazza, hogy mely jegyeket vásároltak már meg. Adjunk meg két egymás melletti szabad helyet! 17.7.Egy házi telefonkönyv a nevek szerint rendezett. Keressünk meg benne egy adott névhez tartozó telefonszámot! 17.8.A véradók nyilvántartásában szerepel a név, az értesítési cím és a vércsoport. Egy balesetet szenvedett X vércsoportú sérülthöz keressünk donort!
XVIII. A MEGSZÁMOLÁS TÉTELE
E feladattípusban a megadott sorozatban megszámoljuk, hogy bizonyos tulajdonságú elemből hány darab van a sorozatban. Figyelem: a darabszámot a számlálás megkezdése előtt mindig 0-ra kell állítani!
40
A feladattípus általános megoldó algoritmusa: Eljárás megszámolás: DB:=0 Ciklus I=1-től N-ig Ha X( I ) T tulajdonságú akkor DB:=DB+1 Ciklus vége Eljárás vége 18.1.Készíts programot, amely megmondja, hogy egy egész számokból álló sorozatban mennyi a pozitív elemek száma! 18.2.Módosítsd az előző programot úgy, hogy a negatív és 0 elemek számát is megadja! 18.3.N tanuló átlagának ismeretében add meg a kitűnőek számát! 18.4.Határozd meg egy szövegben előforduló A (a) betűk számát! 18.5.Számoljuk meg, hányszor fordul elő egy adott szövegben az „a” névelő! 18.6.Adjuk meg egy tetszőleges természetes szám osztóinak számát! 18.7.Ismerjük egy tanulócsoport matematika dolgozatjegyeit. Írasd ki a különböző jegyek darabszámát! 18.8.Hány
olyan
legfeljebb
háromjegyű
természetes
szám
van,
amelynek első két jegyéből alkotott szám osztója az eredeti számnak? 18.9.Állapítsuk meg egy vektorban tárolt számokról, hogy negatív vagy pozitív elemből van-e több! Egyenlőség esetén is jól működjön a program, azaz a kiírás a következőhöz hasonló legyen: „ A negatív és pozitív elemek száma egyenlő”. 18.10.Állapítsuk meg, hogy egy természetes szám bináris alakjában hány 1-es számjegy szerepel! 18.11.Módosítsd az előző programot úgy, hogy a 0-ák számát is kiírja!
XIX.
41
A MAXIMUM - KIVÁLASZTÁS TÉTELE
Ebben a példatípusban egy ismert sorozat elemei közül kell a legnagyobbat kiválasztani (esetleg a legkisebbet, ekkor minimumkiválasztásról beszélünk). Van, amikor a legnagyobb (legkisebb) elemre vagyunk kíváncsiak, van amikor csak a sorozatban elfoglalt helyének sorszámára. Néhány esetben mind a kettőt meg kell adnunk. A feladattípus általános megoldó algoritmusa: I. Ez az eljárás a maximális elem értékét és sorszámát is megadja: Eljárás maximum: MAX:=X(1) SORSZÁM:=1 Ciklus I=2-től N-ig Ha MAX < X( I ) akkor MAX:=X( I ) SORSZÁM:=I Ciklus vége Eljárás vége II. Ez az eljárás csak a maximális elem értékét írja ki sorszám nélkül: Eljárás maximum: MAX:=X(1) Ciklus I=2-től N-ig Ha X( I ) > MAX akkor MAX:=X( I ) Ciklus vége Eljárás vége A relációjel megfordításával kapjuk a minimum-kiválasztás algoritmusát.
42
19.1.Adott egy öt elemből álló számsorozat. Adjuk meg a legnagyobb elemét! 19.2.Módosítsd az előző feladatot úgy, hogy a legnagyobb mellett a legkisebb elemet is kiírja! 19.3.Az előző program működjön ötnél több szám esetén is! 19.4.Módosítsd az előző programot úgy, hogy a legnagyobb és legkisebb elemek értékén kívül a sorszámukat is megadja! 19.5.Tölts fel 0 és 100 közötti véletlen számokkal egy tömböt! A program írja ki a legnagyobb és legkisebb elemet! 19.6.Egy tömbben tároljuk a nyári napok átlaghőmérsékletét. A méréseket hétfői napon kezdtük. Adjuk meg a legmelegebb vasárnapot! 19.7.Melyik az a legnagyobb négyjegyű természetes szám, amely osztható számjegyei összegével? 19.8.Tölts fel egy 3 X 3-mas táblázatot természetes számokkal véletlenszerűen 0 és 100 közötti értékekkel! Határozd meg a táblázat legnagyobb elemét! 19.9.Az előző programot módosítsd úgy, hogy a legnagyobb elem indexeit is megadja! Például ha az első sor harmadik eleme a legnagyobb, akkor írja ki, hogy a legnagyobb elem indexe (1,3)!
43
XX. A KIVÁLOGATÁS TÉTELE
E példatípusnál egy sorozat meghatározott tulajdonsággal rendelkező elemeit kell kiválogatni. Ez történhet úgy, hogy az adott tulajdonsággal rendelkezőket kigyűjtjük egy vektorba. A feladattípus általános megoldó algoritmusa: Eljárás kiválogatás(kigyűjtéssel): DB:=0 Ciklus I:=1-től N-ig Ha X(I) T tulajdonságú akkor DB:=DB+1 Y(DB):=X(I) Ciklus vége Eljárás vége A megoldásban gyakran nincs szükségünk az elemek kigyűjtésére, hanem azonnal kiíratjuk azokat: Eljárás kiválogatás(kiírással): Ciklus I=1-től N-ig Ha X(I) T tulajdonságú akkor Kiír: I, X(I) Ciklus vége Eljárás vége 20.1.Tölts fel egy tömböt -10 és +10 közötti véletlen számokkal! Gyűjtsd ki a pozitívokat! 20.2.Módosítsd az előző feladatot úgy, hogy a negatív elemeket írja ki! 20.3.Válogassuk ki egy szóból a magánhangzókat! 20.4.Adott egy szósorozat. Írassuk ki a magas hangrendű szavakat! 20.5.Adott egy természetes számokból álló vektor. Válogassuk ki az elemek közül azokat, amelyek relatív prímek a 12-höz!
44
20.6.Adott N gyerek neve és személyi száma. Adjuk meg a fiúkat! 20.7.Ismerjük egy osztály órarendjét. Írassuk ki, mely napokon van matematika órájuk! 20.8.Ismerjük N ember nevét és születési dátumát (hónap, nap). Adjuk meg a „Nyilas” csillagképben születetteket (november 22. és december 21. között)!
XXI. AZ UNIÓKÉPZÉS TÉTELE
E feladatokban több sorozatból állítunk elő egy sorozatot valamilyen szempont szerint. Az unió matematikai definíciója: Az A és B halmazok uniója azon elemek halmaza, melyek az A vagy B halmaznak elemei. (Azaz legalább az egyik halmazban benne vannak.) Pl. A:={a,b,c,d,e}
és
B:={d,e,f,g}
AB:={a,b,c,d,e,f,g}
A feladattípus általános megoldó algoritmusa: Eljárás unió: Ciklus I=1-től N-ig UNIO(I):= X(I) Ciklus vége K:=N Ciklus J=1-től M-ig I:=1 Ciklus amíg I N és Y(J) = X(I) I:=I+1 Ciklus vége
45
Ha I > N akkor K:= K+1 : UNIO(K):= Y(J) Ciklus vége Eljárás vége 21.1.Tölts fel két tömböt (X és Y) véletlen számokkal, mondjuk öt-öt elemmel. Írasd ki e két halmaz unióját! 21.2.Egy osztály tanulói közül néhányan matematika szakkörre, mások fizika szakkörre járnak. Egy tömbben tároljuk a matematika szakkörösök nevét, egy másikban a fizika szakkörösökét. Készíts programot, amely ezen adatok ismeretében kiírja azon tanulók nevét, akik valamely szakkör munkájában részt vesznek, azaz matematika vagy fizika szakkörre járnak! 21.3.A V halmazba azok az emberek tartoznak, akiknek Volkswagen, az O halmazba azok, akiknek Opel gyártmányú autójuk van. Adjuk meg azon tulajdonosok halmazát (T), akiknek Volkswagen vagy Opel autójuk van! (Elképzelhető, hogy valakinek mindkét autóból van a tulajdonában, ekkor nevük természetesen csak egyszer szerepel a T halmazban!) 21.4.Egy vektorban tároljuk egy X természetes szám összes osztóját, egy másikban az Y természetes szám osztóit. Add meg azon osztókat, melyek X vagy Y osztói! 21.5.Minden halfajtáról tudjuk, hogy mikor esik tilalom alá a horgászata. Adjuk meg azt az időszakot, amikor bármilyen halat szabad fogni!
XXII.
46
A METSZETKÉPZÉS TÉTELE
Az unióhoz hasonlóan e feladatokban is több sorozathoz rendelünk valamilyen szempont szerint egy sorozatot. A metszet matematikai definíciója: Az A és B halmazok metszete azon elemek halmaza, melyek az A és B halmaznak is elemei. (Azaz mindkét halmazban benne vannak.) Pl. A:={a,b,c,d,e}
és
B:={d,e,f,g}
AB:={d,e}
A feladattípus általános megoldó algoritmusa: Eljárás metszet: K:=0 Ciklus I=1-től N-ig J:=1 Ciklus amíg J M és X(I) = Y(J) J:=J+1 Ciklus vége Ha J M akkor K:=K+1 : METSZET(K) := X(I) Ciklus vége Eljárás vége 22.1.Tölts fel két tömböt (X és Y) véletlen számokkal, mondjuk öt-öt elemmel. Írasd ki e két halmaz metszetét! 22.2.Az előző fejezet második feladatából add meg azon tanulók névsorát, akik mindkét szakkör munkájában részt vesznek! 22.3.Egy-egy tömbben tároljuk két természetes szám összes osztóját. Add meg a közös osztókat! 22.4.Ismerjük két író műveinek listáját. Van-e azonos című alkotásuk? 22.5.Az előző fejezet harmadik feladatából add meg azon tulajdonosok névsorát, akiknek mindkét típusú autóból van a tulajdonukban!
47
22.6.Beolvasunk két szót. Add meg azokat a betűket, amelyek mind a két szóban előfordulnak!
RENDEZÉSEK
Az itt szereplő feladatokban valamilyen egy megadott sorozat elemeit kell bizonyos szempont szerint átrendezni. Például nevek névsorba rendezése, számok növekvő vagy csökkenő sorrendje stb. Sokféle rendezési módszer létezik. Ezek közül négy szerepel e feladatgyűjteményben.
XXIII. EGYSZERŰ CSERÉS RENDEZÉS
Ebben a rendezéstípusban a sorozat első elemét összehasonlítjuk a többi, mögötte lévő elemmel, s ha valamelyik kisebb nála, akkor felcseréljük azzal. Ezzel elérjük, hogy a sorozat első helyére a legkisebb elem kerül. Ezt az eljárást folytatjuk a sorozat utolsó előtti tagjáig, s így minden elem előbb utóbb a helyére kerül. Általános megoldó algoritmusa: Eljárás rendezés: Ciklus I=1-től N-1-ig Ciklus J=I+1-től N-ig Ha X(I) > X(J) akkor Csere ( X(I), X(J) ) Ciklus vége Ciklus vége
48
Eljárás vége
23.1.Készíts programot, amely egy adott tömb egész típusú elemeit növekvő sorba rendezi! 23.2Nevekre is valósítsd meg az előbbi feladatot! 23.3.Hány összehasonlítást kell elvégezni: 3 elem sorba rendezésekor? 4 elem sorba rendezésekor? 5 elem sorba rendezésekor? 6 elem sorba rendezésekor? 10 elem sorba rendezésekor? N elem sorba rendezésekor?
XXIV. A MINIMUM - KIVÁLASZTÁSOS RENDEZÉS
Az előző módszer hibája a sok felesleges csere. Célszerűbb az aktuális első elemet a mögötte lévők közül egyedül a legkisebb taggal cserélni. Ehhez a rendező ciklus belsejében cserék helyett egy minimumkiválasztást alkalmazunk.
Általános megoldó algoritmusa: Eljárás minrendezés:
49
Ciklus I=1-től N-1-ig MIN:=I Ciklus J=I+1-től N-ig Ha X(MIN) > X(J) akkor MIN:=J Ciklus vége Csere ( X(I), X(MIN) ) Ciklus vége Eljárás vége 24.1.Az előző fejezet első feladatát oldd meg ezzel a rendezési módszerrel! 24.2.Az előző fejezet második feladatát oldd meg ezzel a rendezési módszerrel! 24.3.Hány összehasonlítást kell elvégezni: 3 elem sorba rendezésekor? 4 elem sorba rendezésekor? 5 elem sorba rendezésekor? 6 elem sorba rendezésekor? 10 elem sorba rendezésekor? N elem sorba rendezésekor?
XXV.
50
A BUBORÉKOS RENDEZÉS
E rendezési elv ötlete, hogy hasonlítsuk össze a szomszédos elemeket, s ha sorrendjük nem jó, akkor cseréljük meg őket. Minden esetben figyeljük a legutolsó csere helyét, mert a következő menetben csak addig kell rendezni, ugyanis ha a belső ciklus egy lefutása alatt egyáltalán nem volt csere, akkor kész a rendezés. Ha például a legutolsó sorozat közepénél volt a csere, akkor ebből tudhatjuk, hogy a sorozat közepe után biztosan kész a rendezés, s így csak az előtte lévő résszel kell foglalkozni. Általános megoldó algoritmusa: Eljárás buborékrendezés: I:=N Ciklus amíg I > 1 CS:=1 Ciklus J=1-től I-1-ig Ha X(J) > X(J+1) akkor Csere( X(J), X(J+1) ): CS:=J Ciklus vége I:=CS Ciklus vége Eljárás vége 25.1.Az első rendezési feladatot oldd meg ezzel a módszerrel! 25.2.A másodikat is!
25.3.Hány összehasonlítást kell elvégezni: 3 elem sorba rendezésekor?
51
4 elem sorba rendezésekor? 5 elem sorba rendezésekor? 6 elem sorba rendezésekor? 10 elem sorba rendezésekor? N elem sorba rendezésekor?
XXVI. A BEILLESZTÉSES RENDEZÉS
E rendezéstípus elve: egyetlen elem mindig rendezett, s ha van egy rendezett egyelemű részsorozatunk, akkor abba nagyság szerint helyére tehetjük a következő elemet, ha nagyobb az elsőnél, akkor mögé, különben elé. A következő beszúrandó elem az első elé, a második mögé vagy közéjük kerül és így tovább. Hatékonyabb az eljárás, ha a beillesztendő elemet nem tesszük rögtön a helyére, hanem a többieket tologatjuk hátra, s a beillesztendőt a legvégén tesszük be. Általános megoldó algoritmusa: Eljárás beillesztéses: Ciklus I=2-től N-ig J:=I-1: Y:= X(I) Ciklus amíg J > 0 és X(J) > Y X(J+1) := X(J): J:=J-1 Ciklus vége X(J+1):= Y Ciklus vége Eljárás vége 26.1.Az első rendezési feladatot oldd meg ezzel a módszerrel!
52
26.2.A másodikat is! 26.3.Hány összehasonlítást kell elvégezni: 3 elem sorba rendezésekor? 4 elem sorba rendezésekor? 5 elem sorba rendezésekor? 6 elem sorba rendezésekor? 10 elem sorba rendezésekor? N elem sorba rendezésekor?
XXVII. A SZÉTVÁLOGATÁS
E feladattípusban egy adott sorozat elemeit válogatjuk ketté (esetleg többfelé) valamilyen tulajdonság alapján. Például az osztály tanulóit fiúkra és lányokra bontjuk, az egész számokat pozitívokra és negatívokra stb. A feladattípus általános megoldó algoritmusa: Eljárás szétválogatás1: J:=0: K:=0 Ciklus I=1-től N-ig Ha X(I) T tulajdonságú akkor J:=J+1: Y(J):=X(I) különben K:=K+1: Z(K):=X(I) Ciklus vége Eljárás vége Ez az algoritmus az adott tulajdonságú elemeket (pl. pozitív egészek) egy vektorba teszi, a többieket egy másikba (negatív egészek), ezért ez az algoritmus szétválogatás két vektorba. Ha a szétválogatáshoz nem használhatunk fel újabb vektorokat, csak egyet, akkor az algoritmust úgy szervezzük, hogy az adott tulajdonságú
53
elemeket az új tömb elejétől, a nem megadott tulajdonságúakat a tömb végéről kezdjük el betenni. Ez az algoritmus a szétválogatás egy tömbbe. Eljárás szétválogatás2: J:=0: K:=N+1 Ciklus I=1-től N-ig Ha X(I) T tulajdonságú akkor J:=J+1: Y(J):=X(I) különben K:=K-1: Y(K):=X(I) Ciklus vége Eljárás vége 27.1.Adott egy tömb egész típusú elemekkel. Válogasd szét őket pozitív, és nem pozitív elemekre két vektorba! 27.2.Ismert a lakásigénylők listája, ebben a család neve és gyermekeik száma szerepel. Válogassuk szét őket aszerint, hogy 3-nál kevesebb, vagy legalább 3 gyermekük van! A legalább három gyermekesek előbb jutnak lakáshoz, ezért a szétválogatás egy tömbbe eljárást alkalmazd, a tömb elejétől a legalább három gyermekes családokat tedd! 27.3.Egy tömbben tároljuk az Audi és a Volkswagen típusú új autót vásárlókat
Válogassuk szét őket aszerint két tömbbe (A és V), hogy
milyen típust vásároltak! 27.4.Ismert egy osztály tanulóinak névsora és személyi száma. Válogassuk szét a fiúkat és a lányokat két vektorba! 27.5.Egy pontverseny száz résztvevője közül I. díjat kapnak a 90%-nál többet, II.díjat a 80%-nál többet, III. díjat pedig a 70%-nál többet teljesítők. A tanulók eredményeit egy névsor pontszámmal együtt tartalmazza. Készítsük el az I., II., III. helyezettek illetve a nem díjazottak névsorát!
XXVIII.
54
MATEMATIKAI VERSENYFELADATOK
28.1.Ha két kétjegyű szám számjegyeit egymás után írjuk, a két szám összegének négyzetével egyenlő számot kapunk. Írj programot, amely meghatározza az összes megoldást! Az
abcd = ( ab + cd )2 , azaz 1000*a+100*b+10*c+d = (10*a+b+10*c+d)2
feltételt kell a programnak vizsgálnia! 28.2.Melyek azok a háromjegyű számok, amelyekre érvényesek a következők: 700 abc 800 és a 2- b2 - c2 = a - b - c ? 28.3.Hány olyan négyjegyű természetes szám van, amelynek 10-es számrendszerbeli alakjában a szomszédos számjegyek különbözőek? 28.4.Egy téglalap oldalai kétjegyű egész számok. A terület és kerület összege 1996. Mekkorák lehetnek a téglalap oldalai? 28.5.Egy tetszőleges kétjegyű szám után írjunk egy 0-át, majd újra a kétjegyű számot. Osztható-e az így kapott ötjegyű szám 11-gyel illetve 13mal minden esetben? 28.6.Határozzuk meg az a, b, n számjegyeket, ha tudjuk, hogy: ab * 1n = nab ! 28.7.Az
abcd tízes számrendszerbeli négyjegyű számról tudjuk, hogy
abc + ab +a = 219 és a + b + c + d =27. Melyik ez a szám? 28.8.Melyek azok az x, y természetes számok, melyekre: xy + yx +x*y =113? 28.9.Határozzuk meg azokat az
abba
alakú négyjegyű számokat,
amelyekre az ab - ba természetes szám, és ab - ba = (a+b)2 28.10.Van-e olyan tízes számrendszerbeli háromjegyű szám, amelynek a középső jegyét törölve, a belőle így nyert kétjegyű szám az eredetinek hetede
nyolcada
kilencede?
55
28.11.Ha összeadjuk két egész szám összegét, különbségét, szorzatát és hányadosát, eredményül 500-at kapunk. Mi lehet ez a két szám? 28.12.Add meg az összes olyan téglalapot, melynek oldalai egész számok, és a területének mérőszáma pontosan háromszorosa a kerületének. 28.13.Van-e
olyan
háromjegyű
prímszám,
amelynek
számjegyeit
összeszorozva tízet kapunk? 28.14.Melyik az a legkisebb pozitív egész szám, amelynek a kétszerese négyzetszám, és a háromszorosa egy egész szám harmadik hatványa? 28.15.Hány olyan négyzetszám van, amely 25-tel osztva 12-t ad maradékul? (Természetesen ésszerű határok között!) 28.16.Hány olyan ötjegyű természetes szám van, amely 9-re végződik és osztható 3-mal? 28.17.Hány oldala van annak a konvex sokszögnek, amelyre fennáll, hogy belső szögeinek összegéhez hozzáadva a sokszög egy külső szögét, eredményül 1560-ot kapunk? 28.18.Van-e olyan négyjegyű, tízes számrendszerbeli természetes szám, amely számjegyeinek összege egyenlő egyrészt az utolsó két jegy szorzatával, másrészt az első két jegy alkotta kétjegyű számmal is? 28.19.Egy háromszög kerülete 19 cm, oldalai cm-ben mérve egész számok. Egyik oldalának hossza a másik két oldal szorzatával egyenlő. Mekkorák a háromszög oldalai? 28.20.Három pozitív egész szám összege ugyanannyi, mint a szorzatuk. Melyek lehetnek ezek a számok? 28.21.Melyek azok a kétjegyű természetes számok, amelyekre igaz, hogy maga a szám 17-tel nagyobb, mint számjegyeinek a szorzata? 28.22.Van-e két olyan négyzetszám, amelyek különbsége 1996? Melyek ezek? Hány ilyen pár van?
XXIX.
56
VEGYES FELADATOK
29.1.Készíts programot, amely néhány síkidom területét kiszámítja! Az, hogy milyen síkidommal szeretnénk dolgozni, menüből legyen választható! 29.2.Az előzőhöz hasonló programot készíthetsz testek felszín-és térfogatszámítására is. 29.3.Adott kettes számrendszerben egy tetszőleges szám. Írj programot, amely átalakítja tízes számrendszerbe! 29.4.Készíts programot, amely tízesből alakít át kettesbe! 29.5.Módosítsd az előző programodat úgy, hogy tízes számrendszerből kettes, négyes vagy nyolcas számrendszerbe lehessen alakítani. A program menüben kínálja fel a lehetséges választást! 29.6.Bővítsd
az
előző
programodat
úgy,
hogy
a
tizenhatos
számrendszerbe történő átalakítás is szerepeljen a menüben. 29.7.Írj programot, amely meghatározza két szám legkisebb közös többszörösét a legnagyobb közös osztó ismeretében! 29.8.A szó betűiből állítsd elő a szó Morse kódját! 29.9.Írj programot, amellyel kistestvéred vagy szomszédod gyakorolhatja az alapműveleteket az általa ismert számkörben! A programtól a következőket várjuk: Menüből legyen választható a művelet; A választott művelettel legalább tíz feladatot adjon; Minden választ azonnal értékeljen; A feladatok elvégzése után összesített értékelést kapjunk (pl. százalékban) 29.10.Készíts TOTO tippeket generáló programot! 29.11.Generálj ötös lottószámokat ! 29.12.Módosítsd az előző programodat úgy, hogy választani lehessen ötös vagy hatos lottószámokat szeretnénk-e! 29.13.Guruljon egy kör a képernyőn:
57
vízszintesen függőlegesen átlósan! 29.14.Mozogjon egy kisautó a képernyő középvonalában vízszintesen! 29.15.Rajzoltass sakktáblát a képernyőre! 29.16.Készíts kockadobást szimuláló programot! A dobott szám a grafikus képernyőn egy négyzeten jelenjen meg!
Pl.
Ha 3-at dobtunk, akkor így:
29.17.Készíts adott intervallumban Pitagoraszi számhármasokat kereső programot! 29.18.Készíts adott intervallumban ikerprímeket kereső programot! 29.19.Keressünk 1000-ig Armstrong számokat! Az Armstrong számok a következő alakúak: abc = a3 + b3 + c3 ) 29.20.Írj programot, amely római számokat alakít át arabbá és fordítva! Menüből lehessen kérni , melyik átalakításra vagyok éppen kíváncsi! 29.21.Az 1901. január elsejei nap hétfő volt. Írj programot, amely ez alapján meghatározza, hogy egy tetszőleges év január elseje 1901 után milyen napra esett! 29.22.Írj programot, amely beolvas egy egész számot 1 és 99 között, majd kiírja a számot betűvel! 29.23.Az iskolai büfében kétféle csokoládét lehet vásárolni, az egyik A, a másik B forintba kerül. Készíts programot, amely megmondja, hogy ha C forintért vásároltunk csokoládét, akkor mennyit vehettünk az egyik illetve a másik fajtából! Add meg azt is, hogy egyértelműen meghatározható-e az eredmény, s ha nem, akkor az összes megoldást megadja! 29.24.Készíts programot, amely beolvassa egy ember teljes nevét, majd kiírja a monogramját! Készítsd fel a programodat két vezeték- illetve keresztnév esetére is. Pl. Nagy Szabó Zoltán vagy Kiss Péter Csaba. 29.25.Írj
programot,
amely
az
A(N)
és
a
B(N)
vektorokban
számjegyenként a helyi értékük növekvő sorrendjében tárolt N+1 -jegyű
58
egész számokat összeadja, s az eredmény a C(N+1) vektorban keletkezik. Pl. N=1, A(0)=5, A(1)=6, B(0)=3, B(1) =7 esetén az eredmény C(0)=8, C(1)=3, C(2)=1, mert 65+73=138. 29.26.Írj
programot,
amely
az
A(N)
és
a
B(N)
vektorokban
számjegyenként a helyi értékük növekvő sorrendjében tárolt N+1 -jegyű egész számokat összeszorozza, s az eredmény a C(2*N+1) vektorban keletkezik. Pl. N=1, A(0)=5, A(1)=6, B(0)=3, B(1) =7 esetén az eredmény C(0)=5, C(1)=4, C(2)=7, C(3)=4, mert 65*73=4745. 29.27.Készíts programot, amely a grafikus képernyőn egy kurzort képes mozgatni a kurzormozgató billentyűk (, , , ) segítségével! Az aktuális pozíción megjelenítendő kurzor ábráját az 1,2,3,4 billentyű bármikori lenyomásával lehessen kiválasztani! Az egyes számokhoz tartozó kurzorképek : 1:
, 2: , 3: , 4:
29.28.Készíts programot, amely egy a képernyőn kijelölt tetszőleges háromszöget
megrajzol,
majd
vízszintes
vonalakkal
besatíroz
(a
háromszög belsejében a képernyő minden második sorában egy vízszintes vonalat húz). A háromszög három pontjának koordinátáit úgy olvassuk be! 29.29.”Eszperente” a szöveg, ha „e” betűn kívül más magánhangzót nem tartalmaz. Írj programot, amely egy tetszőleges - ékezet nélküli szöveget beolvas, és „eszperentévé” alakítja! 29.30.Az előző programodat módosítsd úgy, hogy olvasson be egy szöveget (amely ékezetes magánhangzót nem tartalmaz), s döntse el, hogy „eszperente-e”! Ha nem az, akkor írja ki a „hibás” szavakat! 29.31.Készíts fényújságot, általad tervezett rövid hirdetési szöveggel! Az újság folyamatosan működjön, azaz ha a szöveg egy betűje eltűnik a képernyőről, akkor a másik oldalon lépjen be!
XXX.
59
MINTAALKALMAZÁSOK
I.FEJEZET Program prog_1_2; Uses Crt; Begin Clrscr; GotoXY(30,13); TextColor(2); Write('Első Pascal programom'); ReadLn; End. II.FEJEZET Program prog_2_7; Uses Crt; Begin Clrscr; Window(5,2,75,23);TextBackGround(Magenta);Clrscr; TextColor(Black); GotoXY(15,5); WriteLn('Az 5 cm sugarú kör kerülete és területe'); GotoXY(10,10); Writeln('A kerülete: ',2*5*pi:6:2,' cm'); GotoXY(10,15); Writeln('A területe: ',5*5*pi:6:2,' cm2'); ReadLn; Clrscr; Window(1,1,80,25);TextBackGround(Black);Clrscr; TextColor(White); End. Program prog_2_8;
60
Uses Crt; Begin Clrscr; GotoXY(20,6); TextColor(2); WriteLn('A 100 és a 20 számokkal végzett alapműveletek'); GotoXY(10,10); WriteLn('Az összegük: ',100+20); GotoXY(10,13); WriteLn('A különbségük ',100-20); GotoXY(10,16); WriteLn('A szorzatuk: ',100*20); GotoXY(10,19); WriteLn('A hányadosuk: ',100/20:6:0); ReadLn; End. III.FEJEZET Program prog_3_8; Uses Crt; var A,B,C,X:integer; Begin Clrscr; A:=3; B:=4; C:=5; GotoXY(10,10); WriteLn('Kezdeti állapot: ',A,' ',B,' ',C); X:=A; A:=B; B:=C; C:=X; GotoXY(10,14); Writeln('Végállapot: ', A,' ',B,' ',C); ReadLn; End. Program prog_3_13; Uses Crt; var A,B,C,D,E,F:boolean; Begin Clrscr; A:=true; B:=false; C:=A and B;
61
D:=A and not(B); E:=not(A) and not(B); F:=not(A) and B; GotoXY(20,8); WriteLn(' A és B: ',C); GotoXY(20,10); WriteLn(' A és nem B: ',D); GotoXY(20,12); WriteLn(' nem A és nem B: ',E); GotoXY(20,14); WriteLn(' nem A és B: ',C); ReadLn; Clrscr; End.
IV.fejezet Program prog_4_6; Uses Crt; var elso,masik,szkozep,negyzosszeg,osszegnegyz:real; Procedure Beolvas; Begin Clrscr; WriteLn('Kérem az első számot: '); ReadLn(elso); WriteLn('Kérem a másik számot: '); ReadLn(masik); End; Procedure Kiszamol; Begin szkozep:=(elso+masik)/2; negyzosszeg:=sqr(elso)+sqr(masik); osszegnegyz:=sqr(elso+masik); End; Procedure Kiir; Begin WriteLn('Számtani közepük: ',szkozep:8:2); WriteLn('Négyzetük összege: ',negyzosszeg:8:2); WriteLn('Összegük négyzete: ',osszegnegyz:8:2); End; Begin Beolvas; Kiszamol;
62
Kiir; ReadLn; End. Program prog_4_7b; Uses Crt; var sec,min,h:integer; Procedure Beolvas; Begin Write('Kérem az átalakítandó másodpercek számát: '); ReadLn(sec); End; Procedure Atszamol; Begin h:=sec div 3600; sec:=sec-3600*h; min:=sec div 60; sec:=sec-60*min; End; Procedure Kiir; Begin WriteLn('Az idő: ',h,' óra ',min,' perc ',sec,' másodperc'); End; Begin Clrscr; Beolvas; Atszamol; Kiir; ReadLn; End. Program prog_4_14; Uses Crt; const nyugdij=0.06; ebizt=0.04; var brutto,netto,ado,nyd,eb:real; nev:string[50]; Procedure Beolvas; Begin Write('Kérem a dolgozó nevét: ');ReadLn(nev); Write('Bruttó jövedelme: ');ReadLn(brutto); Write('Hány százalékkal adózik: ');ReadLn(ado); End; Procedure Kiszamol; Begin
63
ado:=brutto*ado/100; nyd:=(brutto-ado)*nyugdij; eb:=(brutto-ado)*ebizt; netto:=brutto-ado-nyd-eb; End; Procedure Kiir; Begin WriteLn(nev,' nevű dolgozó fizetési jegyzéke:'); WriteLn('Bruttó jövedelme: ',round(brutto):8); WriteLn('Adóra levonás: ',round(ado):8); WriteLn('Nyugdíjra levonás: ',round(nyd):8); WriteLn('Egészségbizt.levonás: ',round(eb):8); WriteLn('Netto jövedelme: ',round(netto):8); End; Begin Clrscr; Beolvas; Clrscr; Kiszamol; Kiir; ReadLn; End.
V.fejezet Program prog_5_10; Uses Crt; var a,d,elem:real; n:integer; Procedure Beolvas; Begin Write('A sorozat első eleme: ');ReadLn(a); Write('A differencia: ');ReadLn(d); Write('Hányadik elemre vagy kíváncsi: ');ReadLn(n); End; Procedure Meghataroz; Begin elem:=a+(n-1)*d; End; Procedure Kiir; Begin WriteLn('A sorozat ',n,'. eleme: ',elem:8:2);
64
End; Begin Clrscr; Window(20,5,60,20); Beolvas; Meghataroz; Kiir; ReadLn; End. Program prog_5_12; Uses Crt; var i,j,a,b:byte; Begin Clrscr; a:=25; b:=7; For j:=1 to 10 do Begin GotoXY(a,b); For i:=1 to 30 do Begin Write('*'); End; b:=b+1; End; ReadLn; End. VI.fejezet Program prog_6_8; Uses crt; var i,osszeg,maximum:integer; Begin Clrscr; Write('Meddig szeretnéd számolni az összeget (min. 2 és max. 32767): '); ReadLn(maximum); i:=0; osszeg:=0; while osszeg<maximum do Begin i:=i+1; osszeg:=osszeg+i; End; WriteLn(i-1,'-ig kell összeadni a természetes számokat,'); WriteLn('hogy az összeg kisebb legyen a ',maximum,'-nál!'); ReadLn;
65
End. Program prog_6_13; Uses Crt; var kezdo,penz,vart,kamat:real; i:byte; Begin Clrscr; Write('Mennyi a kezdőtőkéd: ');ReadLn(kezdo); Write('Mennyi legyen az éves kamat: ');ReadLn(kamat); Write('Mekkora összeget szeretnél kapni: ');ReadLn(vart); i:=0; penz:=kezdo; While penz<=vart do Begin i:=i+1; penz:=penz+penz*(kamat/100); End; WriteLn(i,' év múlva éri el a pénzed a ',vart:8:0,' Ft-ot!'); ReadLn; End. VII.fejezet Program prog_7_5; Uses Crt; const vegjel=0.00; var db:byte; szam:real; atlag:real; Begin Clrscr; db:=0;atlag:=0; WriteLn('Írd be az átlagokat (a végjel:0)'); WriteLn('Minden átlag után ENTER!'); Repeat ReadLn(szam); db:=db+1; atlag:=atlag+szam; Until szam=vegjel; WriteLn('A számok átlaga: ',atlag/(db-1):8:2); ReadLn; End.
66
Program prog_7_6; Uses Crt; var szamlalo,nevezo,tiztort:real; Begin Clrscr; GotoXY(24,2); WriteLn('Törtek átírása tizedes tört alakba'); WriteLn;WriteLn; Write('Kérem a tört számlálóját: ');ReadLn(szamlalo); Repeat Write('Kérem a tört nevezőjét: ');ReadLn(nevezo); Until nevezo<>0; tiztort:=szamlalo/nevezo; GotoXY(1,12); Write('A közönséges tört tizedes tört alakja 6 tizedes jegyre: '); Write(tiztort:10:6); ReadLn; End. Program prog_7_9; Uses Crt; var a,b,c,ker:integer; Begin Clrscr; GotoXY(32,2); WriteLn('Háromszög adatai'); WriteLn;WriteLn; Repeat Write('Kérem az "a" oldalt: ');ReadLn(a); Write('Kérem a "b" oldalt: ');ReadLn(b); Write('K‚rem a "c" oldalt: ');ReadLn(c); ker:=a+b+c; Until (a+b>c) and (a+c>b) and (b+c>a) and (ker>20) and (ker<30); WriteLn('Most már megfeleltek az oldalak mérőszámai!'); Write('A kerület is a megadott határok közé esik!'); ReadLn; End.
VIII. fejezet Program prog_8_5; Uses Crt; var mag1,mag2:real; Begin
67
Clrscr; GotoXY(27,6); Write('Magasságok összehasonlítása'); GotoXY(20,10); Write('Az egyik ember magassága: ');ReadLn(mag1); GotoXY(20,12); Write('A másik ember magassága: ');ReadLn(mag2); GotoXY(20,16); If mag1>mag2 Then Write('Az első ember a magasabb') Else If mag1=mag2 Then Write('Egyenlő magasságúak') Else Write('A második ember a magasabb'); ReadLn; End. Program prog_8_10; Uses Crt; var szam1,szam2,szam3:integer; Begin Clrscr; GotoXY(29,6); Write('Számok összehasonlítása'); GotoXY(20,10); Write('Kérem az első számot: ');ReadLn(szam1); GotoXY(20,12); Write('Kérem a második számot: ');ReadLn(szam2); GotoXY(20,14); Write('Kérem a harmadik számot: ');ReadLn(szam3); GotoXY(20,18); If szam1>szam2 then begin if szam1>szam3 then Write('Az első a legnagyobb') else Write('A harmadik a legnagyobb'); end else if szam2>szam3 then Write('A második a legnagyobb') Else Write('A harmadik a legnagyobb'); ReadLn; End. Program prog_8_15; Uses Crt; var a,b,c,x,y,z:integer; Begin Clrscr; Write('A háromszög első oldala: ');ReadLn(a); Write('A haromszög második oldala: ');ReadLn(b); Write('A haromszög harmadik oldala: ');ReadLn(c); If (a+b>c) and (a+c>b) and (b+c>a) then Begin WriteLn('Háromszög oldalai az adatok');
68
x:=sqr(a);y:=sqr(b);z:=sqr(c); If (x+y=z) or (x+z=y) or (y+z=x) Then WriteLn('A háromszög derékszögű') Else If (x+y>z) and (x+z>y) and (y+z>x) Then WriteLn('A háromszög hegyesszögű') Else WriteLn('A háromszög tompaszögű') End Else WriteLn('Ezek nem háromszög adatai!'); ReadLn; End. IX.fejezet Program prog_9_2; Uses Crt; var pontszam:byte; Begin Clrscr; GotoXY(4,8); Write('Kérem az elért pontszámot (0<=pontszám<=50): '); ReadLn(pontszam); If (pontszam<0) or (pontszam>50) then WriteLn(' Ez nem lehetséges!') Else GotoXY(30,12); Case pontszam of 0..25: WriteLn('Elégtelen az osztályzat'); 26..30:Writeln('Elégséges az osztályzat'); 31..39:WriteLn('Közepes az osztályzat'); 40..45:WriteLn('Jó az osztályzat'); 46..50:WriteLn('Jeles az osztályzat'); End; ReadLn; End. Program prog_9_5; Uses Crt; var bemeno:integer; szam:integer; Procedure Beolvasas; Begin ReadLn(bemeno); Write('Kérem a bemenő értéket : '); WriteLn('A menu a következő:'); WriteLn('1: a beolvasott számot írja ki'); Writeln('2: az abszolut értékét írja ki'); Writeln('3: a négyzetét írja ki'); Writeln('4: az ellentettjét írja ki'); Repeat WriteLn('Válassz a menüpontok számaiból!'); ReadLn(szam);
69
Until (szam>=1) and (szam<=4) End; Procedure Menu; Begin GotoXY(20,10); Case szam of 1: Write('A beolvasott szám ',bemeno,' volt.'); 2: Write('A ',bemeno,' abszolut értéke: ',abs(bemeno)); 3: Write('A ',bemeno,' négyzete: ',sqr(bemeno)); 4: Write('A ',bemeno,' ellentettje: ',-bemeno); End; End; Begin Clrscr; Window(10,5,70,20); Beolvasas; Clrscr; Menu; Readln; End.
X.fejezet Program prog_10_8; Uses Crt; const maxn=100; Type vektor=array[1..maxn] of real; var n :integer; x,y :vektor; xy :real; Procedure Adatbeolvasas(var n:integer;var x,y:vektor); var i:integer; Begin Clrscr; WriteLn('Skalárszorzás':46); Write('A vektorok mérete:'); ReadLn(n); WriteLn('Az első vektor komponensei:'); For i:=1 to n do Begin Write(i:5,'='); ReadLn(x[i]); End; Writeln('A második vektor komponensei:'); For i:=1 to n do Begin
70
Write(i:5,'='); ReadLn(y[i]); End; End; Procedure Skalarszorzas(n:integer; x:vektor; y:vektor; var xy:real); var i:integer; Begin xy:=0; For i:=1 to n do xy:=xy+x[i]*y[i]; End; Procedure Kiiras(xy:real); Begin WriteLn('A két vektor skalárszorzata:',xy:8:2); ReadLn; End; Begin Adatbeolvasas(n,x,y); Skalarszorzas(n,x,y,xy); Kiiras(xy); End. Program prog_10_10; Uses Crt; const kezdet=1990; veg=1997; Type ruhapenz=array[kezdet..veg] of integer; var Gabor,Eva:ruhapenz; ev:word; Procedure Feltoltes(ev:word;var Gabor,Eva:ruhapenz); Begin Clrscr; For ev:=kezdet to veg do Begin Write(ev,': Gábor ruhapénze: ');ReadLn(Gabor[ev]); Write(ev,': Éva ruhapénze : ');ReadLn(Eva[ev]); End; End; Procedure Elkoltott(var ev:word;Gabor,Eva:ruhapenz); Begin Repeat Write('Kérem az évet, amire kíváncsi vagy: ');ReadLn(ev); Until ((ev>=1990) and (ev<=1997)); While ev<>0 Do Begin WriteLn('Gábor ruhapénze ebben az évben: ',Gabor[ev]);
71
WriteLn('Éva ruhapénze ebben az évben: ',Eva[ev]); WriteLn('Együtt költöttek: ',Gabor[ev]+Eva[ev]); WriteLn('Akarsz másik évet is? Ha igen gépeld be! '); Write('Ha nem, akkor írj 0- t!'); ReadLn(ev); End; End; Begin Feltoltes(ev,Gabor,Eva); Elkoltott(ev,Gabor,Eva); End. Program prog_10_11; Uses Crt; const max=100; Type vektor=array[1..max] of boolean; var szabad:vektor; lepes,i:word; Procedure Kezdet(var szabad:vektor); Begin Clrscr; For i:=1 to max do szabad[i]:=false; {Kezdetben minden cella zárva van} End; Procedure Jatek(lepes:word;var szabad:vektor); Begin {A börtönőr játéka} For lepes:=1 to max do Begin i:=lepes; While i<=max do Begin szabad[i]:=not szabad[i]; i:=i+lepes; End; End; End; Procedure Szerencsesek(szabad:vektor); Begin WriteLn('A szabaduló rabok cellasorszámai:'); For i:=1 to max do Begin If szabad[i] Then Begin Write(i:5); End; End;
72
End; Begin Kezdet(szabad); Jatek(lepes,szabad); Szerencsesek(szabad); ReadLn; End. XI.fejezet Program prog_11_2; Uses crt; const maxn=10; maxm=10; Type tabla=array[1..maxn,1..maxm] of byte; var tablazat:tabla; sor,oszlop:byte; Procedure Beolvas(var sor,oszlop:byte;var tablazat:tabla); var i,j:byte; Begin Clrscr; WriteLn(' Táblázat feltöltése elemekkel’); Repeat Write('A táblázat sorainak száma:');ReadLn(sor); Until ((sor>=2) and (sor<=maxn)); Repeat Write('A táblázat oszlopainak száma:');ReadLn(oszlop); Until ((oszlop>=2) and (oszlop<=maxm)); Randomize; Begin for i:=1 to sor do for j:=1 to oszlop do Begin tablazat[i,j]:=round(random(2)); End; End; End; Procedure Kiir(sor,oszlop:byte;tablazat:tabla); var i,j:byte; Begin for i:=1 to sor do Begin WriteLn; for j:=1 to oszlop do Begin
73
Write(' ');Write(tablazat[i,j]:3); End; End; WriteLn; End; Begin Beolvas(sor,oszlop,tablazat); Kiir(sor,oszlop,tablazat); ReadLn; End. Program prog_11_8; uses crt; const maxn=10; maxm=10; Type tabla=array[1..maxn,1..maxm] of byte; var tabla1,tabla2,tablaosszeg:tabla; sor,oszlop:byte; Procedure Beolvas(var sor,oszlop:byte;var tabla1,tabla2:tabla); var i,j:byte; Begin Clrscr; Writeln(' A táblázatok feltöltése elemekkel'); WriteLn;WriteLn; Repeat Write('A táblázatok sorainak száma:');ReadLn(sor); Until ((sor>=2) and (sor<=maxn)); Repeat Write('A táblázatok oszlopainak száma:');ReadLn(oszlop); Until ((oszlop>=2) and (oszlop<=maxm)); Randomize; Begin for i:=1 to sor do for j:=1 to oszlop do Begin tabla1[i,j]:=random(10); tabla2[i,j]:=random(10); End; End; End; Procedure Osszead(sor,oszlop:byte;tabla1,tabla2:tabla;var tablaosszeg:tabla); var i,j:byte; Begin for i:=1 to sor do for j:=1 to oszlop do Begin tablaosszeg[i,j]:=tabla1[i,j]+tabla2[i,j];
74
End; End; Procedure Tablakiir(t:tabla); var i,j:byte; Begin for i:=1 to sor do Begin WriteLn; for j:=1 to oszlop do Begin Write(t[i,j]:4); End; End; End; Begin Beolvas(sor,oszlop,tabla1,tabla2); Osszead(sor,oszlop,tabla1,tabla2,tablaosszeg); WriteLn(' Az egyik tábla:'); Tablakiir(tabla1); WriteLn; WriteLn(' A másik tábla:'); Tablakiir(tabla2); WriteLn; WriteLn(' Az összegtáblázat:'); Tablakiir(tablaosszeg); ReadLn; End. Program prog_11_9; Uses Crt; const maxn=50; Type tanulo = record nev:string[30]; szulev: integer; End; tomb=array[1..maxn] of tanulo; var tanulok:tomb; n: byte; Procedure Beolvas(var n:byte;var tanulok:tomb); var i:byte; Begin Clrscr; Repeat Write('A tanulók száma: '); ReadLn(n); Until (n>=1) and (n<=maxn); for i:=1 to n do
75
Begin Write(' ',i,'. Név : '); ReadLn(tanulok[i].nev); Write(' Születési év: '); ReadLn(tanulok[i].szulev); End; End; Procedure Kiir(n:byte;tanulok:tomb); var i:byte; Begin Clrscr; WriteLn(' Név Születési év'); WriteLn(' **********************************'); for i:=1 to n do WriteLn(tanulok[i].nev:20,' ',tanulok[i].szulev:5); End; Begin Beolvas(n,tanulok); Kiir(n,tanulok); ReadLn; End. Program prog_11_10; Uses Crt; const maxn=50; Type iro = record nev:string[20]; cim:string[30]; kiev: integer; End; tomb=array[1..maxn] of iro; var irok:tomb; n: byte; Procedure Beolvas(var n:byte;var irok:tomb); var i:byte; Begin Clrscr; Repeat Write('Az írók száma: '); ReadLn(n); Until (n>=1) and (n<=maxn); for i:=1 to n do Begin Write('A(z) ',i,'. író neve : '); ReadLn(irok[i].nev); Write('Művének címe : '); ReadLn(irok[i].cim); Write('A kiadás éve : '); ReadLn(irok[i].kiev); End; End;
76
Procedure Kiir(n:byte;irok:tomb); var i:byte; Begin Clrscr; WriteLn(' Név Műcím Kiadás éve'); WriteLn(' ***************************************************'); for i:=1 to n do WriteLn(irok[i].nev:20,irok[i].cim:20,irok[i].kiev:10); End; Begin Beolvas(n,irok); Kiir(n,irok); ReadLn; End. XII.fejezet Program prog_12_7; Uses Crt,Graph; const ut='c:\tp\bgi'; var gd,gm,r,x,y,n,d,lehet:integer; Procedure Nyit(var gd,gm:integer); Begin Detectgraph(gd,gm); Initgraph(gd,gm,ut); End; Procedure Zar; Begin Closegraph; Restorecrtmode; End; Procedure Beolvas(var n,r,d:integer); Begin Clrscr; Repeat Write('Add meg a kezdőkör sugarát: ');ReadLn(r); Until (r>0) and (r<240); Repeat Write('Mennyivel növekedjen a sugár: ');ReadLn(d); Until (d>0) and (d<240-r); lehet:=(240-r) div d; Repeat Write('Hány kört szeretnél látni: ');ReadLn(n);
77
Until (n>=1) and (n
78
SetColor(2); SetTextStyle(1,0,4); OutTextXY(260,1,'Négyszögek'); Trapez(50,150,100,50,160,50,180,150); SetTextStyle(1,0,1); OutTextXY(85,100,'Trapéz'); Trapez(250,150,300,50,350,50,400,150); OutTextXY(280,100,'Sz.trapéz'); Trapez(480,150,480,50,550,50,620,150); OutTextXY(505,100,'D.trapéz'); Trapez(50,400,100,300,250,300,200,400); OutTextXY(74,350,'Paralelogramma'); Rectangle(300,400,450,300); OutTextXY(340,350,'Téglalap'); Rectangle(500,400,600,300); OutTextXY(520,350,'Négyzet'); OutTextXY(520,450,'Nagy Péter'); ReadLn; Zar; End. Program prog_12_22; Uses Crt,Graph; const ut='c:\tp\bgi'; var gd,gm,r,x,y,n,d:integer; Procedure Nyit(var gd,gm:integer); Begin Detectgraph(gd,gm); Initgraph(gd,gm,ut); End; Procedure Zar; Begin Closegraph; Restorecrtmode; End; Procedure Fold; Begin SetLineStyle(0,0,3); SetColor(Brown); Circle(320,240,20); FloodFill(322,238,brown); SetTextStyle(1,0,1); SetColor(White); OutTextXY(550,350,'F”ld'); SetLineStyle(0,0,2); Line(320,240,545,350); End;
79
Procedure Foldpalya; Begin SetLineStyle(0,0,1); SetColor(White); Circle(320,240,150); End; Procedure Hold; Begin SetLineStyle(0,0,2); SetColor(yellow); Circle(470,240,10); FloodFill(472,238,yellow); SetTextStyle(1,0,1); SetColor(White); OutTextXY(550,250,'Hold'); SetLineStyle(0,0,2); Line(470,240,550,250); End; Begin Nyit(gd,gm); Fold; Foldpalya; Hold; ReadLn; End. Program prog_12_26; Uses Crt,Graph; const maxn=640; maxm=480; ut='c:\tp\bgi'; Type tomb=array[1..20] of integer; var gd,gm,n,i,j,a,b:integer; x,y:tomb; Procedure Nyit(var gd,gm:integer); Begin DetectGraph(gd,gm); InitGraph(gd,gm,ut); End; Procedure Zar; Begin CloseGraph; RestoreCrtMode; End;
80
Procedure Tengelyek; var i,sv:integer; Begin SetColor(Black); line(0,maxm div 2,maxn,maxm div 2); SetTextStyle(1,0,1); OutTextXY(620,240,'X'); line(maxn div 2,0,maxn div 2,maxm); SetTextStyle(1,0,1); OutTextXY(300,5,'Y'); i:=320; j:=240; sv:=10; while sv<=maxn do Begin line(i+sv,maxm div 2-4,i+sv,maxm div 2+4); line(i-sv,maxm div 2-4,i-sv,maxm div 2+4); sv:=sv+10; End; sv:=0; while sv<=maxm do Begin line(maxn div 2-4,i+sv,maxn div 2+4,i+sv); line(maxn div 2-4,i-sv,maxn div 2+4,i-sv); sv:=sv+10; End; End; Procedure Beolvas; Begin WriteLn('Az elsőfokú függvény általános alakja: Y=A*X+B'); WriteLn; Write('Kérem A értékét: '); ReadLn(A); Write('Kérem B értékét: '); ReadLn(B); End; Procedure Adatok; Begin For i:=1 to 10 do Begin x[i]:=i*10; y[i]:=A*x[i]+B*10; End; End; Procedure Rajzol; var sx,sy,mp,x1,x2:integer; Begin sx:=320; sy:=240; SetColor(2); mp:=sy-10*B;
81
circle(sx,mp,2); For i:=1 to 10 do Begin SetColor(2); circle(sx+x[i],sy-y[i],2); End; For i:=1 to 10 do Begin SetColor(2); x[i]:=-i*10; y[i]:=A*x[i]+B*10; circle(sx+x[i],sy-y[i],2); End; SetColor(Blue); x1:=-100;x2:=100; line(sx-100,sy-A*x1-B*10,sx+100,sy-A*x2-B*10); SetColor(Red); OutTextXY(20,20,'A függvény képe'); End; Begin Beolvas; Adatok; Nyit(gd,gm); Bar(1,1,640,480); Tengelyek; Rajzol; ReadLn; Zar; End. XIII. fejezet Program prog_13_4; Uses Crt,Graph; const ut='c:\tp\bgi'; var a,b,n,c,d,p,q,x1,x2,y1,y2:integer; gd,gm:integer; Procedure beolvas; Begin WriteLn('Kérem a szakasz végpontjainak koordinátáit: '); WriteLn; Write('x1= ');ReadLn(x1); Write('y1= ');Readln(y1); Write('x2= ');ReadLn(x2); Write('y2= ');ReadLn(y2); End;
82
Procedure Nyit; Begin DetectGraph(gd,gm); InitGraph(gd,gm,ut); End; Procedure Zar; Begin CloseGraph; RestoreCrtMode; End; Procedure Szamol; Begin a:=x2-x1; b:=y2-y1; if a>b then n:=a else n:=b; p:=n div 2; q:=n div 2; End; Procedure Rajzol; var i:integer; Begin if x1<x2 then c:=1 else if x1>x2 then c:=-1 else c:=0; if y1
y2 then d:=-1 else d:=0; for i:=1 to n do Begin putpixel(x1,y1,green); p:=p+a; if p>=n then Begin x1:=x1+c; p:=p-1; End; q:=q+b; if q>=n then Begin y1:=y1+d; q:=q-1; End; End; End; Begin Beolvas; Szamol; Nyit;
83
Rajzol; ReadLn; Zar; End. Program prog_13_9; Uses Crt,Graph; var a,b,r:integer; Procedure Nyit; var gm,gd:integer; Begin DetectGraph(gd,gm); InitGraph(gd,gm,'c:\tp\bgi'); End; Procedure Zar; Begin CloseGraph; end; Procedure Tengelyek; Begin line(0,240,640,240); line(320,0,320,480); SetTextStyle(0,0,2); OutTextXY(300,10,'Y'); OutTextXY(610,255,'X'); OutTextXY(600,10,'I.'); OutTextXY(40,10,'II.'); OutTextXY(40,460,'III.'); OutTextXY(590,460,'IV.'); End; Procedure Rajzol1(r:integer); var x,y:integer; Begin a:=320;b:=240; x:=0; y:=r; while y>0 do Begin putpixel(x+a,-y+b,2); if (x+1)*(x+1)+y*y
84
end; end; Procedure Rajzol2(r:integer); var x,y:integer; Begin a:=320;b:=240; x:=0; y:=r; while y>0 do Begin putpixel(-x+a,-y+b,4); if (x+1)*(x+1)+y*y0 do Begin putpixel(-x+a,y+b,1); if (x+1)*(x+1)+y*y0 do Begin putpixel(x+a,y+b,14);
85
if (x+1)*(x+1)+y*y
86
WriteLn;WriteLn; Repeat Write('Hány db szám átlagát szeretnéd számolni: ');ReadLn(n); Until (n>0) and (n<=maxn); For i:=1 to n do Begin Write('A(z) ',i,'. szám: ');ReadLn(szamok[i]); End; End; Procedure Szamtanikozep(szamok:vektor;n:byte;var szkozep:real); var i:byte; Begin szkozep:=0; For i:=1 to n do Begin szkozep:=szkozep+szamok[i]; End; szkozep:=szkozep/n; End; Procedure Kiir(szkozep:real); var i:byte; Begin Write('A számok számtani közepe: ',szkozep:8:2); ReadLn; End; Begin Beolvas(n,szamok); Szamtanikozep(szamok,n,szkozep); Kiir(szkozep); End. Program prog_14_9; Uses Crt; const maxn=16; var n:byte; faktorialis:longint; Procedure Beolvas(var n:byte); var i:byte; Begin Clrscr; GotoXY(30,4); WriteLn('N faktoriális számítása'); WriteLn;WriteLn; Repeat GotoXY(10,8); Write('Hány faktoriálist szeretnél számolni: ');ReadLn(n);
87
Until (n>=0) and (n<=maxn); End; Procedure Faktorialisszamol(n:byte;var faktorialis:longint); var i:byte; Begin faktorialis:=1; For i:=1 to n do Begin faktorialis:=faktorialis*i; End; End; Procedure Kiir(faktorialis:longint); Begin GotoXY(10,12); Write('A(z) ',N,' faktoriális értéke: ',faktorialis); ReadLn; End; Begin Beolvas(n); Faktorialisszamol(n,faktorialis); Kiir(faktorialis); End. Program prog_14_10; Uses Crt; const maxn=50; Type vektor=array[1..maxn] of char; var betuk:vektor; n:byte; szoveg:string; Procedure Beolvas(var n:byte;var szamok:vektor); var i:byte; Begin Clrscr; GotoXY(30,4); WriteLn('N db betűből egy szó képzése'); WriteLn;WriteLn; Repeat WriteLn;WriteLn; Write('Hány db betűt szeretnél megadni: ');ReadLn(n); Until (n>0) and (n<=maxn); For i:=1 to n do Begin Write('A(z) ',i,'. betű: ');ReadLn(betuk[i]); End; End;
88
Procedure Osszefuzes(betuk:vektor;n:byte;var szoveg:string); var i:byte; Begin szoveg:=''; For i:=1 to n do Begin szoveg:=szoveg+betuk[i]; End; End; Procedure Kiir(szoveg:string); Begin GotoXY(10,20); Write('A betűkből összefűzött szöveg: ',szoveg); ReadLn; End; Begin Beolvas(n,betuk); Osszefuzes(betuk,n,szoveg); Kiir(szoveg); End. XV.fejezet Program prog_15_3; Uses crt; const maxn=50; Type tomb=array[1..maxn] of real; var n :byte; atlag:tomb; van:boolean; Procedure Beolvasas(var n:byte;var atlag:tomb); var i:byte; Begin Clrscr; WriteLn(' Az osztálynak van-e bukott tanulója?'); Writeln;Writeln; Repeat Write('Mennyi az osztálylétszám: ');ReadLn(n); Until (n>=1) and (n<=maxn); WriteLn('Kérem sorban az osztály tanulóinak átlagait!'); for i:=1 to n do Begin Repeat Write('A(z) ',i,'. tanuló átlaga:');ReadLn(atlag[i]);
89
Until (atlag[i]Y=1) and (atlag[i]<=5); End; End; Procedure Vizsgalat(n:byte;atlag:tomb;var van:boolean); var i:byte; Begin i:=1; while (i<=n) and (atlag[i]>=2) do i:=i+1; van:=(i<=n); End; Procedure Kiir(van:boolean); Begin if van then WriteLn('Az osztálynak van bukott tanulója.') else WriteLn('Az osztálynak nincs bukott tanulója.'); ReadLn; End; Begin Beolvasas(n,atlag); Vizsgalat(n,atlag,van); Kiir(van); End. Program prog_15_7; Uses Crt; const maxn=15; Type tomb=array[1..maxn] of integer; var szamok:tomb; van:boolean; szam:integer; Procedure Beolvasas(var szam:integer); var i:byte; Begin Clrscr; WriteLn(' Tagja-e a FIBONACCI sorozatnak?'); Writeln;Writeln; Repeat Write('Kérem a számot: ');ReadLn(szam); Until (szam>=2) and (szam<=1000); End; Procedure Vizsgalat(szam:integer;var szamok:tomb;var van:boolean); var i:byte; Begin
90
szamok[1]:=1; szamok[2]:=1; for i:=3 to maxn do Begin szamok[i]:=szamok[i-2]+szamok[i-1]; End; i:=1; while (i<=maxn) and (szamok[i]<>szam) do i:=i+1; van:=(i<=maxn); End; Procedure Kiir(van:boolean); Begin if van then WriteLn('Tagja a FIBONACCI sorozatnak.') else WriteLn('Nem tagja a FIBONACCI sorozatnak.'); ReadLn; End; Begin Beolvasas(szam); Vizsgalat(szam,szamok,van); Kiir(van); End. XVI.fejezet Program prog_16_1; Uses Crt; var szam,primo: integer; Begin Clrscr; primo:=2; Begin Write('Kérem a számot:'); ReadLn(szam); while (primo<=szam) and (szam mod primo<>0) do primo:=primo+1; End; WriteLn('A legkisebb prímosztó:',primo); ReadLn; End. XVII.fejezet
91
Program prog_17_6; Uses crt; const maxn=50; maxm=50; Type tabla=array[1..maxn,1..maxm] of integer; var szin:tabla; m,n :integer; van :boolean; s,o :integer; Procedure Beolvasas(var n,m:integer; var szin:tabla); var i,j:integer; Begin Clrscr; Repeat Write('Hány sor szék van a színházban? '); ReadLn(n); Until ((n>0) and (n<=maxn)); WriteLn; Repeat Write('Hány szék van egy sorban? '); ReadLn(m); Until ((m>0) and (m<=maxm)); WriteLn('Feltöltöm a táblát 0,1 elemekkel :'); WriteLn('0 ha foglalt, 1 ha szabad a szék!'); WriteLn('Enter ha folytathatom!'); ReadLn; Randomize; for i:=1 to n do for j:=1 to m do szin[i,j]:=random(2); End; Procedure szinhaz(n,m:integer; szin:tabla; var van:boolean; var s,o:integer); Begin s:=1; o:=1; While ((s<=n) and not((szin[s,o]=1) and (szin[s,o+1]=1))) do Begin o:=o+1; if o=m then Begin s:=s+1; o:=1; End; End; van:=(s<=n); End;
92
Procedure Kiiras(n,m:integer; szin:tabla; van:boolean; s,o:integer); var i,j:integer; Begin Clrscr; WriteLn(' Helyfoglalási táblázat'); WriteLn(' ======================'); WriteLn; WriteLn; for i:=1 to n do Begin for j:=1 to m do Write (' ',szin[i,j]:2); WriteLn; End; WriteLn; WriteLn; if van then Begin WriteLn(s,'-dik sor ',o,'-dik ‚s ',o+1,' széke szabad.'); End Else WriteLn('Nincs két egymás melletti szabad hely.'); Repeat until keypressed; End; Begin Beolvasas(n,m,szin); Szinhaz(n,m,szin,van,s,o); Kiiras(n,m,szin,van,s,o); End. XVIII.fejezet Program prog_18_4; Uses Crt; var szoveg: string; hossz,db:byte; Procedure Beolvas(var hossz:byte;var szoveg:string); Begin Clrscr; GotoXY(30,2); Writeln('"A (a)" betűk száma egy szövegben'); WriteLn; Repeat Write('Hány betűből áll a szöveg ? '); ReadLn(hossz); Until (hossz>=1) and (hossz<256); WriteLn;WriteLn;
93
Write('Kérem a szöveget! '); ReadLn(szoveg); End; Procedure Szamol(hossz:byte;szoveg:string;var db:byte); var i:byte; Begin db:=0; for i:=1 to hossz do Begin if (szoveg[i]='A') or (szoveg[i]='a') then db:=db+1 End; End; Procedure Kiir(db:byte); Begin WriteLn;WriteLn; WriteLn('A szövegben az "A(a)" betűk száma: ',db); ReadLn; End; Begin Beolvas(hossz,szoveg); Szamol(hossz,szoveg,db); Kiir(db); End. Program prog_18_8; Uses crt; var db:integer; Procedure Megszamolas(var db:integer); var i,x:longint; Begin Clrscr; db:=90; {Mert minden kétjegyű szám osztható önmagával.} for i:=100 to 999 do Begin x:=(trunc(i/10)); if (i mod x=0) then Begin db:=db+1; Write(i,' '); End; End; End; Procedure Kiiras(db:integer); Begin GotoXY(6,10);
94
WriteLn('A jó számok száma ',db); Repeat until keypressed; End; Begin Megszamolas(db); Kiiras(db); End.
XIX.fejezet Program prog_19_6; Uses crt; const maxn=100; Type homers=array[1..maxn] of integer; var n,i,max :integer; x :homers; Procedure Adatbeolvasas(var n:integer;var x:homers); var i:integer; Begin Clrscr; Repeat Write('Hány napon át mértük a hőmérsékleteket: ');ReadLn(n); Until (n>=7); WriteLn; WriteLn('Kérem a nyári napok hőmérsékleteit hétfővel kezdve!'); for i:=1 to n do Begin Write('Az ',i,'. nap hőmérséklete:'); ReadLn(x[i]); End; End; Procedure Legmelegebb_vasarnap(n:integer; x:homers;var max:integer); var i:integer; Begin max:=7; i:=14; Repeat if x[max]<x[i] then max:=i; i:=i+7; Until i>n End; Procedure Kiir(lv:integer; x:homers); Begin WriteLn('A legmelegebb vasárnap sorszáma:',max,'.'); WriteLn('Ekkor a hőmérséklet: ',x[max],' fok volt');
95
ReadLn; End; Begin Adatbeolvasas(n,x); Legmelegebb_vasarnap(n,x,max); Kiir(max,x); End.
XX.fejezet Program prog_20_3; Uses Crt; const maxn=30; Type mghtomb=array[1..maxn] of char; var szo:string; mgh:mghtomb; db,n:byte; Procedure Beolvasas(var n:byte; var szo:string); var i:byte; Begin Clrscr; GotoXY(30,2); WriteLn('Magánhangzók kiválogatása egy szóból'); WriteLn;WriteLn; Repeat Write('Hány betűből áll a szó, amelyben kiválogatjuk a magánhangzókat: '); ReadLn(n); Until (n>=1) and (n<=maxn); WriteLn;WriteLn; Write('Kérem a szót: '); ReadLn(szo); End; Procedure Kivalogat(n:byte;szo:string;var mgh:mghtomb;var db:byte); var i:byte; Begin db:=0; for i:=1 to n do Begin if (szo[i]='a') or (szo[i]='e') or (szo[i]='i') or (szo[i]='o') or (szo[i]='u') then Begin db:=db+1; mgh[db]:=szo[i]; End; End;
96
End; Procedure Kiir(db:byte;mgh:mghtomb); var i:byte; Begin WriteLn; WriteLn('A szóban előforduló magánhangzók száma: ',db); WriteLn; WriteLn('Ezek sorban:'); for i:=1 to db do write(' ',mgh[i],' '); ReadLn; End; Begin Beolvasas(n,szo); Kivalogat(n,szo,mgh,db); Kiir(db,mgh); End. Program prog_20_8; Uses Crt; Const maxn=50; Type Adat=Record nev:string; szho,sznap:byte; End; jonevek=array[1..maxn] of string; tomb=array[1..maxn] of adat; var ember:adat; n,db:byte; jonev:jonevek; emberek:tomb; Procedure Adatok(var n:byte;var ember:adat;var emberek:tomb); var i:byte; Begin Clrscr; GotoXY(23,2); WriteLn('A "Nyilas csillagképben" születtek'); GotoXY(1,4); repeat Write('Kérem az emberek számát: ');ReadLn(n); Until (n>0) and (n<=maxn); WriteLn('Kérem a vizsgálandó emberek adatait: '); for i:=1 to n do Begin Write('A(z) ',i,' ember neve: ');ReadLn(ember.nev); Repeat Write('Születési hónapja: ');ReadLn(ember.szho);
97
Until (ember.szho>0) and (ember.szho<=12); Repeat Write('Születésének napja: ');ReadLn(ember.sznap); Until (ember.sznap>0) and (ember.sznap<=31); emberek[i]:=ember; End; End; Procedure Vizsgalat(n:byte;ember:adat;emberek:tomb;var jonev:jonevek); var i:byte; Begin db:=0; For i:=1 to n do Begin if ((emberek[i].szho=11) and (emberek[i].sznap>=22)) or ((emberek[i].szho=12) and (emberek[i].sznap<22)) then Begin db:=db+1; jonev[db]:=emberek[i].nev; End; End; End; Procedure Kiir(db:byte;jonev:jonevek); var i:byte; Begin WriteLn('A Nyilas csillagképben születettek névsora:'); for i:=1 to db do WriteLn(jonev[i]); if jonev[i]='' then write('Senki sem született a "Nyilas csillagképben!'); End; Begin Adatok(n,ember,emberek); Vizsgalat(n,ember,emberek,db,jonev); Kiir(db,jonev); ReadLn; End. XXI. fejezet Program prog_21_2; Uses Crt; const maxn=20; Type szakkor=array[1..maxn] of string; var matek,fiz,uni:szakkor;
db:byte;var
98
nm,nf,k:byte; Procedure Adatok(var nm,nf:byte;var matek,fiz:szakkor); var i:byte; Begin Clrscr; WriteLn('Kérem a szakkörösök számát! '); Repeat Write('Matekosok: ');ReadLn(nm); Until (nm>0) and (nm<=maxn); WriteLn('Neveik: '); For i:=1 to nm do Begin Write('A(z) ',i,'. mszakkörös neve: '); ReadLn(matek[i]); End; Repeat Write('Fizikások száma: ');ReadLn(nf); Until (nf>0) and (nf<=maxn); For i:=1 to nf do Begin Write('A(z) ',i,'. fszakkörös neve: '); ReadLn(fiz[i]); End; End; Procedure Szakkorre_jarok(nm,nf:byte;matek,fiz:szakkor;var k:byte); var i,j:byte; Begin For i:=1 to nm do Begin uni[i]:=matek[i] End; k:=nm; for j:=1 to nf do Begin i:=1; While (i<=nm) and (fiz[j]<>matek[i]) do i:=i+1; if i>nm then Begin k:=k+1; uni[k]:=fiz[j]; End; End; End; Procedure Kiir(k:byte;uni:szakkor); var i:byte;
uni:szakkor;var
99
Begin WriteLn('Valamilyen szakkörre járók:'); for i:=1 to k do WriteLn(uni[i]); End; Begin Adatok(nm,nf,matek,fiz); Szakkorre_jarok(nm,nf,matek,fiz,uni,k); Kiir(k,uni); ReadLn; End. XXII. fejezet Program prog_22_2; Uses Crt; const maxn=20; Type szakkor=array[1..maxn] of string; var matek,fiz,metszet:szakkor; nm,nf,k:byte; Procedure Adatok(var nm,nf:byte;var matek,fiz:szakkor); var i:byte; Begin Clrscr; WriteLn('Kérem a szakkörösök számát! '); Repeat Write('Matekosok: ');ReadLn(nm); Until (nm>0) and (nm<=maxn); WriteLn('Neveik: '); For i:=1 to nm do Begin Write('A(z) ',i,'. mszakkörös neve: '); ReadLn(matek[i]); End; Repeat Write('Fizikások száma: ');ReadLn(nf); Until (nf>0) and (nf<=maxn); For i:=1 to nf do Begin Write('A(z) ',i,'. fszakkörös neve: '); ReadLn(fiz[i]); End; End; Procedure metszet:szakkor;var k:byte); var i,j:byte;
Szakkorre_jarok(nm,nf:byte;matek,fiz:szakkor;var
100
Begin k:=0; For i:=1 to nm do Begin j:=1; While (j<=nf) and ((matek[i])<>(fiz[j])) do j:=j+1; if j<=nf then Begin k:=k+1; metszet[k]:=matek[i]; End; End; End; Procedure Kiir(k:byte;uni:szakkor); var i:byte; Begin WriteLn('Mindkét szakkörre járók:'); for i:=1 to k do WriteLn(uni[i]); End; Begin Adatok(nm,nf,matek,fiz); Szakkorre_jarok(nm,nf,matek,fiz,metszet,k); Kiir(k,metszet); ReadLn; End. XXIII.fejezet Program prog_23_2; Uses Crt; Const maxn=50; Type str=array[1..maxn] of string; var nev:str; i,j,n:byte; Procedure Adatok(var n:byte;var nev:str); var i:byte; Begin Clrscr; GotoXY(20,4); Writeln('Nevek rendezése egyszerű cserés eljárással'); Writeln; Repeat Write('Kérem a nevek számát: '); ReadLn(n);
101
if n>maxn then WriteLn('Hibás, kisebb értéket kérek: maximum 50 név!'); if n<2 then WriteLn('A rendezéshez legalább két név kell!'); Until (n <=maxn) and (n>1); Writeln; WriteLn('Kérem a neveket (Ékezetek nélkül)!'); WriteLn; for i:=1 to n do Begin Write('A(z) ',i,'. név : '); ReadLn(nev[i]); End; End; Procedure Rendezes(n:byte;var nev:str); var i,j:byte; snev:string; Begin for i:=1 to n-1 do for j:=i+1 to n do if nev[i]>nev[j] then Begin snev:=nev[i]; nev[i]:=nev[j]; nev[j]:=snev; End; End; Procedure Kiir(nev:str); var i:byte; Begin WriteLn; WriteLn('A nevek rendezve:'); WriteLn; for i:=1 to n do WriteLn('A(z) ',i,'. név : ',nev[i]); ReadLn; End; Begin Adatok(n,nev); Rendezes(n,nev); Kiir(nev); End. XXIV.fejezet Program prog_24_2; Uses Crt; Const maxn=50;
102
Type str=array[1..maxn] of string; var nev:str; i,j,n,min:byte; Procedure Adatok(var n:byte;var nev:str); var i:byte; Begin Clrscr; GotoXY(20,4); WriteLn('Nevek rendezése minimum-kiválasztással'); WriteLn; Repeat Write('Kérem a nevek számát: '); ReadLn(n); if n>maxn then WriteLn('Hibás, kisebb értéket kérek: maximum 50 !'); if n<2 then WriteLn('A rendezéshez minimum két név kell!'); Until (n<= maxn) and (n>1); WriteLn; WriteLn; WriteLn('Kérem a neveket (Ékezetek nélkül)!'); WriteLn; for i:=1 to n do Begin Write('A(z) ',i,'. név : '); ReadLn(nev[i]); End; End; Procedure Rendezes(n:byte;var nev:str;var min:byte); var i,j:byte; snev:string; Begin for i:=1 to n do Begin min:=i; for j:=i+1 to n do Begin if nev[min]>nev[j] then min:=j; End; snev:=nev[min]; nev[min]:=nev[i]; nev[i]:=snev; End; End; Procedure Kiir(nev:str); var i:byte; Begin WriteLn; WriteLn('A nevek rendezve:'); WriteLn;
103
for i:=1 to n do WriteLn('A(z) ',i,'. név : ',nev[i]); ReadLn; End; Begin Adatok(n,nev); Rendezes(n,nev,min); Kiir(nev); End. XXV.fejezet Program prog_25_2; Uses Crt; Const maxn=50; Type str=array[1..maxn] of string; var nev:str; i,j,n:byte; Procedure Adatok(var n:byte;var nev:str); var i:byte; Begin Clrscr; GotoXY(20,4); WriteLn('Nevek rendezése buborékos eljárással'); WriteLn; Repeat Write('Kérem a nevek számát: '); ReadLn(n); if n>maxn then Writeln('Hibás, kisebb értéket kérek: maximum 50 !'); if n<2 then Writeln('A rendezéshez legalább két adat kell !'); Until (n<= maxn) and (n>1); WriteLn; WriteLn('Kérem a neveket (Ékezetek nélkül)!'); WriteLn; for i:=1 to n do Begin Write('A(z) ',i,'. név : '); ReadLn(nev[i]); End; End; Procedure Rendezes(n:byte;var nev:str); var i,j,cs:byte; snev:string; Begin i:=n; while i>1 do
104
Begin cs:=1; for j:=1 to i-1 do Begin if nev[j]>nev[j+1] then Begin snev:=nev[j]; nev[j]:=nev[j+1]; nev[j+1]:=snev; cs:=j; End; i:=cs; End; End; End; Procedure Kiir(nev:str); var i:byte; Begin WriteLn; WriteLn('A nevek rendezve:'); WriteLn; for i:=1 to n do WriteLn('A(z) ',i,'. név : ',nev[i]); ReadLn; End; Begin Adatok(n,nev); Rendezes(n,nev); Kiir(nev); End. XXVI.fejezet Program prog_26_2; Uses Crt; Const maxn=50; Type str=array[1..maxn] of string; var nev:str; i,j,n:byte; Procedure Adatok(var n:byte;var nev:str); var i:byte; Begin Clrscr; GotoXY(20,4); WriteLn('Nevek rendezése beillesztéses rendezés eljárással');
105
WriteLn; Repeat Write('Kérem a nevek számát: '); ReadLn(n); if n>maxn then Writeln('Hibás, kisebb értéket kérek: max 50 !'); if n<2 then Writeln('A rendezéshez legalább két adat szükséges!'); Until (n<=maxn) and (n>1); WriteLn; WriteLn('Kérem a neveket (Ékezetek nélkül)!'); WriteLn; for i:=1 to n do Begin Write('A(z) ',i,'. név : '); ReadLn(nev[i]); End; End; Procedure Rendezes(n:byte;var nev:str); var i,j:byte; seged:string; Begin for i:=2 to n do Begin j:=i-1; seged:=nev[i]; while (j>0) and (nev[j]>seged) do Begin nev[j+1]:=nev[j]; j:=j-1; End; nev[j+1]:=seged; End; End; Procedure Kiir(nev:str); var i:byte; Begin WriteLn; WriteLn('A nevek rendezve:'); WriteLn; for i:=1 to n do WriteLn('A(z) ',i,'. név : ',nev[i]); ReadLn; End; Begin Adatok(n,nev); Rendezes(n,nev); Kiir(nev); End.
106
XXVII.fejezet Program prog_27_1; Uses Crt; const maxn=30; Type tomb=array[1..maxn] of integer; var szamok,poz,nempoz:tomb; n,j,k:byte; Procedure Feltolt(var n:byte;var szamok:tomb); var i:byte; Begin Clrscr; GotoXY(35,4); Write('SZÉTVÁLOGATÁS'); GotoXY(1,8); Repeat Write('Hány eleme legyen a tömbünknek: ');ReadLn(n); Until (n>0) and (n<=maxn); For i:=1 to n do Begin Write('A(z) ',i,'. elem: '); ReadLn(szamok[i]); End; End; Procedure Szetvalogat(n:byte;szamok:tomb;var poz,nempoz:tomb;var j,k:byte); var i:byte; Begin j:=0; k:=0; for i:=1 to n do Begin if szamok[i]>0 then Begin j:=j+1; poz[j]:=szamok[i]; End Else Begin k:=k+1; nempoz[k]:=szamok[i]; End; End; End; Procedure Kiir(j,k:byte;poz,nempoz:tomb); var i:byte; Begin
107
WriteLn('A sorozat pozitív elemei:'); for i:=1 to j do Begin Write(' ',poz[i],' '); End; WriteLn; WriteLn; WriteLn('A sorozat nempozitív elemei: '); for i:=1 to k do Begin Write(' ',nempoz[i],' '); End; ReadLn; End; Begin Feltolt(n,szamok); Szetvalogat(n,szamok,poz,nempoz,j,k); Kiir(j,k,poz,nempoz); End. XXVIII.fejezet Program prog_28_1; Uses Crt; var a,b,c,d:byte; Begin Clrscr; for a:=1 to 9 do Begin for b:=0 to 9 do Begin for c:=1 to 9 do Begin for d:=0 to 9 do Begin if (sqr(10*a+b+10*c+d)=1000*a+100*b+10*c+d) then Write(a,b,c,d,' '); End; End; End; End; ReadLn; End. Program prog_28_2; Uses Crt; var a,b,c:byte;
108
Begin Clrscr; a:=7; for b:=0 to 9 do Begin for c:=0 to 9 do Begin if (sqr(a)-sqr(b)-sqr(c)=a-b-c) then Write(a,'',b,'',c,' '); End; End; ReadLn; End. Program prog_28_10; Uses Crt; var a,b,c:integer; Begin Clrscr; for a:=1 to 9 do Begin for b:=0 to 9 do Begin for c:=0 to 9 do Begin if (100*a+10*b+c)=(10*a+c)*7 then Write(a,b,c,' '); End; End; End; ReadLn; End. Program prog_28_11; Uses Crt; var a,b:integer; Begin Clrscr; for a:=1 to 30 do Begin for b:=1 to 30 do Begin if (a+b +a-b+a*b+a div b)=500 then Write(a,' ',b,' End; End; ReadLn; End.
');
109
Program prog_28_17; Uses Crt; var n:integer; Begin Clrscr; for n:=1 to 30 do Begin if ((n-2)*180+(180-((n-2)*180 div n)))=1560 then Write(n); End; ReadLn; End. XXIX.fejezet Program prog_29_4; Uses Crt; const maxn=20; Type tomb=array[1..maxn] of byte; var tizes,i:integer; mar:tomb; Procedure Beolvas(var tizes:integer); Begin Clrscr; GotoXY(20,2); Write('Tízes számrendszerbeli szám átalakítása kettesbe '); GotoXY(2,8); Repeat Write('Kérem az átalakítandó számot (0<=szam<32768): ');ReadLn(tizes); Until (tizes>=0) and (tizes<32768); End; Procedure Kettesbe(tizes:integer;var i:integer;var mar:tomb); Begin i:=1; Repeat mar[i]:=tizes mod 2; tizes:=tizes div 2; i:=i+1; Until tizes=0; End; Procedure Kiir(i:integer;maradek:tomb); var j:integer; Begin GotoXY(2,12); write('A(z) "',tizes,'" szám kettes számrendszerbeli alakja: ');
110
for j:=i-1 downto 1 do write(mar[j]); ReadLn; End; Begin Beolvas(tizes); Kettesbe(tizes,i,mar); Kiir(i,mar); End. Program prog_29_11; Uses Crt; const maxn=5; Type lottoszamok=array[1..maxn] of byte; var lotto:lottoszamok; Procedure Sorsol(var lotto:lottoszamok); var i:byte; Begin Clrscr; Randomize; for i:=1 to maxn do lotto[i]:=random(90)+1; End; Procedure Megvizsgal(var lotto:lottoszamok); var i,j:byte; Begin for i:=1 to maxn-1 do Begin for j:=i+1 to maxn do Begin if lotto[i]=lotto[j] then lotto[i]:=random(90)+1; End; End; End; Procedure Rendez(var lotto:lottoszamok); var i,j:byte; seged:byte; Begin for i:=1 to maxn-1 do Begin for j:=i+1 to maxn do Begin if lotto[i]>lotto[j] then Begin seged:=lotto[i]; lotto[i]:=lotto[j];
111
lotto[j]:=seged; End; End; End; End; Procedure Kiir(lotto:lottoszamok); var i:byte; Begin GotoXY(25,2); WriteLn('LOTTÓSORSOLÁS'); GotoXY(10,6); WriteLn('A nyertes lottószámok növekvő sorrendben:'); GotoXY(16,10); for i:=1 to maxn do Write(' ',lotto[i]); WriteLn;WriteLn;WriteLn; Write('Kilép: ENTER!':60); ReadLn; End; Begin Window(10,5,70,20);TextBackGround(Cyan);Clrscr; TextColor(Black); Sorsol(lotto); Megvizsgal(lotto); Rendez(lotto); Kiir(lotto); Window(1,1,80,25);TextBackGround(Black); TextColor(White);Clrscr; End. Program prog_29_16; Uses Crt,Graph; const ut='c:\tp\bgi'; var gd,gm,x,y:integer; dobas:byte; Procedure Nyit; Begin Detectgraph(gd,gm); Initgraph(gd,gm,ut); SetFillStyle(14,14); Bar(5,5,635,475); End; Procedure Zar; Begin Closegraph; Restorecrtmode;
112
End; Procedure Dobasok(var dobas:byte); Begin Clrscr; Randomize; Dobas:=random(6)+1; End; Procedure Negyzetrajzol; Begin SetLineStyle(0,0,3); SetFillStyle(1,Cyan); Bar(270,190,370,290); End; Procedure Egy; Begin Circle(320,240,10); End; Procedure Ketto; var i:byte; Begin x:=290; y:=210; for i:=1 to 2 do Begin circle(x,y,10); x:=x+60; y:=y+60; End; End; Procedure Harom; var i:byte; Begin x:=290; y:=210; for i:=1 to 2 do Begin circle(x,y,10); x:=x+60; y:=y+60; End; Circle(320,240,10); End; Procedure Negy; var i:byte; Begin x:=290; y:=210; for i:=1 to 2 do
113
Begin circle(x,y,10); x:=x+60; y:=y+60; End; x:=290; y:=270; for i:=1 to 2 do Begin Circle(x,y,10); x:=x+60; y:=y-60; End; End; Procedure Ot; var i:byte; Begin x:=290; y:=210; for i:=1 to 3 do Begin circle(x,y,10); x:=x+30; y:=y+30; End; x:= 290; y:=270; for i:=1 to 2 do Begin circle(x,y,10); x:=x+60; y:=y-60; End; End; Procedure Hat; var i:byte; Begin x:=290; y:=210; for i:=1 to 3 do Begin circle(x,y,10); y:=y+30; End; x:=350; y:=210; for i:=1 to 3 do Begin circle(x,y,10); y:=y+30; End; End; Procedure Kirak(dobas:byte); Begin case dobas of 1:egy;
114
2:ketto; 3:harom; 4:negy; 5:ot; 6:hat; End; SetTextStyle(0,0,2); OutTextXY(220,100,'A dobásom:'); SetTextStyle(0,0,1); OutTextXY(450,350,'Kilép: ENTER!'); ReadLn; End; Begin Dobasok(dobas); Nyit; Negyzetrajzol; SetColor(Blue); Kirak(dobas); Zar; End. Program prog_29_17; Uses Crt; var a,b,c:integer; Procedure Pitagoraszkeres(a,b,c:integer); Begin Clrscr; for a:=3 to 100 do Begin for b:=4 to 100 do Begin for c:=5 to 100 do Begin if (sqr(a)+sqr(b)=sqr(c)) and (a
115
Uses Crt; const maxn=30; Type szavak=array[1..maxn] of char; var szo:szavak; n:byte; Procedure Beolvasas(var n:byte; var szo:szavak); var i:byte; Begin Clrscr; GotoXY(6,6); Write('Hány betűből áll a szó, amelyet "Eszperente"-vé alakítunk: '); ReadLn(n); WriteLn('Kérem a szó betűit sorban: '); For i:=1 to n do ReadLn(szo[i]); End; Procedure E_recserel(n:byte;var szo:szavak); var i:byte; Begin for i:=1 to n do Begin if (szo[i]='a') or (szo[i]='i') or (szo[i]='o') or (szo[i]='u') then szo[i]:='e'; End; End; Procedure Kiir(n:byte;szo:szavak); var i:byte; Begin WriteLn; WriteLn('A szó "Eszperente" nyelven: '); WriteLn; for i:=1 to n do write(szo[i]); ReadLn; End; Begin Beolvasas(n,szo); E_recserel(n,szo); Kiir(n,szo); End.
116
Felhasznált irodalom
1. Szlávi Péter - Zsakó László: Módszeres programozás: Programozási tételek (Mikrológia 19) 2. Zsakó László: Programozási feladatok I. 3. Hanák D. Péter – Zsakó László: Programozási versenyfeladatok 4. Áts László: Turbo Pascal kezdőknek 5. Benkő Tiborné – Benkő László – Tóth Bertalan - Varga Balázs: Programozzunk Turbo Pascal nyelven! 6. Horváth Tibor – Kis Marietta: Turbo Pascal 7.0 Könyv és feladatgyűjtemény kezdőknek 7. Kasza János: Programozási ismeretek 12-16 éveseknek 8. Angster Erzsébet: Programozás tankönyv I. 9. Fazekas Sándor: Turbo Pascal iskolásoknak 10. Varga Tamás matematika versenyek összegyűjtött feladatai 11. A Tolna Megyei Tehetséggondozó Alapítvány matematika versenyfeladatai 12. ELTE TTK Informatika Tanszékcsoport által kiadott programozási feladatok
117
TARTALOMJEGYZÉK
KIÍRÓ utasítások ................................................................................................ 9 SZÁMOK ÉS MŰVELETEK............................................................................ 10 VÁLTOZÓK DEKLARÁLÁSA, ÉRTÉKÜK KIÍRATÁSA..................................... 12 ISMÉTLÉSEK SZERVEZÉSE ............................................................................................................ 19
A SZÁMLÁLÓS CIKLUS ............................................................................... 19 ELÁGAZÁSOK ................................................................................................. 22 P R O G R A M O Z Á S I T É T E L E K ........................................................ 33 AZ ELDÖNTÉS TÉTELE................................................................................ 35 RENDEZÉSEK................................................................................................. 47 MINTAALKALMAZÁSOK ............................................................................................................. 59
I.fejezet ............................................................................................................ 59 II.fejezet ........................................................................................................... 59 III.fejezet .......................................................................................................... 60 IV.fejezet ............................................................................................................................................... 61 V.fejezet................................................................................................................................................. 63 VI.fejezet ............................................................................................................................................... 64 VII.fejezet .............................................................................................................................................. 65 VIII. fejezet............................................................................................................................................ 66 IX.fejezet ............................................................................................................................................... 68 X.fejezet................................................................................................................................................. 69 XI.fejezet ............................................................................................................................................... 72 XII.fejezet .............................................................................................................................................. 76 XIII. fejezet............................................................................................................................................ 81 XIV.fejezet ............................................................................................................................................ 85 XV.fejezet.............................................................................................................................................. 88 XVI.fejezet ............................................................................................................................................ 90 XVII.fejezet ........................................................................................................................................... 90 XVIII.fejezet.......................................................................................................................................... 92 XIX.fejezet ............................................................................................................................................ 94 XX.fejezet.............................................................................................................................................. 95 XXII. fejezet .......................................................................................................................................... 99 XXIII.fejezet........................................................................................................................................ 100 XXIV.fejezet........................................................................................................................................ 101 XXV.fejezet......................................................................................................................................... 103 XXVI.fejezet........................................................................................................................................ 104 XXVII.fejezet ...................................................................................................................................... 106 XXVIII.fejezet..................................................................................................................................... 107 XXIX.fejezet........................................................................................................................................ 109
TARTALOMJEGYZÉK ................................................................................... 117
118