A DjVu fájl le is töltheto: basic_feladatok_tukreben_ocr.djvu vagy megtekintheto a nyers szöveg.
MAJOR ZOLTÁN VALOVICS ISTVÁN
A BASIC
feladatok tükrében
(Párbeszéd a számítógéppel)
TANKÖNYVKIADÓ, 1986
A könyv szerzői:
DR. MAJOR ZOLTÁN
egyetemi adjunktus
DR. VALOVICS ISTVÁN
gyakorlógimnáziumi tanár
Bírálók:
DR. HÁMORI MIKLÓS
kandidátus
LŐCS GYULA
okleveles alkalmazott
matematikus
Rajzolta:
SAJDIK FERENC
ISBN 963 17 8837 7
Szüleinknek
Előszó
Ezt a könyvet mindazoknak szánjuk, akik a BASIC programozási nyelvvel
szeretnének megismerkedni. Ennek érdekében az egyes fejezetek didaktikusan
épülnek egymásra, a fejezeteken belül pedig különböző feladatok megoldásával
mélyíthetők el az ismeretek. Ezek alapos elsajátítását megkönnyíti, és igazából
lehetővé csak az teszi, ha a tanultakat számítógépen ki is próbáljuk. Javasoljuk
tehát az Olvasónak, hogy
- a könyv anyagának feldolgozását a személyi számítógéphez ülve kezdje el,
- próbálja ki az összes bemutatott példaprogramot,
- oldja meg az összes feladatot,
- oldjon meg minél több gyakorlatot.
Könyvünk olvasásához nem szükséges különösebb matematikai előismeret.
Ebből a szempontból az ötödik fejezet jelenthet kisebb nehézséget, de az abban
leírtak teljes megértését a további fejezetek nem igénylik.
A könyvben levő sok feladat és gyakorlat, amelyek mindegyikének a megol-
dását is közöljük, lehetővé teszi, hogy tanári kézikönyvként is használható
legyen. A feladatok megoldásai közvetlenül az egyes fejezetek végén, a gyakor-
latoké a tizenkettedik fejezetben vannak összegyűjtve. A gyakorlatoknál gon-
doljuk végig, hogy az adott fejezetben tanult ismeretek közül melyek segítségé-
vel tudjuk megoldani, vagy egyszerűbben megoldani azokat. Ismétlésnek is
nagyon jó, ha minden egyes új ismerethez megkeressük azokat a gyakorlatokat
- a korábbi fejezetekből is -, amelyek megoldását lerövidíthetjük, tökéletesíthet-
jük segítségükkel.
Ne keseredjünk azonban el, ha az általunk készített megoldás a közölttől
különbözik, hiszen az is csak egy a lehetségesek közül. A feladatok és a gyakor-
latok között olyanokkal is találkozunk, amelyeket többféleképpen is meg lehet
oldani. Minden esetben tanulmányozzuk át a közölt programokat is, de saját
programunk helyessége ellenőrzésének legbiztosabb módja, ha a számítógépen
lefuttatjuk, és valóban azt csinálja, amire gondoltunk.
A programozási nyelvek annyiban hasonlítanak a természetes nyelvekhez,
hogy szavakból és jelekből állnak, amelyeket nyelvtani szabályok szerint kap-
csolunk össze. Alapvető különbség, hogy a programozási nyelvek szókincse
lényegesen kisebb, és a helyesírási, formai szabályok jóval szigorúbbak. A szá-
mítógép csak akkor érti meg az általunk közölni kívánt információt, ha azt
egyértelműen, a szabályoknak megfelelően írjuk le. Ha egy programot a formai
szabályokat betartva, azaz szintaktikusan helyesen megírunk, ez még nem
jelenti azt, hogy jó is lesz. Fontos hogy logikailag, azaz szemantikusan is helyes
legyen.
Tartsuk szem előtt a következő jótanácsot!
Ha egy program nem úgy működik, ahogy azt szerettük volna, akkor ne a
gépben, hanem programunkban keressük a hibát! Ennek megtalálása sokszor
nem könnyű feladat. Ahhoz, hogy gyorsan és pontosan tudjunk programot írni,
illetve a hibákat hamar megtaláljuk, nagyon sok gyakorlásra van szükség.
A könyvben a HT iskolaszámítógép BASIC nyelvének alapjait mutatjuk be.
Más személyi számítógépek által ismert BASIC nyelvek több-kevesebb eltérést
mutatnak, amelyek a gépekhez adott leírások alapján könnyen kideríthetőek,
és ezeknek megfelelően a könyv tartalma, feladat- és gyakorlatanyaga ezekhez
a számítógépekhez is jól használható.
Itt szeretnénk köszönetet mondani:
- Hámori Miklósnak és Lőcs Gyulának, könyvünk lektorainak, a kézirat
alapos áttanulmányozásáért és értékes javaslataikért;
- a Híradástechnikai Szövetkezetnek, hogy lehetővé tette a programlisták ki-
nyomtatását;
- Bazsó Júliának és Gyapjas Ferencnek a kézirattal kapcsolatos hasznos észre-
vételeikért;
- és mindazoknak, akik a könyv megjelenését elősegítették.
Ezek után még egy jótanács az Olvasónak:
A PROGRAMOZÁSHOZ SEM VEZET KIRÁLYI ÚT!
Bevezető
Vegyünk egy mély lélegzetet, és lapozzunk!
Amit itt látunk,
az egy BASIC nyelven írt program.
10 REM K I S E R O F I B U R A
20 CLS
30 PRINT@285," *****"; : PRINT@285+4*64," *****";
40 PRINT@285+64,"* A A *"; : PRINT@285+2*64,"* T *";
50 PRINT@285+3*64,"* V *";
60 GOTO 60
Önmagában nem sokat ér!
Számunkra érdekessé, felhasználhatóvá az-
után válhat, ha megismerkedünk a személyi
számítógépek legfontosabb részeivel és azok
használatával:
A képernyő:
A számítógépnek küldött és a számítógép által adott
üzenetek képszerű megjelenítésére szolgál.
A kazettás tárolóegység:
Ez lehet például egy hagyományos kazettás magne-
tofon, amelynek segítségével a programokat és az
adatokat tudjuk magnószalagon tárolni.
A központi egység és a billentyűzet:
A központi egység értelmezi és feldolgozza a billen-
tyűzetről, a kazettás tárolóegységről, ... érkező uta-
sításokat, parancsokat és jeleket.
A hajlékony mágneslemez egység:
Ugyanarra használják, mint a kazettás tárolóegysé-
get, de annál gyorsabb és megbízhatóbb.
A sornyomtató:
Az információk papíron való rögzítésére szolgál.
A képernyő és a billentyűzet segítségével a számítógéppel párbeszédet foly-
tathatunk.
PÁR
BESZÉD
10
Ezt akkor tudjuk elkezdeni, ha a számí-
tógépet üzembe helyezzük. A H T 10822
iskola-számítógép képernyőjén a bal fel-
ső sarokban megjelenik a
READY?_
felirat. Válaszul a NEWLINE billen-
tyűt kell lenyomni. Ezt követően a képer-
nyő bal alsó sarkában az alábbi választ
kapjuk:
READY
) _
Ez mutatja, hogy a számítógép munkára
kész.
Most rajtunk a sor!
A billentyűzeten begépelhetünk valamilyen üzenetet, ami egyidejűleg a képernyőn
is megjelenik. Ahhoz azonban, hogy ez az információ a számítógép központi
egységéhez is eljusson, le kell nyomni a NEWLINE billentyűt. A továbbiakban
ennek a billentyűnek a lenyomását NL -lel jelöljük.
11
Miután az üzenetet elküldtük, két eset lehetséges:
- Az üzenet a számítógép számára értelmes, ekkor a központi egység értelmezi
azt és végrehajtja.
- Az üzenetünk értelmetlen a számítógép számára, ekkor annak feldolgozásakor
a központi egység hibajelzéssel (ERROR) válaszol. A hibás üzenet újragépelés-
sel vagy javítással (szerkesztéssel, EDIT) módosítható. A további munkát
lényegesen megkönnyíti, ha a gépkönyvekből a szerkesztésre vonatkozó részt
minél alaposabban áttanulmányozzuk.
Jól jegyezzük meg: a számítógép nem szereti a ,,zöldségeket"!
Mindkét eset után a képernyőn ismét megjelenik a
READY
) _
felirat, és ismét üzenetet gépelhetünk be.
12
Most már visszatérhetünk a 8. oldalon levő programhoz! Ha azt soronként
begépeljük (ne feledkezzünk meg a sor végén a NL -ről), és a számítógépnek a
RUN NL parancsot adjuk, akkor ennek hatására a képernyőn könyvünk kísérő
figurája jelenik meg.
A továbbiakban a BASIC nyelvű programozás alap-
jait mutatjuk be.
13
Első fejezet
ISMERKEDJÜNK A KÉPERNYŐVEL!
SET, RESET, CLS, GOTO
Adjuk a számítógépnek a következő parancsot!
SET(63,23) NL
Ennek hatására a képernyő 63. oszlopának 23. sorában megjelenik egy grafikus
pont. Grafikus pontnak, vagy egyszerűen csak pontnak fogjuk nevezni az egy
SET utasítással vagy paranccsal megjeleníthető képelemet.
Ha azt akarjuk, hogy a képernyőn csak ez az egy pont világítson, akkor
gépeljük be a következő programsorokat:
1.1 példaprogram
10 CLS
20 SET(63,23)
30 GOTO 30
Ha most a RUN NL paranccsal elindítjuk ezt a programot, akkor a 10-es
sorban levő CLS utasítás hatására minden törlődik a képernyőről, a 20-as
sorban levő utasítás ismét kigyújtja az előző pontot. A 30-as sorban levő
GOTO 30 utasítással pedig elérhetjük azt, hogy a képernyőn a ponton kívül
semmi sem jelenik meg. A gép ezt a sort hajtja végre mindaddig ismétlődve, amíg
a programot a BREAK billentyűvel vagy a RESET gombbal le nem állítjuk,
vagy a gépet ki nem kapcsoljuk. Eközben nem ír ki semmit a képernyőre, tehát
csak a 20-as sorban kigyújtott pont világít.
Ha az 1.1 példaprogramban a 30-as sor helyett a következőket írjuk:
30 GOTO 10
azaz azt az utasítást adjuk a gépnek, hogy menjen vissza a 10-es sorra, akkor
a számítógép állandóan ismételni fogja az egymást követő 10-es, 20-as és 30-as
sorban levő utasításokat: törli a képernyőt, kigyújtja az adott pontot Ezzel
tehát elértük, hogy az adott pont villog.
Egy pontot úgy is lehet villogtatni, hogy nem az egész képernyőt töröljük,
14
hanem csak a kigyújtott pontot a RESET utasítással. Az ennek megfelelő
program pedig:
1.2 példaprogram
10 CLS
20 SET(63,23)
30 RESET(63,23)
40 GOTO 20
vagy ami ezzel egyenértékű:
1.3 példaprogram
10 CLS
29 SET(63,23) : RESET(63,23) :
GOTO 20
Lehetőség van tehát arra, hogy az utasításokat egymástól kettősponttal elvá-
lasztva egy programsorba, illetve az egy programsorhoz tartozó utasításokat
több sorba írjuk.
Megjegyzés: Ha már egy programra nincs szükségünk, akkor az új program begépelése előtt adjuk
ki a NEW NL parancsot!
1.1 feladat: Készítsünk olyan programot, amelyik egy négyzet négy csúcsában és a középpontjában
kigyújt egy-egy pontot!
1.2 feladat: Módosítsuk az előző programot úgy, hogy a négyzet csúcsaiban levő pontok villogjanak,
a középpont pedig folyamatosan világítson!
1.3 feladat: Készítsünk olyan programot, amelyik kilenc középpontosan szimmetrikusan elhelyezke-
dő pontot gyújt ki a képernyőn! (Az összes pont ne legyen egy egyenesen!)
Értékadás
A SET és a RESET utasítások felhasználásával mozgatni is tudjuk a ponto-
kat a képernyőn.
1.4 példaprogram
10 CLS
20 X=2
30 SET(X,23) : RESET(X,23) :
X=X+1 :
GOTO 30
15
A példaprogramban az X változó segítségével a kigyújtandó pontok első koor-
dinátáját lehet változtatni. A 20-as sorban levő X=2 és a 30-as sorban levő
X = X + l utasítások ún. értékadó utasítások. Ezek pontos alakja:
LET X = 2 (azaz legyen az X változó értéke 2),
LET X=X+1 (azaz legyen az X változó értéke az eddigi értékénél 1-gyel
nagyobb.) Ügyeljünk arra, hogy az itt szereplő egyenlőségjel jelentése az, hogy
a bal oldalán álló változó értéke legyen egyenlő a jobb oldal értékével. A bal
oldalon mindig csak egy változó állhat, a jobb oldalon viszont szerepelhet vagy
egy változó, vagy egy állandó, vagy egy Összetett kifejezés is. Az értékadó
utasításokat a LET kulcsszó nélkül is felismeri a gép, így ez el is hagyható.
A GOTO 30 utasítás hatására ismét a 30-as sor elejére kerül a program
végrehajtása, tehát kigyullad a 23. sorban a következő pont, majd el is alszik,
és így tovább.
1.5 példaprogram
16 CLS
20 X=12B : Y=1
30 SET(X,23) : RESET(X,23) :
X=X-Y :
GOTO 30
Ez a példaprogram az 1.4 példaprogramhoz hasonlóan egy pontot mozgat, de
az ottanihoz képest ellenkező irányban.
Egyúttal az is látható, hogy lehetőség
van változók értékeinek összeadásá-
ra, kivonására. A 30-as sorban az
X = X-Y utasítás hatására az X vál-
tozó értékéből a számítógép kivonja
az Y változó értékét, és az X változó
új értéke a kivonás eredménye lesz,
tehát korábbi értékét elveszti. ( Y ér-
téke nem változik.) Előfordulhat,
hogy az X változó előző tartalmát
szeretnénk megőrizni. Ezt például
úgy tehetjük meg, hogy a fenti utasí-
tás elé beírjuk a Z = X értékadó uta-
sítást, és ekkor a Z változó megőrzi
a. kívánt értéket.
Megjegyzés: A programokban a változók nevét kötelező betűvel kezdeni, a betű után írhatunk
betűket vagy számokat is. Példák változónevekre:
A, B2, FLAG, VEG, ERTEK
A számítógép a változókat a nevük első két karaktere alapján különbözteti meg egymástól. Így
például a SZAM és a SZEG nevek a gép számára ugyanazt a változót azonosítják.
A változónevek nem tartalmazhatják a BASIC kulcsszavakat. Ennek megfelelően a következő
változónevek hibásak:
KELET a LET kulcsszó miatt,
TOL a TO kulcsszó miatt,
UGRUNK a RUN kulcsszó miatt.
1.4 feladat: Írjunk olyan programot, amelyik egyszerre két pontot mozgat, az egyiket vízszintesen,
a másikat függőlegesen!
Megjegyzés: A program futásánál előforduló FC Error hibaüzenettel kapcsolatban lásd a Grafikus
képernyőméret című részt!
14.5 feladat: Próbáljuk meg az 1.4 példaprogramot úgy módosítani, hogy a pont folyamatosan fusson
végig a 23. soron!
Grafikus képernyőméret
Az 1.4 és az 1.5 példaprogramok lefuttatáskor úgy fejeződnek be, hogy a
számítógép hibajelzést ad. Ez nem véletlen, hiszen a képernyő méretei végesek,
így a SET és a RESET utasítások argumentumába (a zárójelek közé) nem
kerülhetnek akármilyen számok. A SET(X, Y), illetőleg a RESET(X, Y) utasí-
tás csak akkor értelmes üzenet a gép számára, ha az X és az Y változók értékére
teljesülnek a következő feltételek:
B≤X≤127 és 0≤Y≤47
Ez azt jelenti, hogy a képernyőn 48 sorban soronként 128 pontot, vagyis
összesen 6144 grafikus pontot tudunk megjeleníteni.
Megjegyzés: A 128 oszlop és a 48 sor számozása
nullától kezdődik, ennek megfelelően a képernyő
legfelső sora a nulladik sor, a bal szélső oszlopa
a nulladik oszlop.
Több lehetőség is van arra, hogy az
előbb említett hibát elkerüljük. Ezekkel
a későbbiek során ismerkedünk majd
meg.
Parancs, utasítás, program, programsor
Az alcímben szereplő fogalmak mindegyikével találkoztunk már, most ponto-
sítsuk ezek jelentését.
A parancs a számítógép számára az az értelmes üzenet, amelyet a tartalmának
megfelelően azonnal végre is hajt. Például kigyűjt egy grafikus pontot
(SET(l2,l5) NL ), elindít egy programot (RUN NL ), letörli a képernyőt
(CLS NL ) stb.
Az utasítás olyan értelmes üzenet, amelyet a számítógép nem közvetlenül a
begépelés és az elküldés ( NL ) után hajt végre (hanem csak akkor, amikor a
program futása az adott utasításhoz ér) és javításig vagy törlésig tárol.
A programsor egy sorszámból (előjel nélküli egész szám) és egy vagy több
utasításból áll. A sorszám utáni utasítások több sorba is kerülhetnek (például
az 1.4 példaprogram 30-as sorában három sorba).
A program programsorokból áll. A könnyebb javítás érdekében célszerű a
programsorokat tízesével számozni. A számítógép ezeket növekvő sorszám
szerint hajtja végre, függetlenül attól, hogy azokat milyen sorrendben gépeltük
be. Ez alól idáig egy kivételt láttunk, amikor a GOTO kulcsszó után megadott
sorszámnak megfelelő programsornál folytatódik a program végrehajtása.
Az 1.4 példaprogram tehát 3 programsorból és 6 utasításból áll.
Megjegyzés: A könyvben szereplő összes utasítás parancsként is adható, ezért erre külön nem hívjuk
fel minden esetben a figyelmet.
Karakteres képernyőméret
A képernyőn 16 sorban (0, 1., 2., ..., 15.
sor) soronként 64 (0, 1., 2., ..., 63. ka-
rakter), összesen 1024 karakter jelenít-
hető meg. A megjeleníthető karaktere-
ket a könyv végén levő táblázatban lát-
hatjuk, ezekkel részletesebben a hetedik
fejezetben foglalkozunk.
PRINT, INPUT
A PRINT és az INPUT utasítások segítségével a program futása közben is
párbeszédet folytathatunk a számítógéppel.
Indítsuk el a következő programot!
1.6 példaprogram
10 CLS
20 PRINT"MELYIK PONT VILAGITSON ?"
30 PRINT"KEREM A KDDRDINATAHAT !"
40 INPUT x
50 INPUT Y
60 CLS :
SET(X,Y) :
GOTO 20
Ez az 1.1 példaprogram továbbfejlesztett változata. A PRINT utasítással kérdé-
seket, feliratokat, karaktereket írathatunk ki a képernyőre. A kiírandó karakte-
reket idézőjelek közé kell tenni. A 40-es sorban levő INPUT X utasítás hatására
egy kérdőjel jelenik meg a képernyőn. Miután az X változónak adandó értéket
begépeltük és elküldtük, kéri az Y változó értékét, és ha ezt is megadtuk, a
program futása folytatódik. A 40-es és az 50-es sorokban levő utasításokat
helyettesíthetjük a
40 INPUT X,Y
utasítással is. Ekkor a megjelenő kérdőjel után két, egymástól vesszővel elvá-
lasztott számot kell megadni. Amennyiben csak egy számot küldünk el, akkor
a képernyőn két kérdőjel jelenik meg, és a számítógép várja a második szám
megadását is. Ügyelni kell arra, hogy a begépelt számok a grafikus képernyőmé-
reteknek megfelelő határok közé essenek. Ha ez teljesül, akkor a megfelelő pont
kigyullad. A GOTO 20 utasítás eredményeképpen a számítógép annyiszor végzi
el az eddigieket, ahányszor kívánjuk, és minden alkalommal másik pont gyújt-
ható ki.
1.6 feladat: Írjunk olyan programot, amelyik megkérdezi négy pont koordinátáit, ezeket a pontokat
kigyújtja, majd kezdi elölről mindezt!
1.7 feladat: Módosítsuk az 1.6 példaprogramot úgy, hogy amikor újabb pontot akarunk kigyújtani,
akkor az előző pont továbbra is világítson! Mindig teljesíthető-c ez a feltétel?
Az utasítások begépelésekor a PRINT kulcsszó kérdőjellel (?) helyettesíthető,
azonban a program listázásakor már a PRINT alak jelenik meg. Az üres (lista
nélküli) PRINT utasítás a képernyőn egy soremelést eredményez. A PRINT
utasítással a változók értékeit is ki lehet íratni, de ebben az esetben a változók
nevét nem szabad idézőjelek közé tenni.
Futtassuk le és tanulmányozzuk a következő programot!
19
1.7 példaprogram
KIIRATASA
10 CLS
20 REM HAROM URES SOR KIIRATASA (SDREMELES)
30 PRINT : PRINT : PRINT
40 X=1 : Y=1
50 REM AZ X ES AZ Y VALTOZOK ERTEKEINEK
60 PRINT"X=";X,"Y=";Y
70 GOTO 70
Láthatjuk tehát, hogy egy PRINT utasítás listája több kiírandó elemet is
tartalmazhat. Ezeket vesszővel vagy pontosvesszővel kell elválasztani egymás-
tól. A pontosvessző hatására az X, illetve az Y változók tartalma közvetlenül az
egyenlőségjel után jelenik meg. A vessző hatásáról a következőt kell tudni:
A képernyő minden sora négy ún. nyomtatási zónára van osztva. Ezek a 0.,
16., 32. és a 48. karakterpozíción kezdődnek. Az 1.7 példaprogram futtatásakor
az "X= " felirat és az X változó értéke az első zónába, az "Y= " felirat és az
Y változó értéke pedig egy újabb zónába kerül. Ha a PRINT utasítás listájának
1.8 példaprogram
20
10 CLS
végére pontosvesszőt írunk, akkor a kö-
vetkező felirat az előző kiírás után, ha
vesszőt, akkor egy újabb nyomtatási zó-
nában, ha pedig a lista végére egyik
írásjel sem kerül, akkor egy újabb sor-
ban folytatódik.
Az,l.7 példaprogramban már hasz-
náltuk az áttekinthetőséget megnövelő
REM utasítást. Egy programsornak a
REM kulcsszó utáni részeit a gép nem
hajtja végre, így oda tetszőleges magya-
rázó szöveget, megjegyzést írhatunk.
A képernyőn kérdéseket az INPUT
utasítás segítségével is elhelyezhetünk,
amit az INPUT kulcsszó után idézője-
lek közé kell tenni:
20 INPUT"HANY CM MAGAS VAGY";C
30 CLS
40 PRINT C;"
CM MAGAS VAGY !"
1.8 feladat: Kati és Feri a következő játékot játsszák: A képernyőn megjelenő kérdésre Feri elfordul,
és Kati két számot üt be. Ezután a képernyőn minden törlődik, és a megadott koordinátákkal
rendelkező pont kigyullad. Feri visszafordul, és a képernyő bal felső sarkában kiíródó kérdésre:
"MELYIK PONT VILAGIT?", megpróbálja eltalálni a világító pont koordinátáit. Megad két
számot, majd ezután a számítógép képernyőt töröl, kiírja Kati számait és Feri számait.
Készítsük el az ennek megfelelő programot!
1.9 feladat: Hol a hiba?
10 CLS
20 SET(0,0) : 2=X : 3=Y
30 SET(X,11) ; SET(X,21) , X=X+2
40 GOTO 30
1.10 feladat: Hol a hiba?
10 CLS
20 SET (5,6) : s ET(5,7)
39 REZET(5,7) : GOTO 20
1.11 feladat: Hol a hiba?
10 CLS
20 INPUT X;Y
30 CLS : SET(X,Y)
40 GOTO 40
1.12 feladat: Hol a hiba?
10 CLS
20 PRINT
30 PRINT KERESD A HIBAT !
40 GOTO 50
1.13 feladat: Hol a hiba?
10 INPUT" A KOORDINATAK ?",X,Y
20 CLS : SET(X,Y)
30 GOTO 30
Gyakorlatok az első fejezet anyagához
1.1 gyakorlat: Készítsünk olyan programot, amelyik egy hatszög csúcsaiban helyez el pontokat és
minden második pontot villogtat!
1.2 gyakorlat: Rajzoltassunk ki a képernyőre egy háromszöget!
1.3 gyakorlat: Készítsünk olyan programot, amelyik bekéri egy pont koordinátáit, majd innen
kezdve kirajzol egy háromszöget!
1.4 gyakorlat: Készítsünk olyan programot, amelyik a képernyőn a lehető legtöbb pontot kigyújtja,
de SET utasításból csak egyet használhatunk!
1.5 gyakorlat: Készítsünk olyan programot, amelyik kigyűjt 15 darab pontot a képernyőn, majd
fordított sorrendben kioltja azokat, és elölről kezdi mindezt! Találjunk ki minél érdekesebb
elrendezéseket!
21
1.6 gyakorlat: Írassunk ki a képernyőre egy tetszőleges betűt grafikus pontokból!
1.7 gyakorlat: Írjunk olyan programot, amelyik bekéri két pont koordinátáit, majd ezeket felváltva
villogtatja! Próbáljuk elérni, hogy a pontok kigyújtása, illetve lekapcsolása minél jobban érzékel-
hető legyen!
1.8 gyakorlat: Készítsünk olyan programot, amelyik egyszerre két függőleges és két vízszintes
egyenes mindegyike mentén mozgat egy-egy pontot!
1.9 gyakorlat: Mozgassunk egy-egy pontot a képernyőn átlós irányban villogtatva, illetve folyama-
tosan!
1.10 gyakorlat: Készítsünk olyan programot, amelyik beolvassa egy pont koordinátáit, és ebből a
pontból vízszintesen és függőlegesen pontokat mozgat!
1.11 gyakorlat: Mozgassuk egy négyzet négy csúcsát átlós irányban a képernyőn!
1.12 gyakorlat: Mozgassunk két pontot egymással szemben a képernyő két szélétől!
1.13 gyakorlat: Fusson nyolc pont a képernyő közepétől a négy sarka és az oldalak felezőpontja felé!
1.14 gyakorlat: Írassuk ki a képernyő közepére azt, hogy "SZIA!"
1.15 gyakorlat: Helyezzük el a képernyő közepén a "VILLOG" feliratot, és villogtassuk is azt!
1.16 gyakorlat: Írassuk ki a képernyőre a lehető legtöbb csillagot!
1.17 gyakorlat: Írassunk ki a képernyőre "A" karakterekből álló nagy A betűt!
1.18 gyakorlat: A képernyő alján megjelenik egy vízszintes csík egyenlőségjelekből, majd ez felsza-
lad, és kezdődik az egész elölről.
Készítsük el az ennek megfelelő programot!
1.19 gyakorlat: "/"-jelek mozogjanak "átlós" irányban a képernyőn!
1.20 gyakorlat: Olvastassuk be három változó értékét, és írassuk ki az alábbi formában:
a) A = 5
B = 6
C = 7
b) A = 5 B = 6 C = 7
22
Az első fejezet feladatainak egy lehetséges megoldása
1.1 feladat
10 CLS
20 SET(54,19) : sET(74,19) : SET(54,29) : SET(74,29) : SET(64,24)
30 GOTO 30
1.2 feladat
10 CLS
20 SET(64,24)
30 SET(54,19) : SET(74,19) : SET(54,29) : SET(74,29)
40 RESET(54,19) : RESET(74,19) : RESET(54,29) : RESET(74,29)
50 GOTO 30
1.3 feladat
10 CLS
20 SET(48,16) : SET(54,19) : SET(74,19) : SET(80,16) :
SET(4a,32) : SET(54,29) : SET(74,29) : SET(80,32) :
SET(64,24)
30 GOTO 30
l.4 feladat
10 CLS
20 X=0 : Y=0
30 SET(X,23) : SET(50,Y) : RESET(X,23) : RESET(50,Y) :
X=X+3 : Y= Y+1 :
GOTO 30
1.5 feladat
10 CLS
20 X=1
30 SET(X,23) : RESET(X-1,23) :
X=X+1 :
GOTO 30
1.6 feladat
10 CLS
20 PRINT"KEREM A NEGY PONT KOORDINATAIT !"
30 INPUT X1,Y1 : INPUT X2,Y2 : INPUT X3,Y3 : INPUT X4,Y4
40 CLS
50 SET(X1,Y1) : SET(X2,Y2) : SET(X3,Y3) : SET(X4,Y4)
60 GOTO 20
1.7 feladat
10 CLS
20 PRINT"MELYIK PONT VILAGITSON ?"
30 PRINT"KEREM A KOORDINATAKAT !"
40 INPUT X,Y :
SET(X,Y) :
GOTO 40
Ha a már kigyújtott pontok között van olyan, amelyik abban a sorban van, amelyikben a
következő INPUT utasítás kérdőjele megjelenik, akkor ez kialszik.
23
1.8 feladat
10 CLS
2O PRINT" F E R I , FORDULJ EL !" : PRINT
3O PRINT"KEREM K A T I SZAHAIT !" : INPUT X,Y
4O CLS
5O PRINT"MELYIK PONT VILAGIT ?" =
SET(X,Y) :
INPUT A,B
60 CLS
7O PRINT"K A T I PONTJA :";X;Y 3 PRINT"F E R I PONTJA :";A;B
80 SET(X,Y) : SET(A,B)
90 GOTO 90
1.9 feladat
A 29-as sorban az értékadó utasítások helyesen:
X=2:Y=3
Az utasításokat a 30-as sorban kettősponttal kell egymástól elválasztani.
1.10 feladat
A SET kulcsszó betűi között nem szabad üres helyet hagyni.
A 30-as sorban a hibás REZET helyett a RESET kulcsszót kell írni.
1.11 feladat
A 20-as sor INPUT utasításában a lístaelemeket vesszővel kell egymástól elválasztani.
1.12 feladat '
A PRINT utasítással kiírandó karaktereket idézőjelek közé kell tenni.
A GOTO utasítás nem létező sorszámra mutat.
1.13 feladat
Az INPUT utasítás végrehajtásakor mindenképpen megjelenik egy kérdőjel.
Az INPUT utasítást követő idézőjelek közé tett kérdés után mindig pontosvesszőt kell írni.
24
Második fejezet
HOGYAN MARADJUNK A KÉPERNYŐN?!
IF-THEN-ELSE
Módosítsuk az 1.6 példaprogramot
úgy, hogy segítségével a képernyőnek
csak az egyik felén lehessen pontokat
kigyújtani (például azokat, amelyek f.
X koordinátájára az X 4 64 feltétel tel-
jesül)!
A módosított program alakja:
2.1 példaprogram
10 CLS
20 PRINT"MELYIK PONT VILAGITSÜN ?"
30 PRINT"KEREM A KDORDINATAKAT É"
40 INPUT X
50 IF X>63 THEN PRINT"X NAGYOBB 63 !" : GOTO 20 ELSE INPUT Y
60 CLS :
SET(X,Y) :
GOTO 20
Az 1.6 példaprogramnak az 50-es sorát módosítottuk az ún. feltételes utasítás
alkalmazásával.
Ha (IF) ismerjük az ebben szereplő kulcsszavak jelentését, akkor (THEN)
máris könnyebb az utasítás értelmezése, különben (ELSE) pedig tanulmányoz-
zuk figyelmesen ezt a mondatot! Ennek megfelelően, ha az 50-es sorban az
X ) 63 feltétel teljesül, akkor a THEN kulcsszó utáni két utasítás hajtódik végre.
25
Ha pedig a feltétel nem teljesül, akkor beolvashatjuk a kigyújtandó pont másik
koordinátáját is, és ezután a program végrehajtása a 60-as sorral folytatódik.
Vizsgáljuk meg a most megismert feltételes utasítás működését a következő
két példaprogramban is!
2.2 példaprogram
10 CLS
20 PRINT"HANY EVES VAGY 7" :
INPUT E
30 IF EPIB THEN PRINT"TEHAT MAR ELMULTAL 18 EVES !"
ELSE PRINT"VAGYIS 19 EVESNEL FIATALABB VAGY !"
PRINT"SOH SIKERT A HONYV TOVABBI DLVASASAHDZ !"
40 PRINT :
2.3 példaprogram
10 CLS
20 PRINT"AZ ELSO KOORDINATA "; : INPUT X
30 PRINT"A MASODIK KOORDINATA "; : INPUT Y
40 IF Y<20 THEN GOTO 30
ELSE SET(X,Y) : GOTO 20
50 PRINT"MELYIH PONT VILAGIT ?"
2.1 feladat: A 2.3 példaprogram futtatásakor milyen esetben jelenik meg a "MELYIK PONT
VILAGIT?" felirat?
Az első fejezet több programját kiegészíthetjük feltételes utasítással.
Az 1.4 példaprogram egy pontot mozgat. Ha az ottani 30-as sorból a RESET
utasítást elhagyjuk, akkor a program egy vízszintes vonalat rajzol. Hasonló
módon rajzol-a következő példaprogramunk egy vonalat.
2,4 példaprogram
10 CLS
20 X=0
30 SET(X,42)
40 X=X+1
50 REM A KODRDINATA VIZSGALATA
60 IF X<127 THEN GDTO 30 ELSE PRINT"A VONAL HUZASAT BEFEJEZTEM
A program lefuttatása után örömmel tapasztalhatjuk, hogy a 60-as sorban levő
utasítással sikerült elkerülni azt, hogy futása hibajelzéssel fejeződjön be.
Az ebben a példaprogramban is használt feltételes utasításnak az általános
alakja a következő:
IF feltétel THEN 1.utasításcsoport ELSE 2.utasításcsoport.
Amennyiben a feltétel teljesül (IGAZ), azaz a 42. sorban még nem hagytuk el
a 127. pontot, akkor a 30-as sorra térve újabb pont kigyújtására van lehetőség
(l.utasításcsoport), ha pedig a feltétel nem teljesül (HAMIS), akkor a program
kiír egy feliratot a képernyőre (2.utasításcsoport).
Ha valamelyik utasításcsoport a
GOTO sorszám
utasításból áll, akkor a GOTO kulcsszó el is hagyható. Például a 2.4 példaprog-
ram 60-as sorában a THEN GOTO 30 helyett THEN 30 is írható.
2.2 feladat: Készítsünk olyan programot, amelyik 12 darab egymástól egyenlő távol levő szakaszt
rajzol meg!
A most megismert utasítás feltétel része egy állítás, amelyben szerepelhetnek
például a különböző relációjelek ( 4 , ) , = ). Ügyeljünk arra, hogy itt az egyenlő-
ségjelnek más értelme van, mint az értékadó utasításban!
A feltételes utasításban az
ELSE 2.utasításcsoport
rész el is maradhat. Ekkor, ha a feltétel HAMIS, a program a feltételes utasítást
követő sorral folytatódik. Ennek megfelelően a 2.4 példaprogramot a követke-
zőképpen lehet módosítani:
2.5 példaprogram
10 CLS
20 X=IZJ
312! IF Xs';'127 THEN SET(X,42) : X=X+1 : GOTO 30
40 PRINT"A VONAL HUZASAT BEFEJEZTEM l"
2.3 feladat: Módosítsuk az 1.8 feladatot, Kati és Feri játékát úgy, hogy a számítógép döntse el azt,
hogy Feri eltalálta-e a világító pont koordinátáit! Ha nem, akkor újból próbálkozhat, ha igen,
akkor ő helyezhet el egy pontot, s ezt Katinak kell kitalálnia.
27
Ciklusok
Érdemes összehasonlítani a 2.4 és 2.5 példaprogramok folyamatábráját!
Látható, hogy mindkét folyamatábra ugyanazokból az utasításokból áll.
Ezek között vannak olyanok, amelyeket egy futás során csak egyszer, másokat
többször is végrehajt a számítógép. Mindkét program képernyőtörléssel és az
X =0 kezdőérték beállításával kezdődik. A 2.4 példaprogram ezután kigyújtja
a 42. sor 0. pontját, majd eggyel megnöveli az X változó értékét és megvizsgálja,
hogy az l27-nél kisebb-e. Ha igen, akkor kigyújtja a 42. sorban a következő
pontot, ismét eggyel növeli az X változó értékét, és következik a vizsgálat.
Mindaddig ismétli ezt, amíg a 127. pont nem kerülne kigyújtásra. Ekkor a vonal
húzása befejeződik, amit egy felirat megjelenése is jelez a képernyőn, és a
28
program leáll. A 2.5 példaprogram látszólag ugyanezt végzi, de azzal a különb-
séggel, hogy ebben a vizsgálat, illetve a pont kigyújtása és a koordinátaérték
növelésének sorrendje fel van cserélve. A két megoldás közötti különbség jól
érzékelhető, ha az X=0 helyett az X= 127 utasítást írjuk. Ekkor a 2.4 példa-
program a (l27,42) koordinátájú pontot kigyújtja, míg a 2.5 példaprogram
egyetlen egyet sem gyújt ki.
A bemutatott folyamatábrákban a CLS és a PRINT utasítások közötti részt
ciklusnak nevezzük. Az utasítások ilyen csoportjának általában az a jellemzője,
hogy
- egy változó, az ún. ciklusváltozó értékét a ciklus elején beállítjuk, ez a ciklus-
változó kezdőértéke;
- ennek értékét a cikluson belül adott értékkel (lépésköz) növeljük vagy csök-
kentjük mindaddig, amíg egy adott értéket (a ciklusváltozó végértéke) el nem
er;
- minden lépésben a cikluson belül további utasítások is végrehajtódhatnak.
A ciklusszervezéssel tehát lehetőség van arra, hogy utasításokat annyiszor
hajtassunk végre, ahányszor azt kívánjuk, anélkül, hogy annyiszor le is írnánk
azokat.
Az eddigi programokban már találkozhattunk olyan programrészekkel, ame-
lyek a ciklusok különböző fajtáiból mutattak be néhányat. Már az első fejezet
elején, az 1.1 példaprogramban szerepel a
30 GOTO 30
programsor. Tulajdonképpen ez is egy ciklus, méghozzá egy ún. végtelen ciklus.
(Ott azt is elmondtuk, hogy ezt a BREAK
billentyű vagy a RESET gomb segítségével
szakíthatjuk meg. A végtelen ciklus futását a
SHIFT és a @ billentyűk egyidejű lenyo-
mása is megszakítja.) Az említett utasítást az
1.1 példaprogramban azért használtuk, hogy
a képernyőábránk szép legyen. Nem megfele-
lő, hibás programszervezés esetén azonban a
végtelen ciklusok sok bonyodalmat is okoz-
hatnak!
A 2.3 példaprogramban is a ciklusszervezés
egy fajtája szerepel. A 2B-40-es sorokban levő
utasításokat addig ismétli _a számítógép, amíg
új koordinátákat adunk meg. Ezt a végtelen
ciklust az előzőkhöz hasonlóan szakíthatjuk
meg. Ez a program akkor is leáll, ha nem
megfelelő adatokat adunk meg, és ekkor hi-
bajelzést is kapunk.
29
STOP, END, CONT
A számítógépen a BREAK billentyű lenyomásával szakíthatjuk meg a
program futását. Ekkor a képernyőn megjelenik a
Break in sorszám
üzenet annak a sornak a sorszámával, amelynek végrehajtása közben nyomtuk
le a BREAK billentyűt.
A program futása leáll akkor is, ha egy STOP vagy egy END utasításhoz ér.
Az első esetben a
Break in sorszám
READY
üzenet, a másodikban pedig csak a
READY
felirat jelenik meg a képernyőn. Ezekben az esetekben, ha a programot formai-
lag nem módosítjuk, akkor a futásának folytatását a CONT NL paranccsal
érhetjük el. Ekkor a program az utoljára végrehajtott utasítást követő utasítás-
sal folytatódik.
Észrevehettük, hogyha a programban sehol sem helyezünk el STOP vagy
END utasítást, és nem tartalmaz végtelen ciklust, akkor a számítógép automati-
kusan úgy hajtja végre azt, mintha az utolsó sor után egy END utasítást
tartalmazó sor lenne.
Megjegyzés: A STOP és az END utasítások hatása és szerepe egyes számítógéptípusoknál és
programozási nyelvekben lényegesen különbözik!
FOR-TO-STEP-NEXT
Az 1.4, a 2.4 és a 2.5 példaprogramok vízszintesen rajzoltak egy pont mozga-
tásával vonalat. A következő példaprogramban egy új utasítás, a ciklusutasítás
segítségével ezúttal egy ferde helyzetű vonalat rajzoltathatunk a képernyőre.
2.6 példaprogram
10 CLS
20 FOR X=4 TO 42 STEP 2 : FEJE REM A CIKLUS
30 SET(X+X+X,X) : REM A CIKLUS MAGJA
40 NEXT X : REM EZ IS A CIKLUS FEJE
50 GOTO 50
30
A 20 -as és a 40 -es sor, illetve a köztük levő 30 -as sor jelenti a ciklusutasítást.
Az első kettő a ciklus feje, a köztük levő a ciklus magja. A ciklusmag utasításai
mindaddig végrehajtódnak, amíg a ciklusváltozó (X) kezdeti értéke a megfelelő
növelésekkel (lépésköz: 2) el nem éri a végső értékét (42). A lépésköz lehet
pozitív és negatív érték is. Amennyiben értéke éppen egy, akkor el is hagyható.
A negatív lépésköz például arra is felhasználható, hogy az átlót alulról felfelé
rajzoltassuk meg. Próbálkozzunk meg vele!
2.4 feladat: Oldjuk meg a 2.2 feladatot ciklusutasítás segítségével is!
Láthatjuk tehát, hogy a ciklusutasítás alkalmazásával az előzőkben megismert
ciklusszervezés egyszerűbbé válik. A ciklusutasítás elvégzi a ciklusváltozó mó-
dosítását és a vizsgálatot is. Jegyezzük azonban meg, hogy a ciklusutasításnál
a ciklus magja legalább egyszer mindig végrehajtódik, és csak utána következik
a vizsgálat. (Ez a 2.4 példaprogramban látott ciklusszervezésnek felel meg.)
Fontos, hogy jól megértsük a következő program működését!
2.7 példaprogram
10 CLS .
20 INPUT"KEZDOERTEK ";K
30 INPUT"VEGERTEK ";v
40 INPUT"LEPESKOZ ";L
50 FOR I=K TO V STEP L
60 PRINT I;
70 NEXT I
80 PRINT : PRINT" VEGE"
Futtassuk le ezt a programot a következő értékekkel is!
K=1, v=13, L=5;
K=1, V=-13, L=5;
K=10, v=1, L=1!
A ciklus magja tartalmazhat egy újabb ciklust is. Ebben az esetben beszélünk
külső és belső ciklusról, a ciklusok ilyen elrendezését pedig egymásba skatulyá-
zásnak nevezzük. Az egymásba skatulyázott ciklusokkal sok feladat egyszerűb-
ben és áttekinthetőbben oldható meg.
A ciklusváltozó értékét a cikluson belül megváltoztatni nem szabad! Ebből
következik, hogy az egymásba skatulyázott ciklusok ciklusváltozóinak külön-
bözőeknek kell lenniük. Egy ciklusutasításba csak a FOR utasításon keresztül
léphetünk be. Helyesen egymásba skatulyázott ciklusokra mutat példát a követ-
kező ábra: í
31
2.5 feladat: Oldjuk meg a 2.2 feladatot egymásba skatulyázott ciklusok segítségével!
Programjaink futtatásánál a képernyőn egymás után megjelenő információk
áttekinthetőségét, egymástól való jobb elkülöníthetőségét jelentősen megnövel-
hetjük például egy ciklusmag nélküli ún. üres ciklusutasítással is, amelynek
segítségével egy pontot vagy egy feliratot adott ideig jeleníthetünk meg a képer-
nyőn, vagy késleltethetjük a megjelenésüket.
2.6 feladat: Készítsünk programot, amelyik egy pontot villogtat 3 másodperces időközökkel!
Rövid összegzés
Próbáljuk megfejteni, hogyan működik a következő program. Ha sikerült,
futtassuk le, és ellenőrizzük, hogy helyesen gondoltuk-e!
2.8 példaprogram
10 CLS
20 PRINT"MELYIK SORBA RAJZOLJAK VONALAT ?" : INPUT Y
30 IF Y<=-1 THEN 50
40 IF Y<48 THEN 60
50 PRINT"IRGUM-BURGUM ! JO ADATOKAT KEREK !!!" :
GOTO 20
60 CLS
70 FOR X=0 TO 127
80 SET(X,Y)
90 NEXT X
1oo FOR X=127 TO 0 STEP -1
110 RESET(X,Y)
120 NEXT X
130 PRINT"HOGY TETSZETT ?"
140 STOP
32
Itt felismerhettük csaknem az összes eddig tanult utasítást. Észrevehettük, ezt
a programot nem lehet becsapni úgy, hogy a lehetségesnél nagyobb vagy kisebb
koordinátákat adunk meg. (Lásd 30 -50 -es sorok!)
2.7 feladat: Készítsünk olyan programot, amelyik egy függőleges szakaszt balról jobbra mozgat! Az
egymást követő helyzetekben a szakasz rajzolása felváltva alulról, illetve felülről történjen.
2.8 feladat: Írjunk olyan programot, amelyik 20 darab vízszintes szakaszt rajzol! Az egymás után
következő szakaszok növekvő hosszúságúak legyenek, és a növekmény legyen állandó.
2.9 feladat: Készítsünk olyan programot, amelyik egy átlós helyzetű szakaszt mozgat a képernyőn!
2.10 feladat: Hol a hiba?
10 CLS : v=o
zm 8ET(óO,Y)
30
IF Y(47 THEN Y=Y+1 GOTO 20 ELSE 40
40 GOTO 40
2.11 feladat: Hol a hiba?
10
20
30
40
50
INPUT X
IF XF10 THEN GOTO 40 : PRINT "X NAGYOBB TIZNEL"
PRINT "X NEM NAGYOBB TIZNEL"
FOR H=1000 TO 0 STEP -2 : NEXT K
GOTO 10
2.12 feladat: Hol a hiba?
10
20
30
40
50
CLS
FOR x=2 TO 42 STEP 2
SET(X+X,X)
NEXT
sora se
2.13 feladat: Hol a hiba?
10
20
30
40
50
60
CLS
FOR v=4e TO 0 STEP -1
FOR X=128 TO 0 STEP -1
SET(X,Y)
NEXT x,v
GOTO 40
33
Gyakorlatok a második fejezet anyagához
2.1 gyakorlat:Készítsünk olyan programot, amelyik kirajzol a képernyőre 5 függőleges vonalat,
majd törli a képernyőt, és kirajzol 5 vízszintes vonalat! Ezután ezt ismételgeti állandóan.
2.2 gyakorlat:Rajzoltassunk 15 olyan vonalat, amelyek 36 részre bontják a képernyőt!
2.3 gyakorlat:Írjunk olyan programot, amelyik 10 darab vízszintes vonalat rajzol, de úgy, hogy
mindegyik elé egy számot is ír!
2.4 gyakorlat:Írjunk olyan programot, amelyik a képernyő négy sarka és az oldalak felezőpontja
felé vonalakat húz a képernyő középpontjából!
2.5 gyakorlat:Húzassunk vízszintes vonalakat egymás alá felváltva mínusz jelekből (-), illetve
grafikus pontokból! _,
2.6 gyakorlat:Rajzoltassunk keretet a képernyőre grafikus pontokból!
2.7 gyakorlat:Rajzoltassunk keretet a képernyőre csillag karakterekből (t)!
2.8 gyakorlat:Írassuk ki a képernyőre a megfelelő sorba a következő feliratokat: "ELSO SOR",
"HARMADIK SOR", "OTODIK SOR", majd grafikus pontokkal húzassuk is alá őket!
2.9 gyakorlat:Készítsünk programot, amelyik koordinátatengelyeket rajzol!
2.10 gyakorlat:Egy program olvassa be egy pont koordinátáit és ábrázolja azt egy koordináta-rend-
szerben!
2.11 gyakorlat:Írassuk ki a képernyőre a "MASSALHANGZOK" szót, majd grafikus pontokkal
takarjuk le a magánhangzóit!
2.12 gyakorlat:Írassunk ki három számot a képernyőre, és mindegyiket keretezzük be csillag karak-
terekkel (*)!
2.13 gyakorlat:Írassunk ki a képernyő első sorába 5 darab pluszjelet (+ ), ezután ezek 3 másodper-
cenként mindig egy sorral lejjebb jelenjenek meg!
2.14 gyakorlat:A képernyőn megjelenik az l-es szám, majd három másodpercenként mindig az
előzőnél eggyel nagyobb szám. Készítsük el ezt a programot!
2.15 gyakorlat:Készítsünk programot, amelyik metronómként működik!
2.16 gyakorlat:Készítsünk programot, amelyik óraként működik!
2.17 gyakorlat:Írjunk olyan programot, amelyik bekéri a pontos időt, majd mutatja az idő múlását!
2.18 gyakorlat:5 másodpercenként szaladjon fel egy vízszintes vonal a képernyőn!
2.19 gyakorlat:Írjunk olyan programot, amelyik 3 vízszintes vonalat rajzol egyszerre úgy, hogy a
k. másodpercben 2k darab újabb grafikus pontot gyújt ki vonalanként!
2.20 gyakorlat:Írassunk ki a képernyőre 50 darab csillagot, de csak egy PRINT utasítást, és abban
is csak egy csillag karaktert használhatunk!
2.21 gyakorlat:Kati és Feri a következő játékot játsszák: Kati gondol egy számot, és azt közli a
számítógéppel. Feri megpróbálja a számot kitalálni, és a gép ellenőrzi a próbálgatásait.
Készítsük el a megfelelő programot!
2.22 gyakorlat:Gyújtsunk ki valahány pontot a képernyőn, majd ezután mindig kétszer annyit, mint
az előző lépésben! Mindig új pontokat kell kigyújtani, és az a cél, hogy végül a lehető legtöbb
pont világítson!
2.23 gyakorlat:lmitáljunk hóesést a képernyőre!
2.24 gyakorlat:lnduljon egy pont a képernyő egy kívánt pontjából, és egy biliárdgolyó nyomvonalát
rajzolja fel!
34
A második fejezet feladatainak egy lehetséges megoldása
2.1 feladat
Ha a programot a RUN NL paranccsal futtatjuk, akkor az 50-es sorra sohasem kerül a
végrehajtás. Lehetőség van azonban arra, hogy a RUN50 NL vagy a GOTO50 NL parancsok
valamelyikével indítsuk a program futását. Ekkor a képernyőn rögtön megjelenik a kívánt
felirat. (Természetesen akkor is megjelenik, ha kilistázzuk a programot.)
2.2 feladat
10 CLS
20 X=25 : Y=6
30 SET(X,Y)
40 X=X+1
50 IF X=50 THEN 60 ELSE 30
60 X=25 : Y=Y+3
70 IF Y=42 THEN 80 ELSE 30
80 GOTO 80
2.3 feladat
19 CLS
29 J=1
39 PRINT"F E R I , FORDULJ EL 9" : PRINT :
PRINT"KEREM K A T I SZAMAIT 9"
49 INPUT x,v
59 CLS
e9 PRINT"MELYIK PoNT VILAGIT ?"
79 SET(X,Y)
80 INPUT 9,9
99 IF X=A THEN 199 ELSE 59
199 IF Y=B THEN PRINT"UGYES VAGY!" : I=0 ELSE 59
119 I=I+1 = IF I(300 THEN 119
129 IF J=2 THEN 19 ELSE J=2
139 CLS
149 PRINT"K A T I , FORDULJ EL 2" : PRINT :
PRINT"KEREM F E R I szAnAIT 3" '
159 INPUT x,v
159 GOT0 59
2.4 feladat
10 CLS
20 X=25
30 FOR Y=6 T0 39 STEP 3
40 SET(X,Y)
50 NEXT Y
60 X=X+1
70 IF X(51 THEN 30
80 GOT0 80
2.5 feladat
10 CLS
20 FOR X=25 T0 50
30 FOR Y=6 TO 39 STEP 3
49 SET(X,Y)
59 NEXT v
e9 NEXT x
70 GOTO 70
2.6 feladat
10 CLS
20 SET(24,24)
30 FOR 1=1 TO 1000 . NEXT 1
40 RESET(24,24)
50 FOR 1=1 T0 1000 . NEXT 1
60 sora 20
A villogtatáshoz szükséges időváráshoz felhasználható a 2.3 feladat megoldásánál már látott,
feltételes utasítást használó módszer is.
2.7 feladat
10 CLS
20 I=1
30 FOR X=30 TO 90 STEP 5
40 IF I=2 THEN 130
50 FOR Y=25 TO 5 STEP -1
60 RESET(X-5,Y)
70 NEXT Y
80 FOR Y=5 TO 25
90 SET(X,Y)
100 NEXT Y
110 I=2
120 sora 200
130 FOR v=s TO 25
140 RESET(X-5,Y)
150 NEXT v
160 FOR v=2s TO 5 STEP -1
170 SET(X,Y)
180 NEXT v
190 1=1
200 NEXT X
210 GOTO 210
2.8 feladat
10 CLS
20 I=10
30 FOR Y=3 TO 41 STEP 2
40 FOR X=9 TO I+9
50 SET(X,Y)
60 NEXT x
70 I=I+s
80 NEXT Y
90 GOTO 90
2.9 feladat
10 CLS
20 I=0
30 IF I=0 THEN 70
40 FOR X=0 TO 10
50 RESET(I-5+X+X,X+20)
60 NEXT X
70 FOR X=0 TO 10
80 SET(I+X+X,X+20)
90 NEXT X
100 I=I+5
110 IF I4105 THEN 30 ELSE 10
36
2.10 feladat
A 20-as sorban nulla helyett O-betű van.
2.11 feladat
A 20-as sorban logikai hiba van. A PRINT"X NAGYOBB TIZNEL" utasítás soha nem
hajtódik végre. "
2.12 feladat
Sehol!!! A NEXT után a ciklusváltozót nem kötelező kiírni, amennyiben egyértelmű, hogy ez
a kulcsszó melyik ciklus fejéhez tartozik.
2.13 feladat
A 40-es sorban az X és az Y változók értéke a megengedettnél nagyobb.
A 60-as sorban levő GOTO40 utasítás a ciklusmagba ugrik. Ez tilos!
Megjegyzés: Egymásba skatulyázott ciklusok esetén az egymás után következő NEXT utasítások
összevonhatók. Ebben az esetben először a legbelső ciklus, majd az azt tartalmazó ciklus, ...
változója kerül az egyetlen NEXT kulcsszó után. Ilyenkor a ciklusváltozókat egymástól vesszővel
kell elválasztani.
37
Harmadik fejezet
ALAKZATOK A KÉPERNYŐN
Rajzolási sebesség
Tanulmányozzuk át a következő programot!
3.1 példaprogram
10 CLS
20 x=20 : v=5
30 SET(X,Y) =
x=x+1o
40 IF x=90 THEN x=20 : v=v+1 ELSE 30
50 IF v=37 THEN 60 ELSE 30
60 sora 60
Ez a program egy téglalapot rajzol. Futtassuk le, és ellenőrizzük, hogy ezt kb.
40 másodperc alatt végzi el!
Ugye nem tetszett, hogy milyen lassan rajzolta meg az ábrát?! Az előző
fejezetben megismertük a ciklusszervezés utasításait. Ezeknek alkalmazásával
ismét rajzoltathatunk téglalapot a számítógéppel.
38
3.2 példaprogram
10 CLS
20 FOR Y=5 TO 36
30 FOR X=20 TO 89 : SET(X,Y) : NEXT X
40 NEXT Y
50 GOTO 50
Ha ezt a programot lefuttatjuk, örömmel tapasztalhatjuk, hogy az előzővel
megegyező méretű téglalapot kb. fele annyi idő alatt sikerül kirajzoltatni (kb.
20 másodperc).
Megjegyzés: Az itt és a továbbiakban közölt időértékek csak tájékoztató jellegűek, különböző
gépeknél néhány másodperces eltérések lehetségesek. A megadott időadatokat érdekes és érdemes
összehasonlítani a könyv tanulmányozásakor használt számítógépen kapott értékekkel!
3.1 feladat: Készítsünk olyan programot, amelyik két satírozott téglalapot rajzol minél gyorsabban
úgy, hogy ezek egy T alakot alkossanak!
DEFINT
Az eddigi programjainkban mindig olyan változókat használtunk, amelyek
értéke lehetett egész vagy nem egész valós szám is. Ezeket a változókat valós
típusú változóknak nevezzük. Egy programon belül azonban bizonyos változó-
kat definiálhatunk egész típusú változókként is. Ezeknek értéke mindig egész
szám.
A 3.2 példaprogramot egészítsük ki az alábbi sorral:
5 DEFINT X,Y
A fenti DEFINT definiáló utasítás hatására a számítógép az X és az Y változó-
kat - valamint az összes X-szel, illetve Y-nal kezdődő változót - egész típusú-
ként kezeli. Az egész típusú változók ábrázolásához kevesebb helyre van szük-
ség a memóriában, és az azokkal végzett műveletek végrehajtása gyorsabb, mint
a valós típusú változókkal történőké. Akkor is, ha ezek tartalma csupa egész
szám! Erről magunk is meggyőződhetünk, mert az előbbi 5-ös sorral kiegészített
3.2 példaprogram kb. 15 másodperc alatt rajzolja ki a téglalapot.
Egyelőre csak annyit árulunk el, hogy később majd megismerkedünk olyan
utasításokkal is, amelyek segítségével tetszőleges téglalap kirajzolásához még
egy másodpercre sem lesz szükség. ..
Ha egy programban több olyan változót akarunk egész típusúként definiálni,
amelyek nevei az ábécé-ben egymás utáni betűkkel kezdődnek, akkor ezt megte-
hetjük anélkül is, hogy a DEFINT kulcsszó után felsorolnánk valamennyit.
39
Például a
DEFINT I,J,K,L,M
utasítás egyenértékű a
DEFINT I-M
utasítással.
3.2 feladat: Készítsünk (8 X 8-as) sakktáblát rajzoló programot! Törekedjünk arra, hogy a számító-
gép minél gyorsabban végezze el a rajzolást!
3.3 feladat: Rajzoltassunk a számítógéppel téglalapspirált!
Megjegyzés: Az egész és a valós típusú változók használatával részletesebben
a következő fejezetekben találkozunk.
POINT
Ismerkedjünk meg a POINT függvénnyel! A POINT(X,Y) értéke - l, ha az
(X,Y) koordinátájú pont világít, és D, ha nem. Ezek alapján fejtsük meg a
következő program működését:
3.3 példaprogram
10 CLS
20 DEFINT X,Y
30 FOR Y=5 TO 36
40 FOR X=20 TO 89 : SET(X,Y) : NEXT X
50 NEXT Y
60 FOR Y=0 TO 47
70 FOR X=0 TO 127
80 IF POINT(X,Y)=-1 THEN RESET(X,Y) ELSE SET(X,Y)
90 NEXT X,Y
100 GOTO 100
Ha sikerült, ellenőrizzük a megfejtést: futtassuk le a programot!
3.4 feladat: Módosítsuk a 3.3 feladatra adott megoldást úgy, hogy miután megrajzoltattuk a
téglalapspirált, a számítógép készítse el annak negatívját is!
40
AND és OR
A POINT(X,Y) függvényutasítás segítségével tehát arra kapunk választ,
hogy az (X,Y) koordinátájú pont világít-e. A 3.3 példaprogram 80-as sorát
vizsgálva:
80 IF POINT(X,Y) = -1 THEN RESET(X,Y) ELSE SET(X,Y)
azt láthatjuk, hogyha a feltétel IGAZ, vagyis a pont világít, akkor eloltja azt,
"ha pedig HAMIS, vagyis a pont nem világít, akkor kigyújtja. A POINT(X,Y)
egy logikai állítás is, amelynek két lehetséges értéke van, az IGAZ és a HAMIS.
Ennek megfelelően a 80-as sorral egyenértékű a következő sor:
80 IF POINT(X,Y) THEN RESET(X,Y) ELSE SET(X,Y)
mivel a feltételes utasítás feltétel része is egy logikai állítás. Az AND és az OR
logikai műveletekkel logikai állításokat kapcsolhatunk össze, így az IF kulcsszó
után összetett feltétel is szerepelhet. Ezek segítségével több. feltételes utasítást
eggyel helyettesíthetünk. Erre nézzünk most két példát:
Az
IF X>10 OR X<5 THEN 20 ELSE 90
utasítás hatására a számítógép a programot a 20-as sornál folytatja, ha az
X változó értéke nagyobb 10-nél vagy kisebb 5-nél, ha pedig az X változó értéke
5-nél nem kisebb és 10-nél nem nagyobb, akkor a 90-es sornál.
Az
IF X>15 AND X<30 THEN 20 ELSE 90
utasítás hatására a program futása a 20-as sorban folytatódik, ha az X változó
értéke 15 és 30 közé esik, minden egyéb esetben a 90-es sorra tér rá. Az AND
és az OR (magyar megfelelőjük az ES, illetve a VAGY) kétváltozós logikai
műveletek, könnyű megjegyezni az ún. igazságtáblázatukat:
AND IGAZ HAMIS OR IGAZ HAMIS
IGAZ IGAZ HAMIS IGAZ IGAZ IGAZ
HAMIS HAMIS HAMIS HAMIS IGAZ HAMIS
Tehát egy A AND B típusú logikai állítás csakis akkor IGAZ, ha az A és a
B állítás is IGAZ, egy A OR B típusú logikai állítás pedig akkor IGAZ, ha az
A és a B állítások közül legalább az egyik IGAZ.
41
3.5 feladat: Rajzoltassunk a számítógéppel egy satírozott négyzetet, amelyik tartalmaz egy üres
négyzetet! Az ábra kb. 75 másodperc alatt készüljön el. (Ügyeljünk arra, hogy a négyzetek a
rajzolási lehetőségekhez képest valóban négyzetek legyenek!)
3.6 feladat: Oldjuk meg a 3.1 feladatot logikai műveleteket tartalmazó feltételes utasítások segítségé-
vel!
3.7 feladat: Hol a hiba?
10 CLS
20 X=1 : Y=2
30 IF Xd120 THEN SET(X,Y) : X=X+1 : GOTO30
40 DEFINT X,Y
3.8 feladat: Hol a hiba?
10 CLS
20 DEFINT Z-A
30 X=1 : Y=1
40 IF X(55 AND YCSS THEN SET(X,Y) : X=X+1 : Y=Y+1 : BOTO 40
50 FOR X=0 TO 127
60 FOR Y=47 TO 0 STEP -1
70 IF POINT X,Y THEN SET(X,Y) ELSE RESET(X,Y)
80 NEXTX,Y
90 GOTO 90
Gyakorlatok a harmadik fejezet anyagához
3.1 gyakorlat: Gyújtsuk ki a képernyő összes grafikus pontját több különböző módon is!
3.2 gyakorlat: Satírozott téglalapok segítségével rajzoltassunk F és E betűt úgy, hogy az E betűt
kétszer annyi ideig rajzolja a számítógép, mint az F betűt!
3.3 gyakorlat: Osszuk két vonallal négy részre a képernyőt, majd két, csúcsban érintkező részt
satírozzunk be! Törekedjünk arra, hogy mindez minél gyorsabban történjen.
3.4 gyakorlat: 1000 darab felkiáltójel jelenjen meg minél gyorsabban a képernyőn!
3.5 gyakorlat: Rajzoltassunk minél gyorsabban állandó szélességű keretet a képernyőre!
3.6 gyakorlat: Mozogjon egy pont a képernyő két pontja között felváltva gyorsulva majd lassulva!
3.7 gyakorlat: Járja be egy pont egy téglalap kerületét, majd tegye ugyanezt ellenkező irányban és
tizedannyi idő alatt! Ezután ezt ismételgesse!
3.8 gyakorlat: Rajzoltassunk téglalapspirált szaggatott vonal segítségével a képernyőre!
3.9 gyakorlat: Készítsünk programot, amelyik téglalapspirált rajzol a képernyőre de úgy, hogy
először a vízszintes, majd ezután a függőleges vonalakat rajzolja meg!
3.10 gyakorlat: Írjunk olyan programot, amelyik olyan téglalapspirált rajzol, amelyben a második-
tól kezdve minden szakasz hossza az azt megelőző szakasz hosszának kétszerese!
3.11 gyakorlat: Rajzoltassunk egy házat a képernyőre!
3.12 gyakorlat: Rajzoltassunk a képernyőre minél több különböző nagyságú négyzetet! (A négyze-
tek nem érintkezhetnek egymással!)
3.13 gyakorlat: Jelenjen meg a képernyőn egy ablak, amin a redőnyt állandóan le- és felhúzzák!
3.14 gyakorlat: A képernyőn három téglalap közül kettő fogy és egy növekszik, majd egy fogy és
kettő növekszik periodikusan úgy, hogy mindig ugyanannyi pont világít. Készítsük el ezt a
programot!
3.15 gyakorlat: Rajzoltassunk működő homokórát a képernyőre!
3.16 gyakorlat: Rajzoltassunk egy négyzetet és egy egyenest a képernyőre, majd adott időközönként
jelenjen meg a négyzetnek az egyenesre vonatkozó tükörképe!
42
3.17 gyakorlat: A képernyő közepén jelenjen meg négy darab négyzet. majd mozogjanak ezek a
képernyő négy sarka felé!
3.18 gyakorlat: Jelenjen meg a képernyőn egy téglalap, majd csúsztassuk el annak rétegeit egymáson
úgy, hogy egy paralelogrammához hasonló alakzat adódjon!
3.19 gyakorlat: Egy vízszintes és egy függőleges szakasz mozogjon egymásra merőlegesen a képer-
nyőn!
3.20 gyakorlat: Rajzoltassunk a képernyőre 9 szakaszt úgy, hogy azok legalább 20 pontban messék
egymást! A metszéspontok ne világítsanak.
3.21 gyakorlat: Rajzoltassunk a képernyőre 5 különböző alakzatot egymás után úgy, hogy bárme-
lyik két alakzatnak legyen közös pontja! Ha egy kigyújtandó pont rajzolás közben már világit,
kapcsoljuk ki!
3.22 gyakorlat: Gyújtsuk ki valamely sor első száz grafikus pontját, ezután kapcsoljuk ki ezen száz
pont minden másodikját, általában a k. lépésben minden k. pontot vizsgáljunk meg a századi-
kig bezárólag, s ha a pont világított, akkor kapcsoljuk ki, ha nem, akkor gyújtsuk ki! 100 ilyen
lépés után írassuk is ki a világító pontok koordinátáit!
3.23 gyakorlat: Gyújtsuk ki a képernyő azon pontjait, amelyek X koordinátái 5-nél nagyobbak, de
l5-nél kisebbek, vagy pedig 81 és 93 közé esnek, Y koordinátái pedig 6 és 14 közötti számok!
A harmadik fejezet feladatainak egy lehetséges megoldása
3.1 feladat
10 CLS
20 FOR Y=2 TO 5
30 FOR X=10 TO 107 : SET(X,Y) : NEXT X
40 NEXT Y
50 FOR Y=6 TO 42
60 FOR X=56 TO 65 : SET(X,Y) : NEXT X
70 NEXT Y
80 GOTO 80
3.2 feladat
10 CLS
20 DEFINT I-L
30 K=0
40 FOR J=1 TO 4
50 FOR I=1 T0 a
60 FOR L=I TO 43+1 STEP 16
70 SET(31+L,ó+K+J) : SET(39+L,10+K+J)
80 NEXT L,I,J
90 IF K<24 THEN K=K+8 : GOTO 4m
100 GOTO 100
3.3 feladat
1m CLS
zm DEFINT x,v
30 x1=m : x2=47
40 FOR x=x1 T0 x2 : sET(4m+x,x1) : SET(40+x2,x) : NExT x
sm x1=x1+2
60 FOR x=x2 TO x1 STEP -1 : SET(40+X,X2) = SET(40+X1,X) : NEXT x
7m x2=x2-2
am IF x2;24 THEN 4m
9m sora 9m
43
3.4 feladat
10 cus
20 DEFINT x,v
30 x1=0 : x2=47
40 FOR x=x1 TO x2 : sET(40+x,x1) : SET(40+X2,X) : NEXT x
50 x1=x1+2
50 FOR x=x2 TO x1 STEP -1 : SET(40+X,X2) = sET(40+x1,x) : NEXT x
70 x2=x2-2
80 IF x2p24 THEN 40
90 FOR x=0 TO 127
100 FOR v=0 TO 47
110 IF POINT(X,Y)=-1 THEN RESET(X,Y) ELSE SET(X,Y)
120 NEXT v,x
130 GOTO 130
3.5 feladat
10 CLS
20 DEFINT X,Y
30 X=31 : Y=7
40 IF Y)10 AND Y(24 THEN 50 ELSE 60
50 IF X)40 AND X(62 THEN 70
60 SET(X,Y)
70 X=X+1
80 IF X490 THEN 40 ELSE X=31 : Y=Y+1
90 IF Y(41 THEN 40
100 GOTO 100
3.6 feladat
10 CLS
20 X=10 : Y=2
30 IF X(56 AND Y)5 THEN 60
40 IF X)65 AND Y)5 THEN 60
50 SET(X,Y)
60 X=X+1
70 IF X(10B THEN 30 ELSE X=10 : Y=Y+1
80 IF Y(43 THEN 30
90 GOTO 90
3.7 feladat
Amennyiben a program futása során az X és az Y változókat egész típusúnak kívánjuk definiál-
ni. úgy a DEFINT utasítást értelemszerűen a program elejére kell tenni.
3.8 feladat
A 20-as sorban az A és a Z betű sorrendje felcserélődött.
A POINT kulcsszó után az X és az Y változókat zárójelbe kell tenni.
A 70-es sorban a SET utasítást az ELSE-ágba, a RESET utasítást pedig a THEN-ágba kell írni
ha azt akarjuk, hogy ez a sor a vizsgált pontot kigyújtsa amennyiben az nem világított, és
kikapcsolja ha világított.
A 80-as sorban a NEXT utasítás után az X és az Y változók sorrendjét fel kell cserélni.
Negyedik fejezet
A SZÁMÍTÓGÉP SZÁMOLNI IS TUD
Az egész típusú változók
Eddig főleg olyan feladatokkal talál-
koztunk, amelyek segítségével a számí-
tógép grafikus funkcióit ismerhettük
meg. Ez nemcsak azért volt fontos,
hogy a számítógép grafikájának alapjai-
val tisztában legyünk, hanem azért is,
hogy jól tudjunk tájékozódni a képer-
nyőn, ismerjük annak ábrázolási mére-
teit. Ne feledjük el, a számítógéppel
folytatott párbeszéd során a gép képer-
nyője az elsődleges információforrás a
külvilág, így a mi számunkra is!
A DEFINT utasítással már az előző fejezetben megismerkedtünk, de egy
változó egész típusú lesz akkor is, ha a program során végig százalékjelet (%)
írunk a változó neve után. Ügyeljünk azonban arra, hogyha a DEF INT utasí-
tással a D változót nem definiáltuk előzetesen egész típusúként, akkor a D és
a D% változók különböző változókat jelentenek. Erről a következő parancsok
segítségével akár magunk is meggyőződhetünk:
D=16.6 NL
D%= 16.6 NL
PRINT D,D% NL
45
Megjegyzések:
- Az utasításokhoz hasonlóan a parancsokat is írhatjuk egy sorba, egymástól kettősponttal elvá-
lasztva.
- A PRINT kulcsszó parancs formájában is helyettesíthető kérdőjellel.
- A számítógépen a tizedesvesszőt a tizedespont helyettesíti!
A megjegyzéseknek megfelelően tehát az előző három parancsot egyszerre is
kiadhatjuk:
D= 16.6 : D%=16.6 : PRINT D,D% NL
A programokban általában kényelmes bizonyos változókat egész típusúaknak
definiálni a program elejére helyezett DEFINT utasítással.
A harmadik fejezetben tapasztalhattuk, hogy az egész típusú változókkal a
számítógép gyorsabban dolgozik, mint a valós típusúakkal. Bonyolultabb prog-
ramoknál nagyon fontos lehet, hogy minél gyorsabban lefussanak. (Ugyanak-
kor ne feledjük azt sem, hogy nem mindig az a legjobb program, amelyik a
leggyorsabb...) Ezért érdemes kicsit részletesebben foglalkozni az egész típusú
változókkal, az egész számok ábrázolásával és a velük végzett műveletekkel.
Ezzel egyúttal megkezdjük a számítógéppel mint számológéppel való ismerke-
désünket is.
Az egész számok ábrázolása két részből tevődik össze: a szám számjegyeiből,
illetve az előjelből. A negatív előjelét mindig megjeleníti a gép a képernyőn, a
pozitív előjelét viszont nem. A pozitív előjel helyét azonban (egy karakternyi
helyet) minden esetben kihagyja a szám előtt:
- 31567
23489
4.1 feladat: Készítsünk számláló programot, amelyik megkérdezi, hogy honnan kezdje a számlálást,
hányasával számoljon, és növekedjenek vagy csökkenjenek az egész számok. Ügyeljünk arra,
hogy az egymás után megjelenő számok ne túl gyorsan kövessék egymást! Használjunk egész
típusú változókat!
Futtassuk az előbbi programot a következő adatokkal:
Kezdőérték Lépésköz
0 + 1
0 - 1
- 111 + 22
743 - 89
10142 + 5100
- 13446 - 3342
46
Ne essünk kétségbe, ha OV Error hibajelzéssel áll le a futás!... Ez azt jelenti,
hogy az egész típusú változók lehetséges értékeinek korlátait túlléptük. Ezt a
jelenséget túlcsordulásnak nevezik.
4.2 feladat: Az előző program segítségével pontosan határozzuk meg az egész típusú változók
lehetséges értékeinek korlátait!
Egészrész
Vizsgáljuk meg, mi történik a következő parancs hatására:
SET(120.98,10.78) NL
Annak ellenére, hogy a SET utasítás argumentumában nem egész számok
szerepelnek, ez a parancs mégis végrehajtódik. De vajon melyik pont gyulladt
ki ennek hatására? Ezt saját magunk is eldönthetjük, ha kitalálunk hozzá egy
ügyes kis programot!
47
Azt, hogy a számítógép hogyan ,,ke-
rekít", igen egyszerűen megállapít-
hatjuk a következő parancsok alap-
ján:
A%=4.78 : B%=4.23 NL
C%: - 6.09 : D%= - 6.87 NL
PRINT A%, B%, C%, D% NL
Jegyezzük meg tehát, hogyha egész típusú változónak nem egész számot
akarunk értékül adni, akkor a változó értéke a szám egészrésze lesz, vagyis az
a legnagyobb egész szám, amelyik az adott számnál nem nagyobb.
Aritmetikai műveletek
A változókkal és a számokkal aritmetikai műveleteket végezhetünk. Az össze-
adás és a kivonás jelölése a szokásos (+,-), ezekkel a műveletekkel már
találkoztunk. A szorzás jele a csillag (*), az osztásé a törtvonal ( / ), a hatványo-
zásé pedig a felfelé mutató nyíl (↑), de egyes géptípusoknál ezt a szögletes
nyitózárójel ( [ ) helyettesíti.
Az aritmetikai műveletek alkalmazására két példaprogramot mutatunk. Ta-
nulmányozzuk át ezeket, fejtsük meg működésüket, majd ezután ellenőrzésű]
futtassuk le a programokat!
4.1 példaprogram
10
20
30
40
50
60
70
80
48
CLS
PRINT"ADJ MEG EGY EGESZ SZAMOT !
EN ELDONTOM, HOGY HETTEL OSZTHATO-E." :
B%=A%/7 : B%=A%-7*B%
PRINT A% ;
IF B%<>0 THEN PRINT" NEM ";
PRINT" OSZTHATO HÉTTEL"
PRINT : PRINT
GOTO 80
INPUT A%
REM B% ERTEKE NEH NULLA
4.2 példaprogram
19 DEFINT B,N
29 CLS
30 FOR N=1 TO 10
40 B=(2[N+3*N)/10
sm FOR x=m ro B : SET(X,3*N) : NEXT x
60 NEXT N
7a GDTO 70
Felhívjuk a figyelmet a 4.1 példaprogram 30-as, illetve a 4.2 példaprogram 40-es
sorában található értékadó utasításokra! A 4.1 példaprogram 50-es sorában
szereplő B( )0 feltétel pontosan akkor IGAZ, ha a B változó értéke nem
egyenlő nullával.
4.3 feladat: Végezzük el a következő műveleteket a számítógéppel parancs üzemmódban, majd
hasonlókkal gyakoroljuk az egész számokkal és az egész típusú változókkal végzett aritmetikai
műveleteket:
a) PRINT 230364/9 NL
b) A%=9.2*8l.42 : PRINT A% NL
c) A%=9.2 : B%=s1.42 :- PRINT A%*B% NL
d) A%=9.2 : A%=A%..81.42 : PRINT A% NL
4.4 feladat: Készítsünk olyan programot, amelyik megadja egy (a program által beolvasott) pozitív
egész szám összes osztóinak számát, és kiírja az osztókat is!
4.5 feladat: Írjunk olyan programot, amelyik beolvas négy egész számot, és ezek közül először kiírja
a párosakat, majd ezután a páratlanokat is!
A prioritás
A számítógép az aritmetikai műveletek elvégzésénél egy bizonyos műveleti
sorrendet tart be az ún. prioritási sorrendnek megfelelően. Vizsgáljuk meg az
alábbi értékadó utasítást!
Z = 5+9*13-3 [ 4/9
Itt először a hatványozást kell elvégezni, ezután a szorzást és az osztást, és végül
az összeadást és a kivonást:
Z=5+9*13-81/9
z=5+117-9
z=113
Ez a sorrend azonban zárójelezéssel befolyásolható. Ekkor a számítógép először
a zárójelen belüli műveleteket végzi el (prioritási sorrendben!).
49
4.6 feladat: Mennyi lesz a K% változó értéke, ha
a) K%=456-67+18*131/12-42
b) K%=456-(67+18)*131/12-42
C) K%=(456-67+18)*131/12-42
d) K%=456-67+18*131/(12-42)
e) K%=(456-67+18)*131/(12-42)
f) K%=456-(67+18)*131/(12-42)
g) K%=456-(67+18)*(131/12-42)
Az aritmetikai műveletek közül a számítógép - ha azt zárójelek nem befolyásol-
ják - először mindig a hatványozást, másodszor az előjelváltást, azután a
szorzást és az osztást, végül az összeadást és a kivonást hajtja végre. Az azonos
prioritású műveletek elvégzésénél a "balról-jobbra" szabály érvényes.
Találkozhatunk olyan kifejezésekkel, amelyekben aritmetikai és logikai mű-
veletek, valamint relációk is szerepelnek. Az
X [ 3<6/X AND X<10
kifejezés értéke például az X = l értékre IGAZ, az X = 3 értékre pedig HAMIS,
hiszen az első esetben az 1 < 6 és az 1< 10 egyenlőtlenség is teljesül, de a második
esetben a 27 < 2 nem. Láthatjuk tehát, hogy ilyen esetben először az aritmetikai,
majd azután a logikai műveletek kerülnek végrehajtásra. Vizsgáljuk még meg
a logikai műveletek egymás közötti prioritási sorrendjét is! Készítsünk olyan
programot, amelynek segítségével el tudjuk dönteni, hogy a következő utasítás-
ban szereplő logikai műveleteket milyen sorrendben végzi el a számítógép:
IF X<54 AND Y>5 OR X>63 AND Y>5 THEN 50
Bizonyára rájöttünk arra, hogy a számítógép először az AND, és utána az OR
logikai műveleteket hajtja végre, függetlenül azok előfordulási sorrendjétől. Azt
mondjuk tehát, hogy az AND prioritása nagyobb, mint az OR-é. Ha zárójelek
nem befolyásolják, akkor az azonos prioritású logikai műveletek elvégzésénél
is a "balról-jobbra" szabály érvényes. Ha zárójeleket alkalmazunk, akkor elő-
ször a zárójelen belüli kifejezéseket értékeli ki a számítógép. A fenti utasítás
tehát egyenértékű az
IF (X<54 AND Y> 5) OR (X>63 AND Y> 5) THEN 50
illetve az
IF (X<54 OR X>63) AND Y>5 THEN 50
utasítással.
50
Végezetül, az általános prioritási sorrend a következő:
ELŐSZÖR: hatványozás
MÁSODSZOR: előjelváltás
HARMADSZOR: szorzás, osztás
NEGYEDSZER: Összeadás, kivonás
ÖTÖDSZÖR: relációk (< , > , =)
HATODSZOR: logikai műveletek
4.7 feladat: Hol a hiba?
10 DEFINT X,Y.,Z
20 Z=4
30 X=150/2 : Y=(7[2)*'2
40 X=(X*Y*Z):3 : PRINT X
50 Z=Z+1 : GOTO 30
4.8 feladat: Hol a hiba?
10 CLS
20 INPUT"A NEGYZET 0LDALA";X
30 PRINT"A NEGYZET KERULETE ES TERULETE =";4x;xx
40 PRINT/GOTO20
Gyakorlatok a negyedik fejezet anyagához
4.1 gyakorlat: Gyújtsuk ki a képernyőn az összes olyan grafikus pontot, amelynek koordinátái
négyzetszámok!
4.2 gyakorlat: Készítsünk programot, amelyik bekér őt lottószámot, majd kirajzol egy lottószel-
vényt, és azon bejelöli a megadott számokat!
4.3 gyakorlat: A képernyőn megjelenik egy négyzet. Ha elküldjük a 0 és a K számot, akkor a
számítógép kirajzol egy olyan négyzetet, amelynek oldalai K-ad részei az előző négyzet oldalai-
nak, ha pedig az l és a K számot, akkor az oldalak hosszát K-szorosára változtatja. Írjunk ilyen
programot!
4.4 gyakorlat: A képernyőn megjelenik egy 4 X 4-es sakktábla, és annak egyik mezőjében egy L betű.
A sakktábla mezőit l-től 16-ig megszámoztuk. Készítsünk olyan programot, amelyik bekéri
valamelyik mező sorszámát, és az L betűt elhelyezi erre a mezőre!
4.5 gyakorlat: Írjunk olyan programot, amelyik bekér egy számot, majd kiírja annak - l-szeresét,
tízszeresét, négyzetét és ötödik hatványát! Használjunk egész típusú változókat, és igyekezzünk
elkerülni a tülcsordulást!
4.6 gyakorlat: Készítsünk olyan programot, amelyik bekér három egész számot, és ezek rögzített
sorrendje mellett elvégzi a négy alapműveletet az összes lehetséges módon, majd ki is írja az
eredményeket!
4.7 gyakorlat: Készítsünk olyan programot, amelyik bekér egy pozitív egész számot (N), majd kiírja
az első N páratlan szám, illetve az első N köbszám Összegét!
4.8 gyakorlat: Írjunk olyan programot, amelyik bekér egy pozitív egész számot (N), majd ezután
beolvas N darab számot, és kiírja ezek átlagát! j
4.9 gyakorlat: Írjunk olyan programot, amelyiknek ha megadjuk egy kocka élhosszát, akkor kiírja
egy táblázatba rendezve a kocka felszínét, térfogatát és éleinek összhosszúságát!
4.10 gyakorlat: Készítsünk olyan programot, amelyik kiszámolja egy megadott polinom helyettesí-
tési értékeit a kívánt helyeken!
51
4.11 gyakorlat: Képzeljük magunkat egy, a Föld felé haladó űrhajó pilótájának! A számítógép
képernyőjén leolvashatjuk a rendelkezésre álló üzemanyag mennyiségét, a Földtől való távolsá-
got és az űrhajó sebességét. Ha a számítógépnek megadjuk, hogy mennyivel kívánjuk módosí-
tani az űrhajó sebességét, és azt, hogy mennyi idő teljen el így, akkor kiírja az ennek megfelelő
értékeket. Cél az űrhajó Földre való sima leszállítása. Készítsük el az ennek megfelelő progra-
mot!
4.12 gyakorlat: Készítsünk olyan programot, amelyik egy másodperc értéket átvált nap, óra, perc,
másodperc formára!
4.13 gyakorlat: Készítsünk olyan programot, amelyik egy kettes számrendszerbeli számot tízesbe,
egy tízes számrendszerbeli számot pedig kettesbe vált át!
4.14 gyakorlat: Készítsünk olyan programot, amelyik két tetszőleges, beolvasott számra elvégzi a
maradékos osztást!
4.15 gyakorlat: Írjunk programot, amelyik egy adott számig kiírja a prímszámokat!
4.16 gyakorlat: Készítsünk programot, amelyik öt beolvasott számot nagyság szerinti csökkenő
sorrendben kiír!
4.17 gyakorlat: Írjunk olyan programot, amelyik két beolvasott szám legnagyobb közös osztóját és
legkisebb közös többszörösét meghatározza!
4.18 gyakorlat: Készítsünk olyan programot, amelyik két adott szám közötti számok közül keres
egy prímszámot!
4.19 gyakorlat: Készítsünk programot, amelyik két megadott szám közül megkeresi azt, amelyiknek
több osztója van!
4.20 gyakorlat: Gyújtsuk ki a képernyő összes olyan pontját, amelyek koordinátái 5 és 45 közé
esnek, de 10 többszöröseivel, valamint a 11 és a 19 közötti számokkal nem egyenlőek!
A negyedik fejezet feladatainak egy lehetséges megoldása
4.1 feladat
10 DEFINT K,S,X
20 CLS
30 INPUT"HONNAN KEZDJEM A SZANLALAST ";K
40 PRINT : INPUT"HANYASAVAL SZANLALJAK ";s
50 PRINT : INPUT" NOVEKEDJENEK A SZAMOK (+1) ,
VAGY CSOKKENJENEK c-1) ";x
60 IF x=1 OR x=-1 THEN s=s*x ELSE 50
70 PRINT K :
FOR x=1 TO 100 : NEXT
80 K=K+S :
GOT0 70
4.2 feladat
Az egész típusú változók lehetséges legkisebb értéke: - 32768,
lehetséges legnagyobb értéke pedig: 32767.
4.3 feladat
a) 25596 b) 749 c) 729 d) 732
52
4.4 feladat
10 DEFINT I,J,M,N
20 CLS
30 INPUT"KEREK EGY POZITÍV EGÉSZ SZAMOT ! , NI ";N
40 IF N(1 THEN GOTO 30
50 PRINT : PRINT N;" OSZTOI A KOVETKEZO SZAMOK 3" 3 PRINT
60 J=1 : I=0
70 M-N/J : IF N=M*J THEN 80 ELSE 90
80 IF J*J=N THEN I=I+1 3 PRINT J 3 GOTO 100
ELSE I=I+2 3 PRINT J;M
90 J=J+1 3 IF J*J(N+1 THEN 70
100 PRINT 3 PRINT"TEHAT"a N;" OSZTOINAK SZAMA ";I
4.5 feladat
10 DEFINT I,J
20 CLS
30 PRINT 3 PRINT 3 PRINT"KEREK NEGY EGÉSZ SZAMOT 1" 3
INPUT I1,I2,I3,I4 3 PRINT
40 J=I1/2 3 J1=I1-2*J 3 J=I2/2 3 J2=I2-2*J 3
J=I3/2 3 J3=I3-2*J 3 J=I4/2 3 J4-I4-2*J
50 IF J1*J2*J3*J4=1 THEN PRINT"MINDEN SZAM PARATLAN 3";
I1;I2;I3;I4 3 PRINT 3 GOTO 30
60 IF J1+J2+J3+J4=0 THEN PRINT"HINDEN SZAM PAROS 3";
I1;I2;I3;I4 : PRINT : GOTO 30
70 PRINT"PAROS SZÁMOK 3";
80 IF J1=0 THEN PRINTI1;
90 IF J2=0 THEN PRINTI2;
100 IF J3=0 THEN PRINTI3;
110 IF J4=0 THEN PRINTI4;
120 PRINT : PRINT"PARATLAN SZAMOK :";
130 IF J1=1 THEN PRINTI1;
140 IF J2=1 THEN PRINTI2;
150 IF J3=1 THEN PRINTI3;
160 IF J4=1 THEN PRINTI4;
170 GDTO 30
4.6 feladat
a) 543 b) -514 c) 4461 d) 310 e) -1778 f) 827 g) 3098
4.7 feladat
Az osztás jele nem a kettőspont, hanem a törtvonal (4B-es sor).
A Z= 13 esetben a számolás eredménye még csak 31850, de Z = 14 esetén már 343% lenne, ami
túlcsordulást eredményez, hiszen egész típusú változókkal dolgozunk.
4.8 feladat
A szorzás jelét, a csillagot mindig ki kell tenni!
A 40-es sorban a kettőspont helyett törtvonal van.
53
Ötödik fejezet
TOVÁBB SZÁMOLUNK
A valós típusú változók
Ha egy programban valamely változónév után nem használunk semmiféle
típusjelet, és a programban sehol sincsen erre vonatkozó típusdefiníció, akkor
ezt a változót a gép automatikusan valós típusúként kezeli. A teljesség kedvéért
megemlítjük, bár gyakorlati jelentősége kicsi, hogy a valós típusú változókat is
definiálatlanjuk a változónév után írt felkiáltójellel vagy pedig a DEFSNG utasí-
tással.
5.1 feladat: Alakítsuk át a 4.1 feladatra írt programot úgy, hogy alkalmas legyen nem egész valós
számokkal történő műveletek elvégzésére is!
Ha az 5.1 feladat programját B vagy 1 000 000 (vagy - 1 000 000) körüli érté-
kekkel futtatjuk, akkor érdekes jelenséget figyelhetünk meg. A valós típusú
változók értékeit a gép kétféle formában írja ki. Az egyik a megszokott forma,
például:
55.6, -2.467, 52769.3,
Ezt fixpontos számábrázolásnak nevezzük. (Felhívjuk a figyelmet arra, hogyha
a tizedesponttól balra csak a B számjegy állna, akkor ezt a számítógép nem írja
ki!)
A másik pedig a lebegőpontos számábrázolás. Ennek alapja az, hogy tetszőleges
(nem nulla) valós szám ± v - 10±n alakra hozható, ahol a v az ún. mantissza,
1-nél nem kisebb és 10-nél kisebb fixpontos alakban írt valós szám, az n
nemnegatív egész szám pedig a karakterisztika. Ezt az alakot a gép ±vE±n
formában írja ki a képernyőre, ahol az E betü elválasztja a mantisszát a
karakterisztikától.
Például a 0,0005; 106; 1,124 - 1O-13;-9,99 - 1022 ilyen alakban jelenik meg a
képernyőn:
5E-04; 1E+06;1.124E-13; -9.99E+22
Természetesen az, hogy a kiíratás melyik formában történik, nem attól függ,
hogy a gépnek milyen a hangulata, hanem .bizonyos-határok között mindig
54
fixpontos, egyébként pedig lebegőpontos alakban jelennek meg a képernyőn az
adatok. A számítógép tetszőleges valós típusú változó értékét lebegőpontos
alakban ábrázolja a memóriájában, ugyanis így sokkal nagyobb számokkal is
képes műveleteket végezni, mint fixpontos alakban tárolt számokkal. Ezek után
"éppen az a meglepő, hogy bizonyos számokat mégis fixpontos alakban ír ki. Ez
a számítógépnek plusz feladatot jelent, a felhasználónak viszont nagy köny-
nyebbséget, hiszen mi sokkal inkább a fixpontos ábrázoláshoz vagyunk hozzá-
szokva.
5.2 feladat: Határozzuk meg, hogy a valós típusú változók esetében mely számoknál lép fel túlcsor-
dulás! Ehhez jól felhasználható az 5.1 feladat programja!
Megjegyzés: Oldjuk meg a 4.3, illetve a 4.6 feladatokat valós típusú változók felhasználásával is!
A kiíratás pontossága
Az előző feladatok megoldása során tapasztalhattuk, hogy a számítógép a
valós típusú változók értékeit legfeljebb hat értékes jegy pontossággal írja ki,
ahol a hatodik már lehet kerekített érték is.
Találkozhatunk azonban olyan feladatokkal is, amelyek megoldásához na-
gyobb pontosságra van szükség. Erre ad lehetőséget a dupla pontosságú valós
típusú változók használata. Ezek definiálása vagy a változónév után írt számjellel
(itt) vagy a DEFDBL utasítás segítségével történhet. A dupla pontosságú valós
típusú változók értékeit a számítógép legfeljebb 16 értékes jegy pontossággal írja
ki, ahol a tizenhatodik már lehet kerekített érték is.
Megjegyzés:
- Ügyeljünk arra, hogy a számítógép csak a négy alapműveletet végzi el dupla pontosságú értékek-
kel! (A hatványozást és a következőkben ismertetendő belső aritmetikai függvények helyettesítési
értékeinek kiszámítását nem.)
- A HT iskolaszámítógép belső számábrázolása kettes számrendszerbeli. Az általunk megadott
adatokat átváltja kettes számrendszerbe, a műveleteket itt végzi el, az eredményeket pedig ismét
a tízes számrendszerben kapjuk meg. Ezek az átalakítások sok gépi pontatlanságot eredményez-
hetnek. Erre láthatunk néhány példát a következő parancsok segítségével:
A = 5/3: ?A NL
A# = 5/3: ?A# NL
A# = 5#/3: ?A# NL
A# = 5#/3#: ?A# NL
?3↑3 NL
?3↑3-27 NL
?3# ↑3-27 NL
? 3# ↑3 - 27# NL
A dupla pontosságú fixpontos kiíratás esetén csak annyi a különbség, hogy
a kiírt szám több értékes jegyet tartalmazhat, a lebegőpontos kiíratásnál ezen
kívül az E betű helyett a D betű jelenik meg. Például:
99999999999. 12, - .0000000123, - 1.701411834244556D + 38,
3.567890123D - 31
5.3 feladat: Készítsünk olyan programot, amelynek segítségével meg lehet határozni a következő
egyenletnek a [2,3] intervallumba eső közelítő megoldását:
x4-3x2-10=0
Belső aritmetikai függvények
Vannak olyan feladatok, amelyek megoldásánál nagy segítséget jelentenek az
ún. belső aritmetíkaifüggvények. Ezek közül néhány fontosabb a következő:
- abszolútérték függvény ABS
- négyzetgyök függvény SQR
- egészrész függvény INT
- szinuszfüggvény SIN
- koszinuszfüggvény COS
- exponenciális függvény EXP
- természetes alapú
logaritmus függvény LOG
56
Futtassuk le a következő példaprogramot:
5.1 példaprogram
10
20
30
40
50
60
70
80
90
100
110
120
130
140
150
160
170
180
190
200
210
220
230
240
250
260
270
280
290
300
310
320
330
REM A BELSD ARITMETIKAI FUGGVENYEK HASZNALATA
CLS
REM ABS - ABSZOLUTERTEK FUGGVENY
PRINT"ABS(6.7)=";ABS(6.7),"ABS(-3.12)=";ABS(-3.12)
INPUT A : PRINT"ABS(";A;")=";ABS(A)
IF A=99 THEN CLS : GOTO 70 ELSE 50
REM SGR - NEGYZETGYDK FUGGVENY
PRINT"SGR(4)=";SGR(4),"SGR(178.35)=";SDR(178.351
PRINT"SGR(X) X)=0 !!!"
INPUT"X= "; A : PRINT"SGR("§A;")=";SGR(A)
IF A=99 THEN CLS : GOTO 120 ELSE 90
REM INT - EGESZRESZ FUGGVENY
PRINT"INT(4.2)=";INT(4.2),"INT(4,6)=";INT(4.6),
"INT(-3.6)=";INT(-3.6),"INT(-3.1)=";INT(-3.1)
INPUT A : PRINT INT(A) -
IF A=99 THEN CLS : GOTO 160 ELSE 140
REM SIN F SZINUSZ FUGGVENY
PRINT"SIN(3.14)=";SIN(3.14),"SIN(1.57)=";SIN(1.57)
PRINT : PRINT"A SZDGEK ERTEKET RADIANBAN KELL MEGADNI !" .
INPUT A : PRINT SIN(A) .
IF A=99 THEN CLS : GOTO 210 ELSE 190
REM COS - KDSZINUSZ FUGVENY
PRINT"CDS(3.14)=";CDS(3.14),"CDS(1.57)=";CDS(1.57)
PRINT : PRINT"A SZÜGEK ERTEKET RADIANBAN KELL MEGADNI !" .
INPUT A : PRINT CDS(A)
IF A=99 THEN CLS 2 GOTO 260 ELSE 240
REM EXP - EXPDNENCIALIS FUGGVENY
PRINT"EXP(0)=";EXP(0),"EXP(1)=";EXP(1)
INPUT A : PRINT EXP(A)
IF A=9 THEN CLS : GOTO 300 ELSE 280
REM LOG - TERMESZETES ALAPU LDGARITMUS FUGBVENY
PRINT"LDG(1)=";LDG(1),"LOG(2.71)=";LDG(2.71)
INPUT A : PRINT LDG(A)
IF A=99 THEN 20 ELSE 320
5.4 feladat: Készítsünk programot, amelyik kirajzolja az
f: [0, 125]→R, x→ √16x
függvény grafikonját!
5.5 feladat: Rajzoltassuk ki a szinuszfüggvénynek vagy valamely transzformáltjának a grafikonját
a [-2π, 2π] intervallumon! Törekedjünk arra, hogy a grafikon minél szebb legyen!
Megjegyzés: A negyedik fejezetben már felhívtuk a figyelmet arra, hogyha a SET utasítás argumen-
tumában (vagyis a SET kulcsszó utáni zárójelek közötti részben) nem egész értékek állnak, akkor
azoknak a számítógép az egészrészét veszi. Ennek megfelelően a számítógéppel való függvényábrá-
zoláson azt értjük, hogy a függvény grafikonjának csak néhány pontját, és azokat is csak a megfelelő
közelítéssel jelenítjük meg a képernyőn.
57
5.6 feladat: Végezzen egy pont harmonikus rezgőmozgást a képernyő két pontja között!
5.7 feladat: Hol a hiba?
ím CLS
2m FDR K=em ro m STEP -1
zm Y=LDG(SIN(K*3.141ó/32)
4m PRINT v,
sm NEXT
5.8 feladat: Hol a hiba?
1m CLS
2m PRINT"ADJAL MEG EGY SZAMDT ! x=
zm PRINT" Az x SZAM LDGARITMUSA : ";
4o REM NAGYOBB-E NULLANAL A sznm ? :
PRINT"EZ NEM JD 9" : sora 22o
sm PRINT"LDG(";X;") =";LDG(X)
60 PRINT = sora 2m
*; 2 INPUT x
IF XNZ! THEN SIZ! ELSE
Gyakorlatok az ötödik fejezet anyagához
5.1 gyakorlat: Rajzoltassunk egy nagy kört a képernyőre!
5.2 gyakorlat: Jelenjen meg a képernyőn egy óra számlapja, és az óra nagymutatója, amelyik a
negyedórákat mutatja!
5.3 gyakorlat: Jelenjen meg egy olyan pont a képernyőn, amelyik csillapított rezgőmozgást végez!
5.4 gyakorlat: Ábrázoljuk az 5.3 gyakorlatnak megfelelően mozgó pont kitérés-idő grafikonját!
5.5 gyakorlat: Készítsünk olyan programot, amelyik beolvas egy legfeljebb négyjegyű egész számot,
és kiírja azt lebegőpontos alakban!
5.6 gyakorlat: Készítsünk olyan programokat, amelyek kiszámítják az alábbi egyenletek gyökét 3
tizedesjegy pontossággal:
x
a) sinx=-;
2
b) cos ² x = x ² ;
c) 2 x + 3 x + 4 x = 10;
d) e x = 100 sin x.
5.7 gyakorlat: Írjunk olyan programot, amelyik egy háromszög egy oldala és a rajta fekvő két szög
ismeretében kiszámolja a háromszög további adatait!
5.8 gyakorlat: Készítsünk olyan programot, amelyik valamely belső aritmetikai függvény helyettesí-
tési értékeiből táblázatot készít!
5.9 gyakorlat: Készítsünk olyan programot, amelyik egy beolvasott N értéktől kezdve kiírja az
N↦ ( 1+ 1 / N ) N és az N↦ ( 1+ 1 / N ) N+1
sorozatok következő 16 tagját!
58
Az Ötödik fejezet feladatainak egy lehetséges megoldása
5.1 feladat
A program megegyezik a 4.1 feladatra adott programmal, az ottani 16-es sor nélkül.
5.2 feladat
A valós típusú változókba
- 1.70141E+ 38 és 1.70141E+ 38
közötti számokat írhatunk.
(Az itt megadott értékekre már OV Error hibaüzenettel leáll a program futása.)
5.3 feladat
10 CLS
20 INPUT"X= ";X
30 v=xt4-3*x*x-1m
40 PRINT"A HELYETTESITESI ERTEK :";v
50 PRINT =
GOTO 20
5.4 feladat
10 REM TENGELYRAJZÜLAS
20 CLS
30 FOR X=0 TO 127 : SET(X,46) : NEXT X
40 FOR Y=0 TO 47 : SET(2,Y) : SET(1,Y) : NEXT Y
50 REM A FUGGVENY ABRAZÜLASA
60 FOR X=0 TO 125
70 Y=SQR(16*X) : Y=ABS(Y-47) : SET(X+2,Y)
B0 NEXT X
90 GOTO 90
5.5 feladat
10 REM TENGELYRAJZÜLAS
20 CLS
30 FOR X=0 TO 127 : SET(X,23) : NEXT X
40 FOR Y=0 TO 46 : SET(63,Y) : NEXT Y
50 REM A-GRAFIKON
60 FOR X=0 TO 63
70 Y=9*SIN(X*3.1416/32) : SET(63+X,23-Y) : SET(6I-X,23+Y)
B0 NEXT
90 GOTO 90
5.6 feladat
10 CLS
20 DEFINT I
30 FOR I=0 TO 63
40 SET(63+SIN(I*3.14/32)*63,23) : RESET(63+SIN(I*3.14/32)*63,23)
50 NEXT I
60 GOTO 30
5.7 feladat
A 36-as sorban hiányzik a logaritmus függvény argumentumának záró zárójele.
A program futása ezután is hibajelzéssel fog leállni amikor a K változó értéke eléri a 63-at, mert
ekkor a logaritmus argumentumában negatív érték lesz.
5.8 feladat
A 40-es sorban levő feltételes utasítás sohasem hajtódik végre az előtte álló REM utasítás miatt.
59
Hatodik fejezet
JÁTSSZUNK A KARAKTEREKKEL!
RND
Számos feladat megoldásához, játék vagy számítógépes szimuláció elkészíté-
séhez nagy segítséget nyújthat az, ha ún. véletlenszámok állnak rendelkezésünk-
re. Ezeket egy véletlenszámgenerátor állítja elő, amit az RND függvény segítségé-
vel hívhatunk meg. Az RND(0) függvényutasítás hatására egy egynél kisebb
nemnegatív véletlenszámot kapunk eredményül.
6.1 példaprogram
im REM v E L E T L E N S z A M 0 K
2m CLS
30 XZ=10*RND(m) : Y=RND(B) . Z#=RND(0)
4m PRINTXZ,Y,Z#
sm REM FIGYELJ A KULONBOZO TIPUSU VALTOZOKRA 9
60 FDR I=B TO zmmm = NEXT
7o sora zm
6.1 feladat: Írjunk olyan játékprogramot, amelyben a gép "gondol" egy B és l közé eső számot, és
a játékosnak ki kell találnia. Minden találgatás után a gép írja ki, hogy a játékos által megadott
szám kisebb vagy nagyobb, mint a generált szám. Találatnak azt fogadjuk el, ha az eltérés
BMGI-nél kisebb.
Ha például 100-nál kisebb és 90-nél nem kisebb véletlenszámot kívánunk
előállítani, akkor használhatjuk a
90+ 10*RND(0)
utasítást.
6.2 feladat: Készítsünk a 6.1 feladatához hasonló programot, amelynek segítségével a játékosnak
a gép által gondolt legfeljebb háromjegyű pozitív egész számot kell kitalálnia!
6.3 feladat: Módosítsuk a 6.2 feladat programját úgy, hogy a gép által gondolt legkisebb szám 150,
a legnagyobb pedig 159 lehessen!
60
A 6.2 feladatot egyszerűbben oldhatjuk meg az RND(K) függvényutasítás
segítségével, ami egy K-nál nem nagyobb pozitív véletlen egész számot generál,
ha a K pozitív szám. A K helyén szere-
pelhet tetszőleges aritmetikai kifejezés,
amelynek aktuális értéke a pozitív
K szám.
6.4 feladat: Módosítsuk a 6.1 feladatot úgy, hogy
a gondolt szám 100 és 1000 közé essen, és a
számítógép számolja azt, hogy a játékos há-
nyadik kísérletre találta ki!
6.5 feladat: Vizsgáljuk meg az RND(K) függvé-
nyutasítás hatását, ha a K nem egész szám!
A véletlenszámok segítségével rajzolási technikánkat is tovább tudjuk fejlesz-
teni, amire egyszerű példa a következő rövid program:
6.2 példaprogram
10 REM A KEPERNYÜ PONTONKENTI VELETLENSZERU K IGYUJTASA
20 CLS
30 SET(RND(128)-1 ,RND (48) -1) :
GOTO 30
Karaktereket tartalmazó változók
A számítógép által használt változóknak van egy negyedik típusa is, a karak-
teres vagy ún. string változók. Ezek értéke legfeljebb 255 karakter hosszúságú
karakterlánc lehet. A karakteres változókat a többi változótípusoktól a változó-
név után tett dollárjel (S) különbözteti meg. Például:
A$, BI$, KA$,
Ha nem akarjuk mindig kiírni a dollárjelet, akkor lehetőség van arra, hogy adott
betűvel kezdődő változókat karaktertípusúként definiáljunk a DEFSTR utasí-
tással.
61
6.3 példaprogram
10 REM K A R A K T E R E K
20 DEFSTR S,P
30 S="ABRAKA" : P="DABRA"
40 X4$="KAKUKKOSORA"
50 CLS
60 PRINTS;"-";P : PRINTX4$
A karaktertípusú változók értékadásánál az értékadó utasítás jobb oldalán
vagy karaktertípusú kifejezés, vagy - kötelezően idézőjelek közé tett - karakter-
lánc állhat. Ez a karakterlánc nem tartalmazhat idézőjelet!
6.6 feladat: Rajzoltassunk négyzetet, amelynek oldalmérőszáma véletlenszám! Ha ezután elküldjük
az "UJABB" szót, akkor a gép újabb négyzetet rajzoljon hasonlóan.
INKEY$
A számítógéppel való párbeszéd továbbfejlesztésére ad lehetőséget az
INKEYS utasítás.
6.4 példaprogram
10 REM PELDA AZ INKEY5 UTASITAS HASZNALATARA
20 CLS
30 SET(RND(128)-1,RND(48)-1)
40 IF INKEY$="T" THEN 30 ELSE 40
A 6.2 példaprogramot úgy módosítottuk, hogy a másodiktól kezdve a követke-
ző pont akkor gyullad ki, ha a T billentyűt lenyomjuk. Az INKEY$ utasítás
segítségével a billenytűzetről legutoljára bejövő egy karakternyi információt
vizsgálhatjuk meg a következőképpen:
Az A$=INKEY$ utasítás hatására az AS változó értéke az utasítás előtt
utoljára leütött billentyűnek megfelelő karakter lesz. (Ha a program indítása
vagy a legutolsó INKEY$ utasítás végrehajtása óta nem ütöttünk le egyetlen
billentyűt sem, akkor az üres karakter.) Az utasítást követően pedig az INKEY
függvény értéke az üres karakter lesz.
Ez az utasítás a program futását nem szakítja meg, és hatására a képernyőn
nem jelenik meg sem kérdőjel, sem a leütött billentyűnek megfelelő karakter.
62
Megjegyzés: A BREAK billentyű lenyomását nem tudjuk vizsgálni az INKEY$ utasítással, mert
az a program futását megszakítja.
6.5 példaprogram
10 REM UJABB PÉLDA AZ INKEY$ UTASITAS HASZNALATARA
20 CLS
30 SET(RND(128)-1,RND(48)-1)
40 X$=INKEY$
50 IF X$="" THEN 40
60 IF X$=" " THEN 20 ELSE 30
Az első grafikus pont kigyújtása után a program aszerint folytatódik, hogy
leütöttünk-e billentyűt, és ha igen, akkor az a SPACE
volt-e. A 40-es sort addig
hajtja végre a számítógép, amíg egy billentyűt le nem ütünk. Ha ez a SPACE ,
akkor képernyőtörléssel és egy új pont kigyújtásával, ha bármelyik másik
billentyű, akkor új pont kigyújtásával folytatódik a program.
Megjegyzés: Vegyük észre, hogy a számítógép megkülönbözteti a szóközt (SPACE) tartalmazó (" ")
és az üres ('"') karaktert! Az előbbi tartalmaz egy karaktert, míg az utóbbi egyet sem.
6.7 feladat: Mi a különbség a következő két program működése között?
10
20
30
40
50
60
10
20
30
40
50
60
70
REM . . . . .. 1.PRDBRAM
CLS
FOR X=0 TO 127 : SET(X,21) : NEXT X
AS=INKEY5
IF AS="" THEN 40
IF AS="T" THEN 20 ELSE 40
REM . . . . .. 2.PRDBRAM
CLS
FOR X=0 TO 127 : SET(X,21) : NEXT X
AS=INKEYS
AS=INKEYS
IF AS="" THEN 50
IF AS="T" THEN 20 ELSE 50
6.8 feladat: Készítsünk olyan programot, amelyben a számítógép gondol egy 106 és 1606 közé eső
egész számot, amit nekünk ki kell találni. Miután kitaláltuk a gép által gondolt számot, a gép
írja ki az ehhez szükséges próbálkozások számát, majd a billentyűzetről beadott információnak
megfelelően vagy kezdődjék elölről (képernyőtörléssel) a játék, vagy fejeződjék be, és a gép
"búcsúzzon el"!
63
6.9 feladat: Írjunk olyan programot, amelyik véletlenszerűen generál tíznél nem nagyobb terrnésze-
tes számokat! A program készítsen vonalas grafikont az egyes generált számokról olyan módon,
hogy amikor egy újabb, például a 7-es szám generálódott, akkor a 7-eseknek megfelelő oszlop
"tetején" egy újabb grafikus pont gyullad ki. A számokat addig állítsuk elő, amíg valamelyik
oszlop a képernyő tetején levő számig nem ér. (Lásd az ábrát!)
6.10 feladat: Rajzoltassuk véletlenszerűen a számítógépet! Véletlenszerűen kiválasztott kezdőpont-
ból, véletlenszerű (de legfeljebb 39 grafikus pontnyi) hosszúságú vonalat rajzoljon. Amikor egy
szakaszt megrajzolt, a T billentyű leütésére folytassa a rajzolást az előbbi rendszer szerint, az
U billentyű leütésére pedig képernyőtörléssel kezdje elölről.
6.11 feladat: Hol a hiba?
10 CLS
20 RND(0)=X
30 PRINTX,X*X,X*X*X : PRINT
40 FOR I=1 TO 300 : NEXT
50 GOTO 20
6.12 feladat: Hol a hiba?
10 CLS
20 SET(RND(127),RND(47)) : RESET(RND(127),RND(47))
30 IF INKEY="T" THEN 20 ELSE 30
6.13 feladat: Hol a hiba?
10 CLS :
DEFINT s,x,v
20 X=RND(130) = v=x/2
30 IF x=v*2 THEN 40 ELSE 20
40 SET(X,Y)
50 S=INKEYi
50 IF s="" THEN 60
70 IF S="T" THEN 20 ELSE 50
64
Gyakorlatok (a hatodik fejezet anyagához
1 gyakorlat: Egy billentyű lenyomására villogjon három véletlenszerűen kigyújtott pont a képer-
nyőn. Amikor ismét lenyomunk egy billentyűt, újabb három pont villogjon!
2 gyakorlat: Lenyomunk egy billentyűt, kigyullad egy pont. Ha ugyanazt a billentyűt ismételten
lenyomjuk, akkor villogni kezd a pont, ha újabb billentyűt, akkor pedig egy új pont gyullad ki.
Készítsük el ezt a programot! _
3 gyakorlat: Mozogjon egy pont véletlenszerűen a képernyőn! Készítsünk ilyen programot!
4 gyakorlat: Készítsünk programot, amelyik egy hatszög csúcsait véletlenszerűen villogtatja!
5 gyakorlat: Írjunk olyan programot, amelyik tetszőleges billentyű lenyomására véletlenszerűen
kiválasztott helyre rajzol egy háromszöget a képernyőn!
6 gyakorlat: Véletlenszerű időközönként szaladjanak fel vízszintes vonalak a képernyőn!
7 gyakorlat: Jelenjen meg két ablak a képernyőn, amiken a redőnyt véletlenszerűen le-föl húzogat-
ják!
8gyakorlat: Szimuláljuk számítógépen a következőt: IDEG-szer dobunk egy dobókockával, és
számoljuk, hogy az egyes számok hányszor fordultak elő.
9gyakorlat: Készítsünk olyan programot, amelynek segítségével tetszőleges folytonos vonalat
tudunk rajzolni a képernyőre! A rajzolást, vagyis az egymás utáni pontok kigyújtását négy
billentyűvel vezéreljük: fel, le, jobbra, balra, és ha nem nyomunk le billentyűt,
akkor arrafelé folytatódjék a rajzolás, amerre legutoljára irányítottuk.
10 gyakorlat: Jelenjenek meg véletlenszerűen a képernyőn az évszakok nevei!
11 gyakorlat: Készítsünk olyan programot, amelyik kiír két véletlenszámot a képernyőre! Ezután
nekünk össze kell szorozni őket, majd az eredményről a számítógép döntse el, hogy helyes-e.
12 gyakorlat: Írjunk olyan programot, amelyik kijelöl a képernyőn egy osztást, amit nekünk el
kell végezni, A számítógép ellenőrizze, hogy helyesen számoltunk-e! (A hányados mindig egész
szám legyen!)
13 gyakorlat: Készítsünk olyan programot, amelyik azt méri, hogy milyen gyorsan tudunk egy
adott jelre lenyomni egy billentyűt!
14 gyakorlat: Írjunk olyan programot, amelynek segítségével két játékos versenyezhet, hogy
melyiknek jobbak a reflexei!
15 gyakorlat: Ketten játszanak egy dobókockával: A dob, de előzetesen B tippel, hogy A hányást
fog dobni. Ha B tippje és az A által dobott szám megegyezik, akkor B ugyanannyi jutalompon-
tot kap, mint amennyi a szám volt. Ha a tipp rossz volt, akkor a dobott és a tippelt szám közötti
eltérésnek megfelelő büntetőpontot vonunk le pontszámaiból. Ezután cserélnek, B dob, A
tippel stb. Az nyer, aki hamarabb ér el 100 pontot.
Készítsük el a játéknak megfelelő programot!
A hatodik fejezet feladatainak egy lehetséges megoldása
1 feladat
12 CLS p
22 X=RND(D)
32 PRINT"AZ x SZAMRA GONDOLTAM !" = PRINT :
PRINT"TALALD KI X-ET 2"
42 INPUT A
52 IF A-X).DD1 THEN PRINT"X KISEBB" = PRINT = soro 42
52 IF X-A).DB1 THEN PRINT"X NAGYOBB" = PRINT : soro 42
72 PRINT" TALALT !" : PRINT :
soro 32
65
6.2 feladat
10 CLS
20 DEFINT A,x
30 X=999*RND(0)+1
40 PRINT"Az x SZAMRA GONDOLTAM !" : PRINT : PRINT"TALALD KI X-ET !"
50 INPUT A
50 IF X§A THEN PRINT"X KISEBB" : PRINT : GOTO 50
70 IF x)A THEN PRINT"X NAGYOBB" : PRINT : GOTO 50
80 PRINT" TALALT !" : PRINT : PRINT : PRINT :
GOTO 40
6.3 feladat
10 CLS
20 DEFINT A,x
30 X=150+10*RND(0)
40 PRINT"Az X SZAMRA GONDOLTAM s TALALD KI !!!"
50 INPUT A
60 IF X§A THEN PRINT" x KISEBB" : PRINT : GOTO 50
70 IF X)A THEN PRINT"X NAGYOBB" : PRINT : GOTO 50
80 PRINT"T A L A L T !!!" : PRINT
90 STOP
6.4 feladat
10 CLS
20 DEFINT A,I,x
30 I=0 : x=100+RND(B99)
40 PRINT"AZ X SZAMRA GONDOLTAM !" : PRINT :
PRINT"TALALD KI x-ET !" : PRINT
50 I=I+1 :
INPUT A
60 IF XCA THEN FRINT"X KISEBB" : PRINT :GOTO 50
70 IF X)A THEN PRINT"X NAGYOBB" : PRINT : GOTO 50
80 PRINT" TALALT !" : PRINT : PRINT"EHHEZ ";I;
" DARAB BROBALKOZASRA VOLT SZUKSEBED s" : PRINT :
90 GOTO 30
6.5 feladat
A számítógép a K egészrészét veszi. (Ezt a továbbiakban [K]-val jelöljük.) Ha [K] negatív, akkor
FC
Error hibajelzést kapunk. Ha nulla, akkor egy egynél kisebb nemnegatív véletlenszámot, ha
pedig [K] pozitív, akkor K-nál nem nagyobb pozitív véletlen egész számot.
6.6 feladat
10
20
30
40
50
60
70
80
DEFINT A-Z
CLS
K=RND(44)
FOR X=0 TO 2*K
FOR Y=3 TO K+3 :
NEXT X
INPUT AS
IF AS="UJABB"
SET(X,Y) : NEXT Y
THEN 10 ELSE 70
6.7 feladat
Az első program futtatásakor, ha a vonal rajzolása közben lenyomjuk a T billentyűt, akkor
a rajzolás befejezése után rögtön képernyőtörlés következik és kezdődik elölről a vonalrajzolás.
A második program futásánál, ha a vonal rajzolása közben lenyomjuk a T billentyűt, akkor
ez az információ a 66-as sorban levő utasítás hatására elvész, így képernyőtörlés csak akkor
történik, ha a vonal megrajzolása után nyomjuk le a szükséges billentyűt.
66
6.8 feladat
10 CLS
20 DEFINT A,I,X
30 I=0 : X=100+RND(B99)
40 PRINT"AZ X SZAMRA GONDOLTAM !" : PRINT :
PRINT"TALALD KI X-ET !" : PRINT
50 I=I+1 :
INPUT A
60 IF XCA THEN PRINT"X KISEBB" : PRINT : BOTO 50
70 IF X)A THEN PRINT"X NAGYOBB" : PRINT : BOTO 50
80 PRINT" TALALT !" : PRINT . PRINT"EHHEZ ";I;
" DARAB PROBALKOZASRA VOLT SZUKSEGED ." : PRINT : PRINT
90 PRINT"FOLYTASSAM ? (I/N)"
100 XS=INKEYS
110 IF X3="I" THEN 20
120 IF XS="N" THEN PRINT" VISZLAT 1" ELSE 100
6.9 feladat
10 CLS
20 DEFINT x,Y
30 PRINT" 1 2 3 4 5 6 7 B 9 10"
4m X=10+1ü*RND(10) : Y=47
50 IF POINT(X,Y)=0 THEN SET(X,Y) : BOTO 40 ELSE Y=Y-1
60 IF YP2 THEN 50
70 GOTO 70
6.10 feladat
10 DEFINT I,K,X,Y
20 CLS
32 X=RND(12B)-1 : Y=RND(48)-1
40 SET(X,Y)
50 GOTO 120
60 X1=X : Y1=Y : I=RND(30) : K=RND(4)
70 IF K=4 THEN X=X+I : S=1 : IF XFI27 THEN X=127
B0 IF K=3 THEN X=X-I : S=-1 : IF XCO THEN X=0
90 IF K=2 THEN Y=Y+I : S=1 : IF YF47 THEN Y=47
100 IF H=1 THEN Y=Y-1 : S=-1 : IF Y(0 THEN Y=0
110 IF K§3 THEN FOR I=Y1 TO Y STEP S : SET(X,I) : NEXT I
ELSE FOR I=X1 TO X STEP S : SET(I,Y) : NEXT I
120 X$=INKEY$
130 IF X$="T" THEN 60
140 IF X$="U" THEN 20 ELSE 120
6.11 feladat
A 29-as sorban az X változót az egyenlőtlenség bal oldalára kell tenni.
6.12 feladat
Az INKEY kulcsszó után kötelező a dollárjel kitevése. Érdemes megfigyelni, hogy a 20-as
sorban a RESET utasítás általában nem azt a pontot oltja ki, amelyiket ezen sor SET utasítása
közvetlenül előtte kigyújtott! (Ez természetesen csak akkor hiba, ha a feladatunk egy olyan
program készítése, amelyik a T billentyű lenyomására a képernyőn véletlen helyen felvillant
egy pontot.)
6.13 feladat
Az 50-, 60-, 70-es sorok szintaktikusan csak akkor lesznek helyesek, ha az S változót karaktertí-
pusúként definiáljuk.
Ha a 26-as sorban az X változó értékének 130 vagy 128 generálódik, akkor a program a 46-es
sorban hibával leáll.
Amennyiben a 60-as sorra úgy érkezik a program végrehajtása, hogy előtte nem nyomtunk le
egyetlen billentyűt sem, akkor itt a program végtelen ciklusba kerül. Ezért célszerű a THEN
kulcsszó utáni címet 50-re módosítani.
67
Hetedik fejezet
LÁNC, LÁNC, KARAKTÉRLÁNC. ..
A karakterláncok összeadása
Az előző fejezetben megismerkedtünk a karaktertípusú változókkal. Lehető-
ség van ezek tartalmának összeadására vagy más néven a konkatenációra, ami
lényegében a karakterláncok összefűzésére szolgál. Igy például az
A$ = "LO" : B$ = "PATKO" ; C$ = A$ + B$ NL
parancs hatására a CS változó tartalma "LOPATKO" lesz. Vigyázzunk! Ez az
összeadás nem felcserélhető (nem kommutatív)! "LOPATKO" nem egyenlő
"PATKOLO"!
7.l feladat: Készítsünk olyan programot, amelyik beolvassa egymás után egy ötbetűs szó betűit
fordított sorrendben (karakterenként), majd kiírja a szót!
68
CLEAR
Oldjuk meg a következő feladatot!
7.2 feladat: Írassunk ki a képernyőre 200 darab csillag karaktert (*)! Próbálkozzunk több megoldás-
sal is!
Ezt a feladatot megoldhatjuk úgy is,
- hogy egy PRINT utasításba írunk 200 darab csillag karaktert egymás mellé,
vagy úgy,
- hogy 200 darab PRINT"*"; utasítást hajtatunk végre a számítógéppel például
egy FOR-ciklus segítségével, végül pedig úgy is,
- hogy egy karaktertípusú változót feltöltünk 200 darab csillag karakterrel,
például a következőképpen:
7.1 példaprogram
10 A$="*"
20 FOR I=1 TO 199
30 A$=A$+"*"
40 NEXT I
és ezen A$ változó tartalmát akarjuk kiíratni a képernyőre. Ekkor azonban OS
Error hibajelzést kapjuk. Ugyanezt a jelenséget tapasztaljuk a következő pél-
daprogram futtatásakor is, ha a C$ változónak olyan karakterláncot adunk
értékül, amelyben ötvennél több karakter szerepel.
7.2 példaprogram
10 INPUT C$
20 PRINTC$
30 GOTO 10
A számítógép bekapcsolásakor automatikusan egy CLEAR 50 parancs hajtó-
dik végre. Ez 50 karakternyi helyet biztosít a memóriában a karakterláncokkal
való műveletek elvégzésére, illetve ezek eredményeinek tárolására. Ha a 7.2
példaprogram futtatása előtt kiadjuk a CLEAR 200 NL parancsot, akkor a
CS változónak legfeljebb 200 karakterből álló karakterláncot adhatunk értékül
anélkül, hogy hibajelzést kapnánk. A 7.1 példaprogram esetében azonban a
CLEAR 200 NL parancs hatására biztosított hely kevés, mivel a karakterlán-
cok összefűzéséhez még további helyekre van szükség. A CLEAR 400 NL
parancs már elegendő helyet biztosít.
Fontos megjegyezni azt is, hogy a CLEAR parancs (ami utasításként is
használható) ezen kívül még törli az összes változó értékét és típusát is. Egy
további hatásával a kilencedik fejezetben foglalkozunk.
69
STRING$, ASCII-kódok, CHR$, ASC
A 7.2 feladat megoldható a STRING$ függvény segítségével is. Az
A$ = STRING$(200,"*")
utasítás hatására az AS változó éppen 200 darab csillag karakterrel töltődik fel.
Itt és a fejezet további részében az SS vagy idézőjelek közé tett karakterláncot
(ami lehet egyetlen karakter vagy az üres karakter is, a karakterlánc pedig nem
tartalmazhat idézőjelet), vagy karaktertípusú változót, vagy szövegkifejezést (pl.
AS + BS) jelöl. Az a, n, p betűk pedig vagy egy számot, vagy egy változót, vagy
egy aritmetikai kifejezést (pl. A + 2*C[2) jelölnek. A vizsgált esetekben a számí-
tógép mindig az a, n, p értékek egészrészét veszi, ezért a továbbiakban ezek
egészrészéről szólunk anélkül, hogy ezt külön kiírnánk.
Ezeket felhasználva a STRINGS függvény meghívása kétféle módon lehetsé-
ges. A
STRING$(p,s$)
függvényutasítás az SS első vagy egyetlen karakteréből álló p hosszúságú karak-
terláncot állít elő. (A p 256-nál kisebb nemnegatív egész szám, az SS pedig itt
nem lehet az üres karakter.)
7.3 példaprogram
10 A$="TATAMI" : B$="A "4-93 : C$="&"
20 D$=STRING$(11,"??") : K=7
30 PRINT D$; STRING$(5,C$); STRING$(3,A$)
40 PRINT STRING$(K,B$) , STRING$(K-3,D$+B$)
A
STRING$(p,a)
függvényutasításban a p értelmezése ugyanaz, mint előbb, az a számról pedig
a következőket kell tudni:
A képernyőn megjeleníthető karakterekhez hozzárendeltek egy 256-nál ki-
sebb nemnegatív egész számot, a karakter úgynevezett ASCII-kódját. A számí-
tógép tetszőleges karaktert annak ASCII-kódja alapján azonosít. (ASCII-
American Standard Code for Information Exchange: az infonnációcsere egy
szabványos amerikai kódja.)
Az első fejezetben már említettük, hogy a képernyőn 16 sorban, soronként
64 karakter jeleníthető meg egyszerre.
70
Egy karaktert tartalmazó mező még 6 részre, 6
grafikus pontra bontható.
Ezek mindegyike kigyújtható egy-egy SET utasítás-
sal. Ha egy karaktermező mind a 6 grafikus pontját
egyszerre akarjuk kigyújtani, akkor a 191-es
ASCII-kódot kell megadni.
7.4 példaprogram
10 CLEAR 64
20 REM EGY SOR OSSZES. KARAKTERMEZOJENEK KIGYUJTASA
30 D$=STRING$(64,191) '
40 CLS
50 PRINT D$
7.3 feladat: Gyújtsuk ki a képernyő összes grafikus pontját egy másodpercnél rövidebb idő alatt!
Ez már lényeges előrelépést jelent a harmadik fejezetben megismert rajzolási
sebességhez képest, de még ezt is lehet fokozni...
Érdekes lenne megtudni azt, hogy a különbö-
ző ASCII-kódoknak milyen karakterek felelnek
meg.
A CHRS függvény ehhez nyújt nagy segítséget. A
CHR$(a)
függvényutasítás az a ASCII-kódhoz tartozó karaktert állítja elő.
7.4 feladat: Írassuk ki 32-191-ig az ASCII-kódokhoz tartozó karaktereket! Újabb karakter mindig
egy billentyű lenyomására jelenjen meg.
71
Megjegyzések:
- Vizsgáljuk meg az ASCII-kódok jelentését l92-255-ig!
- A 0-31-es ASCII-kódú karakterek az ún. vezérlő karakterek. Például a
PRINT CHR$(23)
utasítás hatására a számítógép egy sorba 64 helyett csak 32 karaktert ír ki szóközökkel. A
PRINT CHR$(30)
utasítás hatására az aktuális kurzorpozíció sorában a kurzor utáni helyek törlődnek. (Kurzomak
nevezzük a képernyőn mozgó kis vízszintes vonalat.) A
PRINT CHR$(3l)
utasítás hatására az aktuális kurzorpozíciótól kezdve a képernyő végéig minden törlődik.
Az ASC(s$) függvényutasítással megkapjuk az s$ első vagy egyetlen karakte-
rének ASCII-kódját. Itt sem lehet az s$ az üres karakter!
7.5 feladat: Készítsünk olyan programot, amelyik bekér egy karaktert, majd kiírja az ASCII-kódját!
Tetszőleges billentyű lenyomására megismétli ezt.
Karakterláncok összehasonlítása
Képzeljük el, hogy feladatul kapjuk nevek számítógéppel történő névsorba
rendezését, azaz karakterláncokat kell összehasonlítani. Erre ezek ASCII-kódja
segítségével van mód. Egy karakterlánc "nagyobb" valamely másik karakter-
láncnál, ha az előbbi első karakterének ASCII-kódja nagyobb a másik első
karakterének ASCII-kódjánál. Ha a két karakter-
lánc elején azonos karakter(ek) van(nak), akkor
balról az első különböző karakter kódja dönt. Ha
egy karakterlánc egy másik karakterlánccal kezdő-
dik, akkor a hosszabb a "nagyobb".
Az elmondottaknak megfelelően az alábbi állítá-
sok IGAZ-ak:
"KUTYA" < "MACSKA"
"PIRI" < "PIRIKE"
" WILMOS" < "ARANKA"
"B12" < "B52"
7.6 feladat: Készítsünk olyan programot, amelyik beolvas 3 szót, ábécésorrendbe rendezi, majd
kiírja őket!
72
LEN, LEFT$, RIGHT$, MID$
Az s$ hosszát megkaphatjuk a LEN függvény segítségével.
7.5 példaprogram
10 A$="40" : B$="" : C$="RABLO"
20 PRINT LEN(AS), LEN(ES)
30 PRINT LEN(Aí+BS+CS), LEN(A§+BS), AS+" "+C§
Az s$ első p darab karakterét a LEFT$(s$,p) függvényutasítással, az utolsó p
darab karakterét pedig a RIGHT$(s$,P) függvényutasítással kaphatjuk meg.
Értelemszerűen a p nem lehet negatív.
7.6 példaprogram
10 TS="LEVELIBEKA" : BS="" : CS="PETE" : L=5
20 PRINT LEFTi(T5,L+1), "-", RIGHT5(T3,4)
30 PRINT LEFTs(Bs,3), RIGHTt(TS,12.5)
40 PRINT RIGHTS(TS+Cí,LEN(Ct)+4)
Lehetőség van egy karakterlánc valamely részének kiemelésére a MID$ függ-
vény segítségével. A
MID$(s$,n,p)
függvényutasítással az s$ n-edik karakterétől kezdődően p hosszúságú karakter-
láncot emelhetünk ki. A
MID$(s$,n)
függvényutasítással pedig az s$ n-edik karakterével kezdődő és az s$ további
karaktereit tartalmazó karakterláncot kapjuk meg.
Fontos megjegyezni, hogy a karakterláncok karaktereinek számozása 1-től
kezdődik és nem 0-től, ennek megfelelően az n pozitív. A p nemnegatív.
7.7 példaprogram
10 Rs="RuHAFoGAs"
20 PRINT MIDs(Rs,5,3), MIDs(Rs,5)
30 PRINT MIDi(RS,3,2)+" "+MIDS(RS,5,3)
40 PRINT MIDS(LEFTS("LOTTDHUZAS",5),2)
7.7 feladat: Készítsünk olyan programot, amelyik megkeresi két szó közös betűit!
7.8 feladat: Irjunk olyan programot, amelyik kiírja egy beolvasott szó szótagjainak számát!
73
VAL, STR$
A VAL függvénnyel karakterláncot numerikus értékké alakíthatunk át. Ha
a vizsgált karakterlánc számmal kezdődik, akkor ezt a számot kapjuk eredmé-
nyül, ha más típusú karakterrel, akkor nullát.
7.8 példaprogram
10 TS="KEREK PEREC"
20 PRINT VAL(T5), VAL("5ó1"), VAL("101 KISKUTYA"), VAL("SKDDA 125")
Numerikus értékeket karakterlánccá tudunk átalakítani a STR$ függvény
segítségével.
7.9 példaprogram
10 K=2.5 : L=-3. 14
20 PRINT K; K; FÍ,STRS(I'(); STRSUKÍ); STRSWÍ) : PRINT
30 PRINT STR:'F(L) , STRS(SGR(2*32) ) , STR3(2.5[2)
7.9 feladat: Hol a hiba?
10 CLEAR 500
20 I=1 : A5=S
30 FOR J=1 TO 8
40 I=I*2
50 NEXT
60 CLS
70 FOR J=1 TO I
80 AS=AS+S : PRINT AS
90 NEXT
7.10 feladat: Hol a hiba?
10 DEFSTR N
20 INPUT N
30 PRINT STRING(ASC(N),CHR(ALMA+ó4) : GÜTD 20
7.11 feladat: Hol a hiba?
10 CLS
20 INPUT "A SZU ";AS
30 FOR J=LEN(A5) TO 0 STEP -1
40 PRINT MIDi(Aí,J,LEN(A3)-J+1)
50 NEXT
60 STOP
74
Gyakorlatok a hetedik fejezet anyagához
7.1 gyakorlat: Készítsünk olyan programot, amelyik beolvas egy szót, majd kiírja a szó betüit
fordított sorrendben!
7.2 gyakorlat: Írjunk programot, amelyik megállapítja, hogy egy beolvasott szövegben hány darab
A betű van!
7.3 gyakorlat: Készítsünk olyan programot, amelyik beolvas egy szót, majd kiírja úgy, hogy minden
A betűje helyett csillagok jelennek meg!
7.4 gyakorlat: Írjunk olyan programot, amelyik beolvas egy szöveget és kiírja azt szóközök nélkül!
7.5 gyakorlat: Megadunk egy szót csupa nagybetűvel. Készítsünk olyan programot, amelyik kiírja
csupa kisbetűvel!
7.6 gyakorlat: Írassuk ki közvetlenül egymás mellé a négyzetszámokat ZGG-ig!
7.7 gyakorlat: Írjunk olyan programot, amelyik egy kettes számrendszerbeli számot tízesbe, egy
tízes számrendszerbeli számot pedig kettesbe vált át!
7.8 gyakorlat: Írassuk ki kétjegyű számok szorzatát! Ha a szorzat csak háromjegyű, akkor elé egy
nullát írjon a számítógép.
7.9 gyakorlat: Írjunk olyan programot, amelyik beolvas tíz számot, majd ezeket folyamatosan,
oszlopba rendezve kiírja úgy, hogy egy sorba pontosan öt számjegy kerüljön! (Esetleg az
utolsóba kevesebb.)
7.10 gyakorlat: A számítógépnek megadunk egy összeadást vagy szorzást a következő karakteres
formában:
"3+4" , "5*6"
Készítsünk olyan programot, amelyik kiírja e művelet eredményét!
75
A hetedik fejezet feladatainak egy lehetséges megoldása
7.1 feladat
10 DEFSTR A,B
zo CLS
sz PRINT"AZ OTBETUS szo BETUI FORDITOTT SORRENDBEN ?" : PRINT
40 FOR 1=1 TO 5 : INPUT B : A=B+A : NEXT I
sz PRINT A : PRINT
7.2 feladat
10 CLS
20 FOR I=1 TO 200 : PRINT "*"; : NEXT I
7.3 feladat
10 CLEAR 128
20 Aí=STRINGS(128,191)
30 FOR I=1 TO 8 : PRINT AS; : NEXT I
40 GOTO 40
(Előfordulhat, hogy ez a program egyes gépeken egy másodpercnél valamivel hosszabb idő alatt
gyújtja ki a képernyő Összes grafikus pontját.)
7.4 feladat
10 CLS
20 FOR I=32 TO 191
30 PRINT CHRS(I),
40 IF INKEYS="" THEN 40.
50 NEXT I
7.5 feladat
10 CLS
20 INPUT "A KARAKTER ";AS
30 PRINT"AZ AS= ";AS;" KARAKTER ASCII KODJA : "; ASC(AS)
40 IF INKEY5="" THEN 40 ELSE 10
Ha a szóközt tartalmazó karakter ASCII-kódját akarjuk megtudni, akkor a szóközt idézőjelek
között kell megadni.
7.6 feladat
10 CLS
20 INPUT"A HAROM SZO "; AS, BS, CS
30 IF ASPBS THEN DS=AS : AS=BS : BS=DS
40 IF C5)BS THEN PRINT A5,BS,CS : STOP
50 IF CS)AS THEN PRINT AS,CS,BS ELSE PRINT CS,AS,BS
ó0 END
76
7.7 feladat
10 CLS
20 INPUT "A KET SZO ";SS,ZS
30 J1=LEN(SS) : J2=LEN(ZS) : BS=" "
40 FOR K1=1 TO J1
50 FOR K2=1 TO J2
50 os=Mros(ss,K1,1)
70 IF D$<>HID$(Z$,K2,1) THEN 120
80 L=0
90 L=L+1
100 IF ns=nrDs(Bs,L,1) THEN 120
110 IF L=LEN(BS) THEN as=as+os ELSE 90
120 NEXT K2,K1
130 PRINT : PRINT"A KOZOS BETUK : ";BS : PRINT
7.8 feladat
10 CLS
20 zs="AE1ou"
30 INPUT"A szo ";ss
40 J1=LEN(SS) : J2=5 : B$=""
50 FOR K1=1 TO J1
50 FOR K2=1 TO J2
70 os=nrns(ss,K1,1)
80 IF ns=nrDs(zs,K2,1) THEN as=as+ns
90 NEXT K2,K1
100 PRINT = PRINT"A szo "; LEN(BS); " szorasu" = PRINT
7.9 feladat
A karaktertípusú változók értékadásánál és a konkatenációnál a dollár karaktert idézőjelek közé
kell tenni. Az AS változó értéke legfeljebb 255 hosszúságú karakterlánc lehet.
7.10 feladat
A STRING és a CHR kulcsszavak után mindig ki kell írni a dollárjelet.
Ezután ez a program kiszámítja a beolvasott N karakterlánc első karakterének az ASCII-
kódját. Amennyiben az ALMA nevű változó értéke G, akkor kiír az előző kód értékének
megfelelő számú "éj" karaktert.
7.11 feladat
A J =6 értékre a program hibajelzéssel leáll.
77
Nyolcadik fejezet
RUGALMASABB KÉPERNYŐCÍMZÉS
PRINT@
A könyv előző fejezeteiben többször említettük, hogy a számítógép képernyő-
jén 16 sorban soronként 64 karakter jeleníthető meg. A gépnek a
CLS : PRINT@500,"HAHO" NL
parancsot adva, a 7. sor 52. karakterpozíciójától kezdve kiíródik a "HAHO"
felirat (500 = 7 × 64 + 52). A képernyő bal felső sarkában van a 0. karakterpozí-
ció, a nulladik sornak a következő karakterei az 1., 2., Ennek megfelelően
az első sor nulladik karaktere a 64., a tizenötödik sor hatvanharmadik karaktere
az 1023. karakterpozíció. A PRlNT@I,s$ utasítással tehát a kurzort (ha az
I nemnegatív egész szám) az I-edik karakter-pozícióra állíthatjuk, majd innentől
kezdve kiírhatjuk az s$-et. A kurzor ilyen módon való címzésével az I-edik
karakterpozíció előtti helyek nem törlődnek.
Az utasításban szereplő I számra vagy a helyette álló aritmetikai kifejezés
értékére 0≤I≤1024 kell hogy teljesüljön, az s$-gel kapcsolatban pedig a hete-
dik fejezetben elmondottak érvényesek.
8.1 feladat: Vizsgáljuk meg a PRINT@I,s$ utasítás hatását, ha az I értéke nem egész szám!
8.2 feladat: Készítsünk olyan programot, amelyik valamilyen karakterekből álló keretben kiírja a
nevünket és címünket!
A 8.2 feladat megoldása során bizonyára felvetődött az a gondolat, hogy a
most megismert utasítás segítségével nemcsak feliratokat helyezhetünk el a
képernyőn, hanem szabadabban készíthetünk karakterekből álló ábrákat is.
78
8.3 feladat: Rajzoltassuk ki könyvünk kísérő figuráját a képernyőre!
Tabulálás
A PRINT utasítás következő fajtája a táblázatok elkészítését könnyíti meg,
amelynek alakja PRINT TAB(K). A K aktuális értékének 0 és 255 között kell
lennie. A számítógép K értékének 64-gyel való osztási maradékát veszi, és ha
ez nagyobb, mint az aktuális PRINT utasítás sorában a kurzor pozíciója, akkor
a kurzort az osztási maradéknak megfelelő karakterpozícióra állítja, ha kisebb,
akkor a gép a TAB(K) utasítást figyelmen kívül hagyja.
8.4 feladat: Készítsünk programot, amelyik az alábbi táblázatot kirajzolja, és a hiányzó adatokat
kitölti:
X INT(X) 25*X X*X SQR(X)
0
.5
1
1.5
2
2.5
3
3.5
4
4.5
5
5.5
6
79
DATA, READ, RESTORE
Most megismerkedünk egy újabb értékadási móddal,
amelynek különösen akkor lehet nagy haszna, ha a prog-
ram töbszöri futtatásánál a változóknak mindig ugyan-
azt az értéket akarjuk adni.
8.1 példaprogram
10 REM A DATA ES A READ UTASITASOK HASZNALATA
20 CLS
30 READ X,Y,Z,A$,B$,C$
40 PRINT X,Y,Z : PRINT A$;B$;C$
50 DATA 14,3.14,-2,A," ",KUKAC
A 30-as és az 50-es sorok együttesen egyenértékűek az alábbival:
30 X= 14 : Y=3.l4 : Z= -2 : A$="A" : B$=" " : C$="KUKAC"
Ügyeljünk arra, hogy a DATA utasításban felsorolt, vesszővel elválasztott
adatok típusai megegyezzenek a READ utasításban a nekik sorrendben megfele-
lő változók típusaival! A DATA utasítást a programban bárhol elhelyezhetjük.
Egy programban több DATA és READ utasítás is szerepelhet:
8.2 példaprogram
10 CLS
20 READ X,A$,B$
30 READ Y,Z,C$
40 PRINT x,v,z : PRINT A$;B$;C$
60 DATA 14,A
60 DATA " ",3.14,-2,KUKAC
70 DATA "EZT MAR NEM HASZNALJA FEL A PROGRAM !"
Ha egy DATA utasításban kevesebb adat van, mint ahány változó a READ
utasításban, akkor a gép a következő DATA utasítás adatait kezdi beolvasni.
Amennyiben ilyet nem talál, akkor a program hibajelzéssel leáll.
A DATA utasításban csak akkor kell a karakterláncot idézőjelbe tenni, ha
az szóközzel (" ") kezdődik vagy végződik. Az idézőjelek közé tett karakterlánc
nem tartalmazhat idézőjelet!
80
8.5 feladat: Oldjuk meg a 8.3 feladatot DATA és READ utasítások segítségével is!
8.6 feladat: Írassunk ki a képernyőre egy legalább két sorból álló szöveget hasonlóan, mint az a
televízió BETŰREKLÁM-jában látható!
8.7 feladat: Rajzoltassunk ki a képernyőre egy egyszerű ábrát, majd lássuk el feliratokkal! Az
adatokat DATA utasításokkal tároljuk.
8.8 feladat: Készítsünk programot, amelyik a képernyőn egy bábut jelenít meg és annak valamelyik
testrészét mozgatja!
Egy programban szerepelhet a RESTORE utasítás is. Ennek hatására a
következő READ utasításnál a legelső DATA utasítás első elemét kezdi beol-
vasni a program.
8.3 példaprogram
10 CLS
20 RESTORE
30 READ AS
40 IF AS="VEGE" THEN STOP
50 PRINT AS : PRINT
60 XS=INKEYS
70 IF XS="T" THEN 30
80 IF X§="E" THEN 10 ELSE 60
90 REH A HET TDRPE
100 DATA SZUNDI,SZENDE,HAPCI,MORGO,TUDOR,KUKA,VIDOR
110 DATA VEGE
8.9. feladat: Hol a hiba?
10 CLS
20 FOR I=0 TO 15
30 PRINT@I*ó4,I : PRINT@I*ó4+3;". SOR"
40 NEXT
50 GOTO 50
8.10 feladat: Hol a hiba?
10 CLS
20 FOR X=1 TO 10
30 READ Y :
PRINTX*b4+X,Y
40 NEXT
50 DATA A,B,C,D,E,F,G,H,I
8.11 feladat: Hol a hiba?
10 CLS
20 FOR K=1 TO ló
30 PRINT@K*ó4-ó,K*ó4-1;
40 NEXT
50 aoro 50
81
Gyakorlatok a nyolcadik fejezet anyagához
8.1 gyakorlat: Jelenjen meg a képernyő különböző helyein a "VILLOG" felirat!
8.2 gyakorlat: Készítsünk olyan programot, amelyik megkérdezi, hogy hova és milyen szöveget írjon
ki a képernyőre, és ezután végre is hajtja azt!
8.3 gyakorlat: Rajzoltassunk egyszerű figurát karakterekből!
8.4 gyakorlat: Oldjuk meg a 8.3 gyakorlatot SET és DATA utasítások segítségével!
8.5 gyakorlat: Rajzoltassuk ki néhány kémiai vegyület szerkezeti képletét a képernyőre!
8.6 gyakorlat: Rajzoltassunk olyan térképet a képernyőre, amelyen Budapest határa és a Duna
vonala látható!
8.7 gyakorlat: Készítsünk programot, amelyik a logaritmusfüggvény grafikonját rajzolja ki koordi-
náta-rendszerben!
8.8 gyakorlat: Módosítsuk a 8.4 feladat megoldását úgy, hogy általunk megadott kezdőértéktől,
kívánt lépésközzel íródjanak ki egy billentyű lenyomására a táblázat sorai!
8.9 gyakorlat: Jelenjen meg négy négyzet a képernyőn, majd véletlenszerűen ugráljon egyikből a
másikba egy felkiáltójel!
8.10 gyakorlat: A képernyőn megjelenő 9 X 9-es sakktáblán véletlenszerűen lépkedjen egy bábu!
A bábu grafikus pontokból álljon.
8.11 gyakorlat: Készítsünk stoppert a képernyőre! Az I billentyű lenyomására induljon, az S
billentyű lenyomására álljon meg, a 0 billentyű lenyomására pedig nullázódjon.
8.12 gyakorlat: Készítsünk olyan programot, amelyik kiír 16 darab, DATA utasításokkal tárolt
számot egymás alá, majd mindegyik mellé a négyzetét, és végül ezek mellé a köbét!
8.13 gyakorlat: Jelenjen meg 50 darab véletlenszerűen generált karakter a képernyőn egymás mellett,
majd fordított sorrendben tűnjön el!
8.14 gyakorlat: Rajzoltassunk véletlenszerűen kiválasztott karakterből egy betűt a képernyőre! Egy
billentyű lenyomására ezt ismételje a program.
8.15 gyakorlat: Rajzoltassunk véletlenszerűen kiválasztott karakterekből egy betűt a képernyőre!
Egy billentyű lenyomására ezt ismételje a program. (Ez a gyakorlat különbözik a 8.14 gyakor-
lattól!!!)
8.16 gyakorlat: Készítsünk olyan programot, amelyik kiír a képernyő közepére egy véletlenszámot
véletlenül kiválasztott karakterekből álló keretben!
8.17 gyakorlat: Generálja a számítógép véletlenszerűen a l28-tól l9l-ig terjedő ASCII-kódú karak-
tereket, és közben rakja azokat a helyükre egy 8 X 8-as táblázatba úgy, hogy annak a bal felső
helyére a 128-as, mellé a 129-es stb. ASCII-kódú karakter kerüljön!
8.18 gyakorlat: Rajzoltassunk egyszerű figurát a képernyőre grafikus karakterekből!
8.19 gyakorlat: Készítsünk olyan programot, amelynek ha megadunk egy -val, -vel ragos szót,
amelynek szótöve sz-re végződik, akkor kiírja a szót valamely sor végére elválasztva!
82
A nyolcadik fejezet feladatainak egy lehetséges megoldása
8.1 feladat
Ha az I értékének egészrésze negatív vagy l023-nál nagyobb, akkor hibajelzést kapunk, egyéb-
ként pedig az adott I értékének egészrészével dolgozik a program.
8.2 feladat
10 DEFINT I,J
20 CLS
30 REM KERETRAJZOLAS
40 FOR I=0 TO 63 : PRINT@I,"*"; : PRINT@14*64+I,"*"; : NEXT I
50 FOR J=1 TO 14 : PRINT@J*64,"*"; : PRINT@J*64+63,"*"; : NEXT J
60 REM SZOVEGIRAS A KERETBE
70 PRINT@414,"N E V"; : PRINT@542,"C I M";
90 GOTO 80
8.3 feladat
A bevezetőben megtalálható ennek a feladatnak a megoldása!
8.4 feladat
10 DEFINT I
20 CLS
30 X=0
40 PRINT" X";TAB(14);"INT(X)";TAB(27);"25*X";TAB(40);"X*X";
TAB(53);"SDR(X)" '
50 FOR I=0 TO 63 : PRINT "-"; : NEXT I
60 FOR I=2 TO 15
70 PRINT@I*64,X;TAB(13);INT(X);TAB(26);25*X;TAB(39);X*X;
TAB(52);SGR(X);
B0 X=X+.5
90 NEXT I
100 GOTO 100
A 70-es sorban azért van kurzor címzés, hogy közvetlenül a gondolatjelekből álló vonal alatt
kezdődhessen a kiíratás.
8.5 feladat
10 DEFINT 1
20 CLS
30 READ I
40 IF 1=1024 THEN 70
50 READ As A
50 PR1NTe1,As; : GOTO 30
70 GOT0 70
80 REM Az ALAKZAT ADATAI
90 DATA 286,*****,349,* A A *,413,* T *,477,* v *,542,*****,1024
8.6 feladat
10 DEFINT I
20 CLS
30 READ I
40 IF I=1024 THEN 100 ELSE PRINT@I,"";
50 READ A$
60 IF A$="&" THEN 30
70 FOR I1=0 TO 100 : NEXT
80 PRINT A$;
90 GOTO 50
100 GOTO 100
110 REM A KIIRANDO SZOVEG
120 DATA 279,K,E,D,V,E,S," ",B,A,R,A,T,U,N,K," ",!,&,525,
T,O,V,A,B,B,I," ",L,E,L,K,E,S," ",P,R,O,G,R,A,M,O,Z,A,S,T,
" ",K,I,V,A,N,U,N,K," ",!,!,!,&,1024
83
8.7 feladat
10
20
30
40
50
60
70
80
90
100
110
120
130
140
160
170
150 DATA
DEFINT I
CLS
REM AZ ABRA MEGRAJZOLASA
READ I1
IF I1=1024 THEN 70
READ I2 : SET(I1,I2) :
REM FELIRATOK
READ I
IF I=1024 THEN 110
READ AS : PRINT@I,A§; :
GOTO 110
REM AZ ABRA ADATAI
DATA 60,15,S8,14,56,13,55,12,55,10,5ó,7,58,ó,ó0,ó,ó2,7,ó3,
9,64,10,ó5,11,ó4,12,63,13,ó2,14
5B,1ó,5ó,15,54,15,51,15,4B,16,43,19,44,21,49,21,51,20,
53,19,S5,1B,56,17,58,1ó
ó3,15,b5,15,ó8,15,72,16,7ó,17.78,1B,79,19,77,20,75,21,
72,21,69,20,ó5,18,ó4,17,ó2,1ó
60,17,ó2,19,ó2,21,60.23,5B,25,55,27,52,29,49,31,47,33,
45,35,43,37,42,40,41,43,40,47,1024
ó5,EZ EGY VIRAG,B57,(---- EZ A ...,1024
BOTD 40
GDTO 80
DATA
DATA
DATA
8.8 feladat
10
20
30
40
50
60
70
80
90
DEFINT I
CLS
REM A FEJ RAJZOLASA
PRINT@ZBS," *****"; : PRINT@2B5+4*ó4," *****"; :
PRINT@285+ó4,"* A A *"; : PRINT@2B5+128,"* T *"; :
PRINT@285+192,"* V *";
FOR I=0 TO 300 : NEXT
PRINT@285+óB,"-"; : PRINT@2B8+192,"D";
FOR I=0 TO 300 : NEXT
PRINT@285+ó8,"A"; : PRINT@288+192,"V";
GDTÜ 50
8.9 feladat
_A 30-as sorba pontosvessző helyett vessző kell. Ha a PRINT utasítás listájának a végére
pontosvesszőt írunk, akkor az a kiíratás után nem emel sort.
8.10 feladat
Az Y változót karaktertípusúként kell definiálni. A DATA listájában a szükségesnél eggyel
kevesebb elem áll.
Érdemes megvizsgálni azt, hogy mi történik akkor, ha a 30-as sorban a PRINT kulcsszó után
a ,, @" jelet is kitesszük...
8.11 feladat
A program szintaktikus hibát nem tartalmaz, futásának eredménye mégsem az lesz, mint amit
az első ránézésre várnánk. Azért, mert ha a PRINT utasítás segítségével az 1023. karakterpozí-
cióba írun-k, akkor a számítógép mindenképpen végrehajt egy soremelést.
84
Kilencedik fejezet
MAGASABB DIMENZIÓK
Tömbök
Módosítsuk az 1.6 feladatot úgy, hogy nem 4, hanem 24 pont koordinátáit
kell megadni, majd ezután kigyújtani ezeket a pontokat!
Eddigi ismereteink birtokában természetesen megoldható ez a feladat is, de
bizonyára nem lelkesedünk érte túlságosan, hiszen 2- 24 = 48 darab változó
használatára lenne szükség. Használhatunk azonban ún. indexes változókat
vagy más néven tömböket, és ezek segítségével már egyszerűen megoldható a
probléma. Definiálhatunk a - 2- 24 változó helyett - 2 darab, egyenként 24
elemből álló tömböt, és a pontok koordinátáit ezekben tárolhatjuk. Ezek vala-
mely elemére az X(J), illetve az Y(J) formában hivatkozhatunk. A tömbök
indexezése nullával kezdődik, tehát a 24 elemű X tömb elemei: X(0), X(1), X(2),
..., X(22), X(23). Ennek megfelelően az X tömb J-edik eleme az X(J), ahol
0≤J≤23. A tömbelemekkel ugyanúgy dolgozhatunk mint a változókkal, és
azokhoz hasonlóan a tömböket is definiálhatjuk egész típusúaknak, valós típu-
súaknak, duplapontosságúaknak vagy karaktertípusúaknak.
A tömbök méreteit a DIM utasítással definiálhatjuk.
9.1 példaprogram
10 REM AZ 1.6 FELADAT MDDDSITASA
20 DEFINT I,X,Y
30 CLS
40 DIM x(23),v(23)
50 PRINT"KEREM A 24 PONT KDDRDINATAIT 2"
60 FOR 1=a TO 23 : INPUT X(I),Y(I) : NEXT I
70 CLS
80 FOR I=0 TO 23 : SET(X(I),Y(I)) : NEXT I
90 GOTO 90
Megjegyzés: Ha egy tömb méreteit nem definiáljuk, akkor a számítógép automatikusan l l eleműnek
veszi, tehát indexének lehetséges legnagyobb értéke 10 lehet.
9.1 feladat: Módosítsuk a 9.1 példaprogramot úgy, hogy 24 különböző pont koordinátáit kérje be
a számítógép, majd ezután gyújtsa is ki őket!
9.2 feladat: Véletlenszerűen jelenjenek meg a hónapok nevei a képernyő közepén!
9.3 feladat: A 6.9 feladatra adott megoldásunkat módosítsuk úgy, hogy az oszlopok növekedése ne
lassuljon, a számok kiíratásához pedig használjuk a PRINT@I) utasítást!
85
A 9.1 példaprogramban használt X és Y tömbök egydimenziósak voltak.
Használhatunk azonban két- vagy többdimenziós tömböket is. A kétdimenziós
(például 4 oszlopból és 5 sorból álló 4 X 5-ös) S tömb elemeire az S(I,J) formá-
ban hivatkozhatunk. Az S(2,3) tehát a tömb 2. oszlopának 3. eleme. A sorok
és az oszlopok számozása itt is nullával kezdődik!
A következő példaprogramunkban a 128 X 48-as K tömböt feltöltjük 0 és 101
közé eső véletlen egész számokkal. A tömb K(X,Y) elemét feleltessük meg a
képernyő (X,Y) koordinátájú pontjának, és pontosan akkor gyújtsuk ki azt, ha
a neki megfelelő tömbelem értéke öttel osztható:
9.2 példaprogram
10
20
30
40
50
60
70
80
90
DEFINT K,X,Y :
CLS :
PRINT@6*b4+5,"FELTOLTOM A TOMBOT !"
FOR X=0 TO 127 : FOR Y=0 TO 47 : K(X,Y)=RND(100)
CLS
FOR X=0 TO 127
FOR Y=0 TO 47
H=H(X,Y)/5
IF 5*K=H(X,Y) THEN SET(X,Y)
NEXT Y,X
DIN K(127,47)
: NEXT Y,
100 GOTO 100
86
9.4 feladat: Írassuk ki egy 9 X 9-es tömb elemeit a képernyőre többféle elrendezésben is! (A tömb
elemeit előzetesen töltsük fel véletlenszámokkal!)
Általában akárhány dimenziós tömböket is használhatunk. A dimenziószám-
nak egyedül az szab határt, hogy a tömb elférjen a memóriában.
Megjegyzés: Ha egy többdimenzió_s tömb egyik indexének értéke sem lehet nagyobb 10-nél, akkor
ezt a tömböt nem kell a DIM utasítással deüniálni. Ezt általában mégis tanácsos megtenni, mert
így a tömb számára kevesebb helyet foglalunk le a memóriában.
A DIM utasításban szereplő tömbök
indexei
nem változók, illetve aritmetikai kifeje-
zések is lehetnek. Ezek aktuális értéké-
nek nemnegatív számoknak kell lenni-
ük akkor, amikor a DIM utasítás végre-
hajtásra kerül. Ezt nevezik dinamikus
tőmbdejíniálásnak.
9.5 feladat: Készítsünk olyan programot, amelyik
beolv
ja a
adat legyen.
nemcsak konkrét számok, ha-
as N darab számot, majd ezek közül kiír-
hárommal oszthatókat! Az N bemenő
CLEAR
Tanulmányozzuk át a következő példaprogramot!
9.3 példaprogram
10 DEFINT I,N,X
20 CLS
30 INPUT"HANY DARAB SZAM LESZ ";N : N=N-1
40 DIM X(N)
50 FOR I=0 TO N : INPUT X(I) : NEXT I
60 CLS '
70 PRINT@3*ó4,"A HARDMMAL OSZTHATOK :" : PRINT
80 FOR I=0 TO N :
X=X(I)/3 :
IF X(I)=3*X THEN PRINT X(I),
90 NEXT I
100 PRINT@14*ó4,"HA FDLYTATOD, NYOMD LE A T-BILLENTYUT 9";
110 A§=INHEY5
120 IF A3="T" THEN 130 ELSE 110
130 CLEAR
140 GOTO 10
87
Észrevehettük, hogy ez a program megoldása lehet a 9.5 feladatnak, de tartal-
maz egy olyan utasítást, amellyel már a hetedik fejezetben megismerkedtünk,
ezúttal azonban új szerepe van. Próbáljuk ki, hogy mi történik, ha a 130-as
sorból elhagyjuk a CLEAR utasítást, és úgy futtatjuk le a programot!
A hibajelzés oka az volt, hogy amikor a program másodszor érkezett a tömböt
definiáló DIM X(N) utasításhoz, a számítógép az egyszer már definiált X töm-
böt akarta újradimenzionálni. Ez csak úgy lehet, ha előtte a CLEAR utasítás
segítségével a tömb korábban meghatározott méretét töröljük. (Ne feledjük
továbbá azt sem el, amit már a hetedik fejezetben láttunk, hogy a CLEAR
utasítás ezen kívül még törli az összes változó típusát és értékét is!)
9.6 feladat: Hol a hiba?
10 CLS
20 PRINT@6*ó4,"A 13-NAL KISEBB POZITIV EGESZEK :"
30 FOR I=1 TO 12
40 A(I)=I
50 NEXT I
60 FOR J=12 TO 1 STEP -1
70 PRINT A(J),
80 NEXT J
88
9.7 feladat: Hol a hiba?
10
FOR I=1 TO 5 :
FOR J=1 TO 5 :
FOR K=1 TO 5 :
FOR L=1 TO 5 :
B(I,J,K,L)=RND(10) :
NEXT L,K,J,I
9.8 feladat: Hol a hiba?
20
30
40
50
60
70
80
CLS
INPUT N : DIM A(N)
FOR J=1 TO N
A(J)=J*J : PRINT SQR(A(J))/A(0)
NEXT
FOR H=1 TO 300 : NEXT
GOTO20
9.9 feladat: Hol a hjba?
10
20
30
40
50
60
70
80
90
VELETLEN=RND(20) :DIM TÜMB(VELETLEN) . ÜT=5
CLS
INPUT EGESZZ,FEL,DUPLAPRECIZ#,STRINGECSHES
CLS .
MENTÜZ=EBESZZ/ló : EGESZ%=ABS(EGESZZ-MENTÜZ*1ó)
ALLJ=VELETLEN : INDULJ=INT(SGR(VELETLEN)/ÜT)
FOR RÜHANJ=INDULJ TO ALLJ
TÜMB(RÜHANJ)=FEL*DUPLAPRECIZ#-RÜHANJ
PRINT@EGESZZ*ó4+VELETLEN,CHR3(GSC(STRINGECSKES));
TÜMB(RÜHANJ)
100 NEXT RÜHANJ
110 REMELEM,HÜGY TETSZETT 9
89
Gyakorlatok a kilencedik fejezet anyagához
9.1 gyakorlat: Írassuk ki a képernyőre a "VELETLEN" feliratot, de a betűk véletlenszerű sorrend-
ben jelenjenek meg!
9.2 gyakorlat: Készítsünk programot, amelyik bekér 10 nevet, majd véletlen párosításban kiírja
azokat!
9.3 feladat: Jelenjen meg 20 véletlenszám a képernyőn a generálás sorrendjében, majd ugyanezek,
de csökkenő sorrendben!
9.4 gyakorlat: Készítsünk olyan programot. amelyik kiírja a PASCAL-háromszög első 10 sorát!
9.5 gyakorlat: Egy tanuló ellenőrzőjében 10 tantárgy számára tantárgyanként 6 osztályzat beírására
van lehetőség egy hónapban. Készítsünk programot, amelynek segítségével az ellenőrzőt helyet-
tesíthetjük, jegyeket írhatunk be, illetve meg is nézhetjük, hogy valamely tantárgyból milyen
jegyek vannak beírva!
9.6 gyakorlat: Végeztessünk a számítógéppel 1000 darab lottószám húzást, majd ezután kérésre
mondja meg a program, hogy valamely számot hányszor húzott ki!
9.7 gyakorlat: Hajtassuk végre 1000-szer a számítógéppel az RND(50) függvényutasítást, és grafiku-
san ábrázoljuk a kapott véletlenszámok eloszlását!
9.8 gyakorlat: Készítsünk programot, amelyik egy adott számig kiírja a prímszámokat!
9.9 gyakorlat: Készítsünk programot, amelyik beolvas 16 darab számot, majd kiírja az ezeknek
megfelelő ASCII-kódú karaktereket, ha ilyenek léteznek!
9.10 gyakorlat: Készítsünk programot, amelyik egymás után bekéri egy szó betűit, majd kiírja
azokat ASCII-kódok szerint sorrendbe rendezve egy újabb szó formájában! A szó hossza
bemenő adat legyen.
9.11 gyakorlat: Írjunk olyan programot, amelyik 20 véletlenszerűen kiválasztott betűből véletlensze-
rűen kiválaszt Ötöt, ezeket összefűzi egy szóvá, majd kiírja a képernyőre! Ezután az U billentyű
lenyomására új szót ír ki, a B billentyű lenyomására pedig új betűkészlettel kezdi elölről.
9.12 gyakorlat: Rajzoltassunk Öt darab A betűt a képernyőre grafikus (128-191 ASCII-kódú)
karakterekből!
9.13 gyakorlat: Készítsünk programot a MEMÓRIA-játékra!
9.14 gyakorlat: Készítsünk programot a TORPEDÓ (vagy más néven TENGERI CSATA)-játékra!
9.15 gyakorlat: Végeztessünk a számítógéppel 1000 darab lottószám húzást! Ezután jelenjen meg a
képernyőn vagy számszerűen vagy grafikusan szemléltetve (attól függően, hogy mit kértünk)
az, hogy az egyes számokat hányszor húzta ki a számítógép.
9.16 gyakorlat: Készítsünk olyan programot, amelyik beolvas 10 szót, majd hosszúságuk szerint
sorrendben kiírja őket!
9.17 gyakorlat: Készítsünk olyan programot, amelyik beolvas 16 egész számot, majd úgy írja ki
egymás alá őket, hogy az azonos helyiértékű számjegyek egymás alá kerüljenek!
9.18 gyakorlat: Készítsünk nyelvtani gyakorló programot, amelyik a j-t vagy az Iy-t tartalmazó
szavak helyesírását gyakoroltatja!
90
A kilencedik fejezet feladatainak egy lehetséges megoldása
9.1 feladat
10 CLS
20 DEFINT I,J,X,Y
30 DIN X(23),Y(23)
40 PRINT"KEREM A 24 PONT KOORDINATAIT 9"
50 FOR I=0 TO 23
60 INPUT X(I),Y(I)
70 IF I=0 THEN 110
80 FOR J=0 TO I-1
90 IF X(I)=X(J) AND Y(I)=Y(J) THEN
PRINT"ILYEN MAR VOLT !" : GOTO 60
100 NEXT J
110 NEXT I
120 CLS
130 FOR I=0 TO 23 . SET(X(I),Y(I)) : NEXT I
140 GOTO 140
9.2 feladat
10 DEFSTR A : DIN A(11)
20 A(0)="JANUAR" : A(1)="FEBRUAR" : A(2)="MARCIUS" :
A(3)="APRILIS" : A(4)="MAJUS" : A(5)="JUNIUS" :
A(6)="JULIUS" : A(7)="AUGUSZTUS" : A(B)="SZEPTEMBER" :
.A(9)="OKTOBER" : A(10)="NÜVEMBER" : A(11)="DECEMBER"
30 CLS
40 PRINT@6*64+20,A(RND(12)-1)
50 FOR I=1 TO 300 : NEXT
60 GOTO 30
9.3 feladat
1m CLS
20 DEFINT x,x,v
30 FOR x=1 TO 10 : PRINT@5+I*5,I : NEXT 1
40 I=RND(10) : x(x)=x(x)+1 : x=12+1m*1 : v=47-x(1)
50 IF vaz THEN SET(X,Y) : GOTO 40
60 GOTO 60
A programból látható, hogy a számítógép megkülönbözteti az X változót és az X tömböt.
9.4 feladat
1m DIM A(9,9)
29 FOR x=m TO 9 :
30 CLS
40 FOR x=m TO 9 :
se FOR 1=m TO 9 :
60 FOR J=0 TO 9 :
79 sora 70
FOR J=0 TO 9 :
A(I,J)=RND(9) : NEXT J,I
FOR J=0 TO 9 :
FOR J=0 TO 9 :
FOR I=0 TO 9 :
PRINT A(I,J); : NEXT J,I
PRINT@(I+6)*64+2*J,A(I,J); : NEXT J;I
PRINT@(I+6)*64+30+2*J,A(J,I); : NEXT 1,J
9.5 feladat
10 DEFINT I,N,X
20 CLS
30 INPUT"HANY DARAB sznn LESZ ":N : N=N-1
4m DIM X(N) '
50 FDR 1=o TO N : INPUT x(1) : NEXT 1
az CLS
70 PRINT@3*64,"A HAROMMAL OSZTHATOH :" : PRINT
em FOR I=m TO N
90 x=x(x)/3
100 IF x(1)=3*x THEN PRINTX(I),
119 NEXT 1
120 STOP
91
9.6 feladat
A ll-nél nagyobb elemszámú tömböket definiálni kell.
9.7 feladat
Mivel a négydimenziós B tömb méreteit nem definiáltuk, ezért a számítógép azt automatikusan
egy
11 x 11 x 11 x 11-es
tömbként definiálja. Ekkora tömb a memóriában nem fér el, ezért kapunk hibajelzést. Ha a
B tömböt a
DIM B(5,5,5,5)
utasítással a program elején definiáljuk, akkor az már működőképes lesz.
9.8 feladat
Az A(0) tömbelem értéke 0 (amennyiben korábban nem adtunk neki más értéket), ezért az 50-es
sorban hibajelzést kapunk.
Ha az A tömb méretét egyszer már definiáltuk egy programban, akkor újradefiniálás előtt a
korábbi méretet egy CLEAR utasítással törölni kell. Ezt az utasítást beírhatjuk például a 25-ös
sorba.
9.9 feladat
A változónevek nem tartalmazhatnak BASIC-kulcsszavakat!
(VELETLEN - LET, LEN TOMB - TO
STRINGECSKE - STR, STRING MENTO - TO)
92
Tizedik fejezet
EGY PROGRAM PROGRAMOKAT IS
TARTALMAZHAT
Egy program megtervezése
Írjunk együtt programot a következő feladatra:
Mozogjon véletlenszerűen egy bábu a képernyőn megjelenő 8 X 8-as sakktáblán!
Ez a feladat alapvetően két kis program kidolgozását kívánja:
l. Sakktáblarajzoló
2. Bábumozgató
Vizsgáljuk meg egyes részleteiket közelebbről!
l. A sakktáblarajzoló programot még további részekre bonthatjuk:
Rajzolást vezérlő
Négyzetrajzoló
Ehhez tervezzük meg a sakktábla méreteit! Egy mezője - a grafikus pont
alakját figyelembe véve - legyen 10 X 5-ös. Ennek megfelelően ezek bal felső
pontjainak koordinátái (A, B):
(0,0) (10,0) ... (70,0)
(0,5) (10,5) ... (70,5)
. . ... .
. . ... .
(0,35) (10,35) ... (70,35)
Az egyes mezőket ezekkel a koordinátákkal fogjuk jellemezni.
Pontosan azokat a részeket kell fehérre festeni, amelyek első koordinátájának
tizedrésze és a második koordinátája egyszerre páros vagy egyszerre páratlan.
Ezt felhasználva a sakktáblarajzoló program a következő:
93
10.1 példaprogram
10 REM SAKKTABLAT RAJZOLO PROGRAM
20 CLS
30 DEFINT A-Z
40 REM A RAJZÜLAST VEZERLÜ RESZ
50 FOR A=0 TO 70 STEP 10
60 FOR B=0 TO 35 STEP 5
70 X=A/20 : Y=B/2
80 IF A=20*X AND B=2*Y THEN 100
90 IF A320*X AND B?2*Y THEN 100 ELSE 150
100 REM NEGYZETRAJZÜLÜ
110 FOR I=0 TO 9
120 FOR H=0 TO 4
130 SET(A+I,B+H)
140 NEXT H,I
150 NEXT B,A
160 GOTO 160
2. A bábumozgató programot is két részre bonthatjuk:
Mozgatást vezérlő
Báburajzoló
Először a 10 X 5-ős mezőben egy 9 grafikus pontból álló bábut tervezzünk.
Ennek a bábunak a koordinátái az (A,B) mezőben:
(A+4,B+l), (A+5,B+l), (A+6,B
(A+4,B+2), (A+5,B+2),
(A+3,B+3), (A+4,B+3), (A+5,B+3), (A+6,B
Készítsük el a programot úgy, hogy fehér mezőben
ezeket a pontokat kikapcsoljuk, feketében pedig
kigyújtjuk.
10.2 példaprogram
94
10
20
30
40
50
60
70
B0
REM BABURAJZOLO
RESTORE
FOR I=1 TO 9
READ x,v
IF PDINT(A+X,B+Y) THEN RESET(A+X,B+Y) ELSE SET(A+X,B+Y
NEXT I
sora 70
DATA 4,1,5,1,6,1,4,2,5,2,3,3,4,3,5,3,6,3
Vegyük észre, hogy ezt a programot ugyanazon értékekre kétszer egymás után
lefuttatva kirajzolja a bábut, és utána le is törli!
A bábumozgatás vezérlésének megírása már nem nehéz feladat, így a bábu-
mozgató
program következő:
10.3 példaprogram
10
20
30
40
50
60
70
80
90
100
110
120
130
140
150
160
170
REM BABUMDZGATD
A=(RND(8)-1)*10 :
REM BABURAJZDLD
RESTORE
FOR I=1 TO 9
READ x,v _
IF PDINT(A+X,B+Y) THEN RESET(A+X,B+Y) ELSE SET(A+X,B+Y)
NEXT I
FDR 1=1 TO zmm :
REM BABURAJZDLD
RESTORE
FOR I=1 TO 9
READ x,v
IF PDINT(A+X,B+Y)
NEXT I
GOTO 2m
DATA 4,1,S,1,ó,1,4,2,S;2,3,3,4,3,5,3,ó,3
B=(RND(8)-1)*5
NEXT
THEN RESET(A+X,B+Y) ELSE SET(A+X,B+Y)
10.1 feladat: A fejezetek eddigi példaprogramjainak felhasználásával készítsünk olyan programot,
amelyik véletlenszerűen mozgat a képernyőn megjelenő 8 X 8-as sakktáblán egy bábut!
i? h.
57915 e
"m
_ "J n gy 5,.
2 a r: mik _ '*
Mán/n 7 1' J
Szubrutinok
Az előző problémára megoldásként adott programban előfordul olyan prog-
ramrész (a báburajzoló), amit többször is leírtunk. Jó lenne, ha ezt csak egyszer
kellene elvégezni, és amikor szükség van rá, mindig csak hivatkoznánk az
egyszer leírt programrészre.
Az is látható, hogy ezt a programot több kisebb, már előre elkészített részből
állítottuk össze. Az előbbi gondunk egyszerűen megoldható, és az ilyen típusú
programszerkesztés lényegesen megkönnyíthető a szubrutinok felhasználásával.
A szubrutinok bizonyos értelemben önálló programrészek, alprogramok,
amelyekre mint BASIC-programokra, minden eddig megismert szabály érvé-
nyes. A szubrutint a főprogramban elhelyezett GOSUB sorszám utasítással
hívhatjuk meg, ahol a sorszám a szubrutin kezdő sorának sorszáma. A szubru-
tinnak tartalmaznia kell legalább egy RETURN utasítást, amelynek végrehajtá-
sakor a vezérlés a szubrutint meghívó GOSUB utasítást követő utasításra
adódik át.
A 10.1 feladatot szubrutinok felhasználásával a következőképpen lehet meg-
oldani:
10.4 példaprogram
10 REM SAKKTABLAN BABUT MOZGATO PROGRAM
20 CLS
30 DEFINT A-Z
40 GOSUB 70
50 GOSUB 220
60 GDTO 50
70 REM SAKKTABLAT RAJZDLO RESZ
80 REM RAJZOLAST VEZERLO RESZ
90 FOR A=0 TO 70 STEP 10
100 FOR B=0 TO 35 STEP 5
110 x=A/20 : Y=B/2
120 IF A=20*X AND B=2*Y THEN GOSUB 160
130 IF A)20*X AND B§2*Y THEN GOSUB 160
140 NEXT B,A
150 RETURN
160 REM NEGYZETRAJZDLO
170 FOR I=0 TO 9
180 FOR K=D TO 4
190 SET(A+I,B+K)
200 NEXT 0,1
210 RETURN
220 REM BABUMOZGATO
230 A=(RND(8)-1)*1D : B=(RND(8)-1)*5
240 GOSUB 280
250 FOR I=1 TO 200 : NEXT
260 GOSUB 280
270 RETURN
96
2em REM BABURAJZOLO
29m RESTORE
sem FOR 1=1 TO 9
31m READ x,v
320 I F PO INT (A+X , B+Y) THEN RESET (A+X , B+Y) ELSE SET (A+X , B+Y)
ssm NEXT 1
340 RETURN
ssm REM A BABU ADATAI
sem DATA 4,1,5,1,6,1,4,2,5,2,3,3,4,3,5,3,6,3
A 10-60-as sorokat tekinthetjük egy főprogramnak. Ez meghívja a
SAKKTABLAT RAJZOLO RESZ
elnevezésű szubrutint, ami megrajzolja a sakktáblát, majd állandóan ismételve
meghívja a
BABUMOZGATO
szubrutint, ami a bábu rajzolását és mozgatását végzi. A sakktáblarajzoló
szubrutin többször meghívja a
NEGYZETRAJZOLO
szubrutint, a bábumozgató rész pedig a
BABURAJZOLO
szubrutint.
Megjegyzés: Az utolsó mondatunkban leírtakat szubrutinok egymásba skatulyázásának nevezzük.
Érdemes megvizsgálni, hogy mi történik akkor, ha a 10.4 példaprogramból a
60-as sort töröljük, és a programot lefuttatjuk!
97
A hibaüzenet oka az, hogy a főprogramból a GOSUB utasítás nélkül jutottunk
el a 170-es sorban levő RETURN utasításhoz. Ennek az elkerülésére példát
láthatunk a következő programvázlatban, aminek tanulmányozása hasznos a
szubrutinok alkalmazásához is:
10.5 példaprogram
10 REM PROGRAM SZUBRUTINOKKAL
20 REM A FOPROGRAM A 10-600 SOROKBAN
80 REM AZ ÉLSD SZUBRUTIN MÉGHIVASA KOVÉTKÉZIH
90 GOSUB 2000
100 AZ ÉLSO SZUERUTIN VÉGRÉHAJTASA UTAN IDE TÉRUNK VISSZA
150 REM UJRA AZ ÉLSO SZUBRUTIN MÉBHIVASA KOVÉTKÉZIK
160 GOSUB 2000 : RÉM IDE TERUNK VISSZA
230 RÉM A MASODIK SZUBRUTIN MÉGHIVASA KÜVETHEZIH
240 GOSUB 2500
250 REM A MASÜDIK SZUBRUTIN VÉGRÉHAJTASA UTAN IDE TÉRUNK VI
600 END : REM.A PROGRAM vess
2000 RÉM AZ ELSÜ SZUBRUTIN UTASITASAI KOVETHÉZNEK
2320 RETURN : RÉM VISSZATÉRÉS A FOPRÜGRAMHDZ
2500 RÉM A MASODIK SZUBRUTIN UTASITASAI KÜVÉTKÉZNÉK
2700 RETURN : RÉM VISSZATÉRÉS A FOPRÜGRAMHÜZ
10.2 feladat: Készítsünk olyan programot, amelyik véletlenszerűen rajzol vagy egy véletlen hosszú-
ságú vonalat, vagy egy véletlen nagyságú téglalapot a képernyőre, majd ezután az I billentyű
lenyomására ezt ismétli, az N billentyű lenyomására pedig leáll!
10.3 feladat: Írjunk olyan programot, amelynek bemenő adatként a T, H, TH, HT érté_kek valame-
lyikét megadva rendre egy nagy T betű, egy nagy H betű, egy nagy T és egy nagy H betű, illetve
egy nagy H és egy nagy T betű rajzolódik ki a képernyőre!
98
Érdemes a korábbi fejezetek gyakorlatai és feladatai közül megkeresni azokat,
amelyek megoldásainak egyes részletei többször ismétlődnek, vagy a program
jól elkülöníthető részekre bontható, és ezeket szubrutinokkal is megoldani!
10.4 feladat: Készítsünk olyan programot, amelyik kiír öt darab, keretben elhelyezett Iottószámot!
10.5 feladat: Készítsünk olyan szubrutint, amelyik valamilyen alakzatot rajzol a képernyőre! Ezt a
szubrutint felhasználva írjunk olyan programot, amelyben tetszőleges billentyűt leütve, a
képernyőn véletlen helyen, véletlen nagyságban vagy kirajzolja az alakzatot, vagy az alakzat-
nak megfelelő helyet töröl!
Kapcsoló utasítások
Futtassuk le a következő példaprogramot!
10.6 példaprogram
10 CLS
20 INPUT 1
30 ON I GOTO 100,200,3OO : REM KAPCSOLD
40 STOP
100 PRINT"I=1" : STOP
200 PRINT"I=2" : STOP
300 PRINT"I=3" : STOP
Tapasztalhattuk, hogyha az I változó értéke l, 2 vagy 3, akkor a vezérlés rendre
a 100-as, 200-as, vagy a 300-as sorra adódik át. Ha az l változó értéke nem egész
szám, akkor annak egészrészét veszi, ha negatív, akkor a program hibajelzéssel
leáll, ha pedig nulla vagy nagyobb mint három, akkor a 40-es sorral folytatódik
a program.
Ha a 10.6 példaprogram 100-as, 200-as, 300-as soraiban szubrutinok kezdőd-
nek, akkor azokat a
30 ON I GOSUB 100, 200, 300
utasítással hívhatjuk meg. Ebben az esetben a szubrutint befejező RETURN
utasítás után mindig a 40-es sorra adódik vissza a vezérlés.
10.6 feladat: Írjunk olyan programot, amelyik beolvas egy szót, majd
az 1 billentyű lenyomására kiírja annak hosszát,
a 2 billentyű lenyomására kiírja a szó magánhangzóit,
a 3 billentyű lenyomására kiírja a magánhangzók számát,
a 4 billentyű lenyomására kiírja a szót visszafelé,
az 5 billentyűt lenyomva pedig új szó megadását várja! A lehetséges választásokról állandóan
tájékoztató legyen a képernyőn.
99
10.7 feladat: Hol a hiba?
10 CLS
20 FOR I=0 TO 100
30 PRINT@0,I;
40 GOSUB 60 : GOSUB 80
50 NEXT
60 SET(11,21)
70 RETURN
80 RESET(11,21)
90 RETURN
100 END
10.8 feladat: Hol a hiba?
10 CLS
20 GOSUB 30 : GOTO 20
30 SET(22,31)
40 GOSUB 60
50 RETURN
60 RESET(22,31)
70 RETURN
Gyakorlatok a tizedik fejezet anyagához
10.1 gyakorlat: Készítsünk olyan programot, amelyik beolvas N darab számot, csökkenő sorrendbe
rendezi és kiírja a képernyőre őket! Az N bemenő adat legyen.
10.2 gyakorlat: Készítsünk programot, amelynek segítségével éves költségvetésünket tartjuk nyil-
van!
10.3 gyakorlat: Mozogjon három négyzet egymástól Függetlenül véletlenszerűen a képernyőn!
10.4 gyakorlat: Jelenjen meg a képernyőn öt ajtó. Ezeket véletlenszerűen nyitják és csukják. Készít-
sük el ezt a programot!
10.5 gyakorlat: Készítsünk órát a képernyőre szubrutinok felhasználásával!
10.6 gyakorlat: Mozogjon egy bábu a képernyőn!
10.7 gyakorlat: Véletlenszámokkal töltsünk fel egy 6 X 6-os tömböt. Válasszuk ki minden sorból a
legkisebb elemet, majd közülük írjuk ki a legnagyobbat, ezután minden oszlopból válasszuk
ki a legnagyobb elemet, majd ezek közül írjuk ki a legkisebbet!
10.8 gyakorlat: Készítsünk olyan programot, amelyik bekéri egy háromszög három csúcspontjának
a koordinátáit, és kirajzolja a háromszöget!
10.9 gyakorlat: Írjunk olyan programot, amelynek segítségével két 50 jegyű számot össze tudunk
adni
10.10 gyakorlat: Írjunk olyan programot, amelynek segítségével két 20 jegyű számot össze tudunk
szorozni!
10.11 gyakorlat: Készítsünk olyan programot, amelyiknek ha megadunk egy születési dátumot és
a mai dátumot, akkor kiszámolja a két időpont között eltelt napok számát!
100
A tizedik fejezet feladatainak egy lehetséges megoldása
10.1 feladat
10 REM SAKKTABLAT RAJZDLD PROGRAM
20 CLS
30 DEFINT A-Z
40 REM A RAJZDLAST VEZERLD RESZ
50 FOR A=0 TO 70 STEP 10
60 FOR B=0 TO 35 STEP 5
70 x=A/20 : Y=B/2
80 IF A=20*X AND B=2*Y 100 THEN
90 IF A)20*X AND B)2*Y THEN 100 ÉLSE 150
100 REM NEGYZETRAJZDLD
110 FOR I=0 TO 9
120 FDR K=0 TO 4
130 SET(A+I,B+K)
140 NEXT K,I
150 NEXT B,A
160 REM BABUMDZGATD RESZ
170 A=(RND(B)-1)*10 : B=(RND(B)-1)*5
180 REM BABURAJZDLD
190 RESTORE
200 FOR 1=1 TO 9
210 READ x,v
220 IF PDINT(A+X,B+Y) THEN RESET(A+X,B+Y) ELSE SET(A+X,B+Y)
230 NEXT 1
240 FOR 1=1 TO 200 : NEXT
250 REM BABURAJZOLO
260 RESTORE
270 FOR 1=1 TO 9
280 READ x,v
290 IF POINT(A+X,B+Y) THEN RESET(A+X,B+Y) ELSE SET(A+X,B+Y)
300 NEXT 1
310 GOTO 170
320 DATA 4,1,5,1,6,1,4,2,5,2,3,3,4,3,5,3,6,3
10.2 feladat
10 REM FOPRDGRAM
20 CLS
30 IF RND(2)=1 THEN GOSUB 80 ELSE GOSUB 120
40 PRINT@970,"FOLYTATOD ? (I/N) ";
50 A$=INKEY$
60 IF A$="I" THEN 20
70 IF A$="N" THEN STOP ELSE 50
80 REM VONALRAJZOLO SZUBRUTIN
90 X=RND(45)-1
100 FOR Y=0 TO 127 : SET(Y,x) : NEXT Y
110 RETURN
120 REM TEGLALAPRAJZOLO SZUBRUTIN
130 X=RND(45)-1 : Y=RND(12B)-1
140 FOR I=0 T0 X : FOR J=0 TO Y : SET(J,I) : NEXT J,I
150 RETURN
101
10.3 feladat
10 CLS
20 DEFINT I,J,H
30 PRINT@B5,"MELYIK BETUT IRJAM KI : T-H-TH-HT "; : INPUT As
40 IF As="T" THEN J=23 : GOSUB 90 : GOTO 80
50 IF As="H" THEN J=23 : GOSUB 130 : GOTO 80
60 IF Ai="TH" THEN J=B : GOSUB 90 : J=J+30 : GOSUB 130 : GOTO 80
70 IF Ai="HT" THEN J=B : GOSUB 130 : J=J+30 : GOSUB 90 : GOTO 80
ELSE 20
B0 GOTO 80
90 REM A T BETU
100 FOR K=1 TO 3 : PRINT@(3+K)*ó4+J,STRINGS(22,191); : NEXT K
110 POR H=4 TO 9 : PRINT@(3+K)*ó4+J+5,STRINGS(12,191); : NEXT K
120 RETURN
130 REM A H BETU
140 POR K=1 TO 9
150 RRINTe(3+H)*ó4+J,STRINBs(5,191); :
PRINT@(3+H)*ó4+J+17,sTRINBt(5,191);
160 NEXT H
180 POR H=4 TO ó : PRINT@(3+K)*ó4+J+5,STRING5(12,191); : NEXT K
200 RETURN
10.4 feladat
10 CLS
20 DEFINT A,I,J,H
30 RR1NTe222,"A LOTTOSZAMOK :";
40 POR 1=1 TO 5 : GOSUB 60 : GOSUB 100 : PRINT@651+I*á,A(I); : NEXT
50 OOTO 50
60 REM HERETRAJZDLAS_
70 POR J=1 TO 10 : SET(20+I*1b+J,25) : SET(20+I*1ó+J,35) : NEXT
80 POR J=1 TO 9 : SET(21+I*1ó,25+J) : SET(30+I*1ó,25+J) : NEXT
90 RETORN '
100 REM Az I. LOTTOSZAM GENERALASA
110 A(I)=RND(90)
120 POR K=0 TO 1-1
130 IF A(H)=A(I) THEN 110
140 NEXT
150 RETORN
10.5 feladat
10 CLS
20 DEFINT I,J,H,X
30 IF INKEYí="" THEN 30
40 I=RND(B30) : J=RND(2) : K=RND(ó)
50 IF J=1 THEN J=191 ELSE J=32
30 IF 1+H*b4+Ha1022 THEN,40
70 GOSUB 90
80 GOTO 30
90 REM RAJZ
100 POR x=1 TO K
110 PRINT@I+(X-1)*ó4,STRING5(K.J)5
120 NEXT
130 RETORN
102
10.6 feladat
10 DEFINT I-H
20 zs="AEIou"
30 CLS
40 INPUT"MELYIH SZOT VIZSGALJAM ";ss
50 PR1NTe0,cHRs(25s) : PR1NTe5,ss;
60 PRINT@13*64,"A szo HOSSZA ----------- 1,";
" A szo MAGANHANGZOI ------------- 2,"; :
PRINT@14*64,"A MAGANHANGZOK SZAMA --- 3,";
" A szo VISSZAFELÉ ------------- -- 4,"; :
PRINT@15*64,"UJ szo ----------------- 5";
70 sosus 240
B0 IF I=5 THEN 30
90 UN I GOSUB 290,110,140,320
100 GOTO 70
110 REM A szo MAGANHANGZOI
120 sosua 170 : PRINT@5*64+5,CHRS(255) : PRINT@5*64+5,Bí;
130 RETURN
140 REM A MAGANHANGZOK SZAMA
150 GOSUB 170 : PRINT@5*64+5,CHRi(255) : PRINT@5*64+5,LEN(Bí);
160 RETURN
170 REM
180 J1=LEN(Sí) : J2=LEN(ZS) : B§=n n
190 FOR H1=1 T0 J1
200 FOR m2=1 TO J2
210 IF MIDS(Si,H1,1)=MID5(ZS,H2,1) THEN B§=Bi+MIDS(S3,K1,1)
220 NEXT K2,H1
230 RETURN
240 REM INFDRMACID A BILLENTYUZETROL
250 As=INKEvz : IF As="" THEN 250
260 1=vAL(As)
270 IF 141 OR 105 THEN 2=0
280 RETURN
290 REM EGY szo BETUINEH SZAMA
300 PR1NTe5*b4+5,cHRs(255) : PRINT@5*64+5,LEN(St);
310 RETURN
320 REM A szo MEGFDRDITASA
330 H=LEN(SS) : As=""
340 FOR J=1 TO K
350 As=LEFTs(ss,1)+As : ss=ss+LEFTs(ss,1) : ss=RIsHTs(ss,K)
360 NEXT
370 PRINT@5*ó4+5,cHRs(255) : PRINT@S*64+5,At;
380 RETURN
10.7 feladat
Az END (vagy esetleg egy STOP) utasítást az 55-ös sorba kell írni.
10.8 feladat
S E H O L ! ! !
103
Tizenegyedik fejezet
A SZÁMÍTÓGÉP LELKIVILÁGA
PEEK, POKE
A számítógép memóriája "rekeszekre" van osztva. Minden rekesznek van
címe, és minden rekeszben található egy 256-nál kisebb nemnegatív egész szám.
A PEEK(N) függvényutasítás segítségével ki lehet olvasni az N című memória-
rekesz tartalmát.
A POKE utasítás alkalmazásával pedig a memória bizonyos rekeszeibe irha-
tunk értékeket. A
POKE N,A NL
parancs hatására az N című rekesz tartalma az A szám lesz. Érdemes megjegyez-
ni, hogy a 15360, 15361, ..., 16383 című rekeszek tartalma a képernyő 0. - 1023.
karakterpozíciójával van szoros kapcsolatban. Ha például az előbbi parancsban
az N értékére
l5360≤N≤16383
és az A értékére
32≤A≤192
teljesül, akkor a képernyő N- l5360-adik karakterpozícióján megjelenik az
A ASCII-kódú karakter.
11.1 feladat Készítsünk olyan programot, amelyik a képernyő kívánt helyén egy kívánt karaktert
kigyűjt!
A POKE utasítás egyik előnye a PRINT utasítással szemben az, hogyha segítsé-
gével a képernyőn az 1023. karakterpozícióba írunk, akkor sem emel sort.
ll.2 feladat: Rajzoltassunk szimmetrikus, lehető legnagyobb keretet a képernyőre!
Hasznos tudni, hogy a l6537-es című memóriarekesz az INKEY függvény
tárolóterülete.
104
11.1 példaprogram
10 CLS
20 FOR I=153óÜ TO 15519
30 POKE I,I-15328
40 NEXT I
50 IF PEEK(1ó537)=0 THEN 50 ELSE POHE 1ó537,Ü
60 GOTO 10
Egy kis ízelítő a számítógép grafikájából.
11.2 példaprogram
10 X=RND(ó3)+131
20 IF RND(2)-1 THEN J=153óB : L=1ó383 : s=RND(1mo)
ELSE J=1ó383 : L=153óB : S=-RND(10B)
30 CLS
40 FOR M=J TO L STEP 5
sm POKE M,X
az NEXT
70 GOTO 1o
Hanggenerátor
Az iskolaszámítógép a beépített hanggenerátor segítségével hangokat is tud
adni. Ezekből, Összeállíthatunk egyszerű dallamot, figyelemfelkeltő és kísérő
effektusokat. Igy programjainkat színesebbé, tartalmasabbá tehetjük.
A hanggenerátor vezérlése az OUT utasítással történhet.
Egy hang megszólaltatásához három teendőnk van, három ún. regisztert kell
beállítanunk. Ezek az RH, R7, R8 regiszterek. (A számítógépen 13 regiszter áll
105
kapcsolatban a hanggenerátorral, de számunkra most csak az említett három
lesz fontos.) Az
OUT 3l,X : OUT 30,Y
utasításpár hatása a következő:
Az OUT 31,X utasítás kiválasztja az RX regisztert. Az OUT 30,Y utasítás pedig
az RX regiszterbe beírva az Y értékének egészrészét, beállítja azt.
A három említett regiszter működése a következő:
Az RH regiszter a hangmagasság beállítására szolgál. Az Y értékének 256-nál
kisebb nemnegatív számnak kell lenni. Kisebb Y értékhez magasabb hang
tartozik.
Az R8 regiszterrel a megszólaló hang erősségét lehet szabályozni. 16 erősségi
fokozatot állíthatunk be úgy, hogy a regiszterbe a 0, 1, 2, ..., 15 számok
valamelyikét írjuk. i
Az R7 regiszter segítségével tudjuk a számítógép ún. ,,A" hangcsatornáját be-
és kikapcsolni. (A további két - ,,B" és ,,C" - csatornával nem foglalkozunk.)
A bekapcsolás az
OUT 31,7 : OUT 30,254
utasításpárral, a kikapcsolás pedig az
OUT 31,7 : OUT 30,255
utasításpárral történhet.
11.3 példaprogram
10 OUT 31,o : OUT 3o,1oo : REM A HANS BEALLITASA
20 OUT 31,S : OUT 3o,1s : REM A HANGERD MAXIMALIS
30 OUT 31,7 : OUT 3o,254 : REM Az "A" CSATORNA ENGEDELYEZESE
40 FOR I=0 TO 1000 : NEXT
50 OUT 31,7 : OUT 30,255 : REM Az "A" CSATORNA LEZARASA (CSEND)
11.3 feladat: Készítsünk programot, amelyik megszólaltat egy hangot úgy, hogy annak hangerejét
a maximumtól a minimumig csökkenti!
11.4 feladat: Írjunk olyan programot, amelyik a hangok magasságának növekvő sorrendjében
szólaltat meg hangokat!
Érdemes megjegyezni, hogy a természetes hangskála alaphangjainak a követ-
kező Y értékek felelnek meg:
c-208, d-185, e-l65,f-155, g-139, a-l24, h-110, felső c-l04
106
11.5 feladat: Szólaltassa meg a számítógép a természetes hangskála alaphangjait egymás után, és
a megszólaló hanggal egy időben jelenjen meg a képernyő közepén annak neve is!
A kétoktávnyi teljes hangskála megfelelő értékei:
0-208, cisz-195, d-185, disz-175, e-165,f-155,fisz-146, g-139, gisz-130, a-124,
aisz-117,h-110;
104,98,92,87,83,78,73,70,65,62,59,55
11.6 feladat: A számítógép véletlenszerűen szólaltassa meg az alapskála egy hangját, majd ezt
követően az egy oktávval magasabbat! A megszólaló hanggal egy időben jelenjen meg a
képernyő közepén a neve is! Az I billentyű lenyomására ezt ismételje, más billentyű lenyomá-
sakor pedig álljon le a program.
Végezetül a számítógép zenéje:
11.4 példaprogram
10 DEFINT H-N : DIM H(23)
20 our 31,B_: OUT 30,15
30 our 31,7 : OUT 30,254
40 FOR I=0 TO 23
50 READ H(I)
50 NEXT I
70 H=RND(24)-1
80 CLS
90 OUT 31,ü : OUT 30,H(H)
100 GOTO 70
110 DATA 288,195,185,175,1ó5,155,14ó,139,13B,124,117,11B
120 DATA 104,9B,92,B7,83,7B,73,70,ó5,ó2,59,55
11.7 feladat: Hol a hiba?
10 CLS
20 FOR I=153óD TO 15397 STEP 7
30 PDKE 1,0
40 NEXT
50 sora 10
11.8 feladat: Hol a hiba?
10 CLS
20 our 31,7 : our 30,2s4
30 our 31,B : our 30,10
40 our 31,0 : our 30,110
50 PRINT@6*ó4+5,"A PROGRAM vese"
50 END
107
Gyakorlatok a tizenegyedik fejezet anyagához
ll.l gyakorlat: Írjunk programot, amelynek segítségével a kurzor a képernyőn bárhova mozgatha-
tó, de a mozgatással a képernyőn semmi sem törlődik!
11.2 gyakorlat: Módosítsuk a 11.1 gyakorlatra adott megoldásunkat úgy, mintha a képernyő
szemközti oldalai össze lennének ragasztva!
11.3 gyakorlat: Írjunk olyan programot, amelynek segítségével a billentyűzetről bármilyen ábrát
rajzoltathatunk a képernyőre! (Használjuk a teljes, 32-191 ASCII-kódú karakterkészletet!)
11.4 gyakorlat: A számítógép képernyőjén megjelenik egy véletlen karakterlánc. Célunk az, hogy
ebből a billentyűzetről vezérelve értelmes szót alakítsunk ki. Minden betűcsere egy lépésnek
számít. Miután megkaptuk az értelmes szót, a gép írja ki a betűcserék számát.
11.5 gyakorlat: Készítsünk olyan programot, amelynek segítségével egy adott hangot egy adott ideig
szólaltathatunk meg!
11.6 gyakorlat: Írjunk olyan programot, amelyik egy ismert népdal dallamát lejátssza!
11.7 gyakorlat: A számítógép képernyőjén jelenjenek meg keretbe foglalva a természetes hangskála
alaphangjainak nevei. Ha lenyomunk egy hangnak megfelelő billentyűt, akkor az a hang
szólaljon meg, és villogjon a neve!
Készítsük el ezt a programot!
11.8 gyakorlat: Egészítsük ki a 11.2 példaprogramot úgy, hogy ne csak rajzoljon, hanem zenéljen
is a számítógép!
108
A tizenegyedik fejezet feladatainak egy lehetséges megoldása
ll:l feladat
10 DEFINT X,Y
20 CLS
30 INPUT"A KARAKTERPOZICIO ";X : INPUT"A KARAKTER KODJA |I;Y
40 IF X§0 OR X§1023 THEN 20
50 CLS
60 POKE X+153ó0,Y
70 IF INKEYS="" THEN 70 ELSE 20
11.2 feladat
10 CLS
20 x=15360
30 FOR J=0 TO 15
40 POKE X+J*4,140 : POKE X+J*ó4-1,140 : POKE X+J*ó4,140 :
POKE 1b320+J*4,140
50 NEXT
60 POKE 16383,140
70 GOTO 70
11.3 feladat
10 OUT 31,0 : OUT 30,100
20 OUT 31,7 : OUT 30,254
30 FOR J=15 TO 0 STEP-1
40 OUT 31,8 : OUT 30,J : REM A HANGERO FOKOZATOSAN CSOKKEN
50 FOR I=0 TO 100 : NEXT I
60 NEXT J
70 OUT 31,7 : OUT 30,255
11.4 feladat
10 OUT 31,8 : OUT 30,10
20 OUT 31,7 : OUT 30,254
30 FOR J=255 TO 0 STEP -1
40 OUT 31,0 : OUT 30,J : REM A HANGMAGASSAG NO
50 NEXT J
60 OUT 31,7 : OUT 30,255
11.5 feladat
10 CLS
20 OUT 31,0 : OUT 30,0
30 OUT 31,8 : OUT 30,15
40 OUT 31,7 : OUT 30,254
50 FOR J=1 TO 8
60 READ Hs,H
70 PRINT@8*ó4+30,HS
80 OUT 31,0 : OUT 30,H : REM A SKALA MEGFELELO HANGJA
90 FOR I=0 TO 333 : NEXT I
100 NEXT J
110 OUT 31,7 : OUT 30,255
120 STOP
130 DATA C,208,D,185,E,1ó5,F,155,G,139,A,124,H,110,c,104
A 20-as sor az RB regiszter nullázását jelenti, ami azért célszerű, mert így a program futtatása-
kor először a skála kívánt hangját szólaltatja meg.
109
11.6 feladat
110
10
20
30
40
50
60
90
120
130
140
150
160
170
180
190
200
210
220
230
240
250
260
DEFINT H-N :
OUT
OUT
OUT
OUT
FOR
FOR
DIM H(23),As(11)
OUT 30,0
OUT 30,15
OUT 30,254
31,0 :
31,e :
31,7 :
31,0
1=0 T0 11 :
r=12 T0 23 :
K=RND(12)-1 :
READ AS(I),H(I) = NEXT 1
READ H(I) = NEXT 1
FL=0 : HA=H(K)
CLS
PRINT@8*b4+32,At(K)
OUT 30,HA
FOR r=0 T0 1000 : NEXT 1
IF FL=1 THEN OUT 30,0 : GOTO 190
FL=1 : HA=H(K+12) : PRINT@8*ó4+24,"FELSO "; :
PRINT@1S*ó4,"FOLYTASSAM ? (I/N)";
TS=INKEYs
IF Ts=""
IF T5="I"
STOP
DATA C,208,CISZ,19S,D,185,DISZ,175,E,1ó5,F,1S5,FISZ,14ó
DATA G,139,GISZ,130,A,124,AISZ,117,H,110
DATA 104,98,92,87,83,78,73,70,ó5,ó2,59,55
GOTO 150
THEN 200
THEN 120
Az 50-es valamint a 150-es és a 170-és sorokban látható, hogy az
OUT 31,X és az OUT 30,Y
utasításokat nem kötelező közvetlenül egymás után írni. A 170-és sorban levő OUT30,0
utasítás az A hangcsatornán csendet állít be.
11.7 feladat
Ha a memóriának olyan rekeszébe írunk, amelyiknek nem ismerjük a jelentését, akkor sok
meglepetés érhet bennünket!!!
11.8 feladat
A hanggenerátort vagy a RESET gombbal, vagy az OUT utasítással, vagy pedig a számítógép
kikapcsolásával lehet elhallgattatni.
Tizenkettedik fejezet
A GYAKORLATOK EGY LEHETSÉGES
MEGOLDÁSA
Első fejezet
10 REM ..... 1.1 G Y A K 0 R L A T
20 CLS
30 SET(4Ü,0) : SET(40,30) : SET(10Ü,15)
40 SET(20,15) : SET(8D,0) : SET(80,30)
50 RESET(20,15) : RESET(80,0) : RESET(B0g30)
60 GOT0 40
10 REM ..... 1.2 G v_A K 0 R L A T
20 CLS
30 SET(10,3) = SET(9,4) : SET(8,S) : SET(7,ó) : SET(ó,7) :
SET(B,7) : sET(10,7) = SET(12,7) : SET(14,7) : SET(11,4) :
SET(12,5) : SET(13,ó)
40 GOTO 40
10 REM ..... 1.3 G Y A K 0 R L A T
20 CLS
30 INPUT" A PONT KOORDINATAI ";x,v
40 CLS
50 SET(X,Y) : SET(X-1,Y+1) = SET(X-2,Y+2) : SET(x-3,v+3) =
SET(X-4,Y+4) : SET(X-2,Y+4) = SET(X,Y+4) : SET(X+2,Y+4) :
SET(X+4,Y+4) : SET(X+1,Y+1) : SET(X+2,Y+2) : SET(x+3,v+3)
60 GDTO 60
10 REM ..... 1.4 0 Y A K 0 R L A T
20 CLS
30 x=0
40 SET(X,11)
50 x=x+1
60 GOTO 40
10 REM ..... 1.5 G Y A K 0 R L A T
20 CLS
30 SET(1,1) : sET(10,1) : sET(100,1) = sET(100,10) :
SET(100,30) : SET(B0,30) : sET(60,30) : sET(40,30) =
SET(30,30) : sET(20,30) : sET(10,30) : sET(0,30) :
sET(0,40) : sET(10,40) : SET(15,40)
40 RESET(15,4Ü) : RESET(10,40) : RESET(D,40) : RESET(Ü,30) :
RESET(10,30) : RESET(20,30) : RESET(3B,30) : RESET(40,30) :
RESET(ó0,30) : RESET(80,30) : RESET(1OD,30) :
RESET(100,1D) : RESET(1DD,1) : RESET(1Ü,1) : RESET(1,1)
SB GOT0 39
111
10 REM ..... 1.6 G Y A K O R L A T
20 CLS
30 SET(5,6) : SET(5,7) : SET(5,8) : SET(5,9) : SET(6,9) :
SET(7,9) : SET(8,9) : SET(9;9)
40 GOTO 40
10 REM ..... 1.7 G Y A K O R L A T
20 CLS
30 INPUT"AZ ELSO PONT KOORDINATAI ";X1,Y1 :
INPUT"A MASODIK PONT KOORDINATAI ";X2,Y2
40 CLS
sz SET(X1,Y1) : SET(X1,Y1) : SET(X1,Y1) : SET(X1,Y1) :
PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT;PRINT:PRINT:
PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT
60 CLS
70 SET(X2,Y2) : SET(X2,Y2) : SET(X2,Y2) : SET(X2,Y2) :
PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT=PRINT:PRINT:PRINT:
PRINT:PRINT:PRINT:PRINT:PRINT:PRIIT:PRINT:PRINT:PRINT:PRINT
80 GOTO 40
10 REM ..... 1.8 G Y A K O R L A T
29 CLS "
30 X=0 : Y=0
40 X=X+3 : Y=Y+1
50 SET(X,0) : SET(X,10) : RESET(X,0) : RESET(X,10)
60 SET(0,Y) : SET(10,Y) : RESET(0,Y) : RESET(10,Y)
70 GOTO 40
10 REM ..... 1.9 G Y A K O R L A T
20 CLS
30 X=1 : Y=1 : A=124
40 SET(X,Y) : RESET(X,Y) : SET(A,Y) : RESET(A-3,Y-1)
50 X=X+3 : Y=Y+1 : A=A-3
60 GOTO 40
10 REM ..... 1.10 G Y A K O R L A T
20 CLS
30 INPUT"A KET KOORDINATA ";X1,Y1
40 CLS
50 X=X1 :'A=X : Y=Y1 : B=Y
60 X=X+3 : Y=Y+1 : A=A-3 : B=B-1
70 SET(X,Y1) : SET(X1,Y) : SET(A,Y1) : SET(X1,B)
80 PRINT : PRINT : PRINT : PRINT : PRINT
90 CLS
100 GOTO 60
10 REM ,.... 1.11 G Y A K O R L A T
20 CLS
30 X=0 : Y=0
4m SET(X,Y) : SET(X+10,Y) : SET(X+10,Y+5) : SET(X,Y+S)
50 x=x+3 : Y=Y+1 '
3
TO 40
10 REM ..... 1.12 G Y A K D R L A T
20 CLS
30 X=0 : A=127
4m SET(X,10) : SET(A,10)
50 X=X+1 : A=A-1
60 RESET(X-1,10) : RESET(A+1,10)
70 GOTO 40
112
10 REM
20 CLS
30
40
50
60
70
10
20
30
40
10
20
30
40
50
60 GOTO 20
1m
20.
sz
10 REM
20
30
40
10
20
30
40
10
20
30
40
50
60
70
80
90
100
110
120
130
140
150
160
170
180
190
200
210
220
230
240
250
..... 1.13 G v A K 0 R L A T
A=63 : a=23
RESET(A+3,B+1) :
RESET(X-3,23) : RESET(63,B+1) : RESET(A+3,23) :
RESET(X-3,B+1) : RESET(A+3,Y-1)
SET(X,Y) : SET(A,B) : SET(63,Y) :
SET(A,23) : SET(X,B) = SET(A,Y)
x=x+3 : v=v+1 : A=A-3 : B=B-1
GOTO 4m
X=63 : v=23 :
RESET(X-3,Y-1) :
REM .....
CLS
PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:
PRINT" SZIA !"
GOTO_40
1.14 G y A K 0 R L A T
REM .....
CLS
RRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:
PRINT" V I L L Ü G"
X=X-1 :
X=X+1 :
1.15 G Y A K O_R L A T
X=X+1 :
X=X+1 :
= X=X+1 :
X X-1 :
X=X-1 : X=X-1 : X=X+1 : X=0 : X=0
X=X-1 : X=X+1 : X=X-1
REM .....
PRINT "*w;
GOTO 2m
1.16 G Y A K Ü R L A T
..... 1.17 G Y A K Ü R L A T
CLS
PRINT"
PRINT"
GOTO 40
A" : FRINT"
A A A A" :
A A" :
PRINT"A
PRINT" A
A"
A" :
REM ..... 1.18 G Y A K Ü R L A T
SET(X,23) Í
RESET(63,Y-1) :
SET(63,B) =
PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:
PRINT:PRINT:PRINT:PRINT:PRINT:PRINT
PR INT " =========================================================
GOTO 20
REM .....
PRINT"
PRINT"
PRINT"
PRINT"
PRINT"
PRINT"
PRINT"
PRINT"
PRINT"
PRINT"
PRINT"
PRINT"
PRINT"
PRINT"
PRINT"
PRINT"
PRINT"
PRINT"
PRINT"
PRINT"
PRINT"
PRINT"
PRINT" /"
GOTO 20
1.19 G Y A K O R L A T
/"
/"
/"
/"
/"
/"
/"
/"
/"
/"
/"
/"
/"
/"
/"
/"
/"
/"
;
/"
/"
/"
/"
113
10
20
30
40
50
60
70
80
10
20
30
40
50
60
70
80
90
10
20
30
40
50
60
70
B0
90
100
10
20
30
40
50
60
10
20
30
40
50
60
10
20
30
40
50
60
70
80
90
114
_REM
CLS
REM 1.20 G Y A K O R L A T
INPUT A,B,C
PRINT PRINT PRINT
PRINTIIA=II a A, IIB=II a B, IIC=IISC
PRINT PRINT
PRINT"A=";A
PRINT :
GOTO 20
PRINT"B=";B
PRINT
PRINT"C=";C
PRINT
Második fejezet
..... 2.1 G v A K 0 R L A T
FOR x=5 TO 25 STEP 5
FOR v=5 TO 25 SET(X,Y)
NEXT x
CLS
FOR x=5 TO 25
FOR v=5 TO 25 STEP 5
NEXT x
NEXT
SET(X,Y)
NEXT Y
'75
..... 2.; G Y A K Ü R L A T
CLS
FOR X=10 TO 100
FOR Y=0 TO 47
NEXT X
FOR X=0 TO 127
FOR Y=4 TO 30
NEXT X
FOR X=10 TO 90
GOTO 100
STEP 12
SET(X,Y)
NEXT
STEP B NEXT Y
SET(X,Y)
SET(X,45)
NEXT
REM
CLS
FOR K=1 TO 10
PRINTK;" ------------------------------- --"
NEXT K
GOTO 60
2.3 G Y A H Ü R L A T
CLS
FOR K=0 TO 20
SET(63,23+K) : SET(63,23-K)
SET(63+K+K+K,23) : SET(63-K-K-K,23)
SET(63+K+K+K,23+K) SET(63+K+K+K,23-K)
SET(63-K-K-K,23+K) SET(63-K-K-K,23-K)
NEXT K
sora 60
..... 2.5 B v A K 0 R L A T
CLS
FOR v=3 TO 35 STEP 6
PRINT" --------------------------------------- --"
FOR x=o TO 59
NEXT v
PRINT
STÜP
SET(X,Y) NEXT X
10 REM ..... 2.6 G v A K 0 R L A T
20 CLS
30 FOR x=0 TO 127 = sET(x,0) : SET(X,47) = NEXT x
40 FOR v=0 TO 47 = sET(0,v) = SET(127,Y) : NEXT v
50 GOTO 50
10 REM ..... 2.7 G v A K 0 R L A T
2DPRINT"********************************";
30 FOR K=1 TO 13
40 PRINT"* * ";
50 NEXT
óDPRINT"***-*****************************";
70 GDTO 70
10 REM ..... 2.9 G Y A K 0 R L A T
20 CLS
30 PRINT"ELSO SOR" : PRINT : PRINT"HARMADIK SOR" : PRINT :
.RRINT"oToD1K SOR"
40 FOR v=3 TO 20 STEP 6
50 FDR x=0 T0 36 : SET(X,Y) : NEXT x
60 NEXT v
70 PRINT : PRINT
10 REM ..... 2.9 G v A K 0 R L A T
20 CLS
30 FDR J=140 TO 10 STEP -10 : RRINT J = NEXT J
40 PRINT 4
50 PRINT" 0. 10 20 30 40 50 60 70 80 90 100 110";
60 FOR x=0 TO 100 : SET(X,43) : NEXT x
70 FDR v=0 TO 47 = SET(9,Y) = NEXT v
80 GOTO 80
10 REM ..... 2.10 G v A K 0 R L A T
20 CLS
30 PRINT"CSAK POZITIV KODRDINATAJU PONTOKAT
TUDOK ABRAZDLNI 1"
40 INPUT x,v
50 IF xp0 THEN 60 ELSE 20
60 IF vp0 THEN 70 ELSE 20
70 FOR K=1 TO 15
80 IF K=7 THEN PRINT v ELSE PRINT
90 NEXT K
100 PRINT" 0";" ";x;
110 FOR x=0 TO 127 : SET(X,42) : NEXT x
120 FOR v=0 TO 47 : sET(10,v) : NEXT v
130 sETc60,1e) '
140 GOTO 140
10 REM ..... 2.11 G v A K 0 R L A T
20 CLS
30 PRINT : PRINT : PRINT : PRINT : PRINT = PRINT = PRINT
40 PRINT" MASSALHANGZOK"
50 FOR 1=1 TO 300 = NEXT
60 SET(59,21) : SET(ó5,21) : SET(71,21) : SET(79,21)
70 GOTO 70
10 REM ..... 2.12 G Y A K.0 R L A T
20 CLS
39 PRINT"* * * * * * * * * * * * *" :
PRINT"* * * *" =
PRINT"* 1 * 2 * 3 *" =
PRINT"* * * *" =
PR1NT"* * * * * * * * * * * * *"
40 PRINT : PRINT
115
10 REM ..... 2.13 G Y A K D R L A T
20 X=0
30 CLS
40 FDR J=0 TO X : PRINT : NEXT J
50 PRINT"+++++"
60 FOR K=1 TO 1000 : NEXT
70 X=X+1
80 GOTO 30
10 REM ..... 2.14 0 v A K 0 R L A T
20 x=1 *
30 CLS
40 PRINT x
50 FOR 1=1 TO 1000 : NEXT
60 x=x+1
70 GOTO 30
10 REM ..... 2.15 G Y'A K Ü R L A T
20 CLS
30 FOR Y=1 TO 5 : SET(10,Y) : NEXT Y
40 FOR K=1 TO 300 : NEXT
50 CLS
60 FOR Y=1 TO 5 . SET(120,Y) : NEXT Y
70 FOR K=1 TÜ.300 : NEXT
80 GOTO 20
10 REM ..... 2.16 G Y A H Ü R L A T
20 X=0 : Y=0
30 CLS
40 PRINT X ; " ÜRA",Y;" PERC"
50 FOR H=1 TO 200 : NEXT
60 Y=Y+1
70 IF Yió0 THEN 30
80 X=X+1 : Y=0
90 IF Xi24 THEN 30 ELSE X=0 : GOTO 30
10 REM ..... 2.17 G Y A H Ü R L A T
20 INFUT"HANY ÜRA ";X : INPUT"HANY PERC ";Y
30 GOTO 70 -
40 CLS
50 PRINTX;" ÜRA",Y;" PERC"
60 FOR K=1 TO 200 : NEXT
70 Y=Y+1
80 IF Yáó0 THEN 40
90 X=X+1 : Y=0
100 IF Xb=24 THEN X=0
110 GOTO 40
10 REM ..... 2.19 G v A K 0 R L A T
20 FOR I=1 TO 15 : PRINT = NEXT 1
30 PRINT" ________________________________________________ __u
40 FOR I=1 TO 1900 = NEXT
50 GOTO 20
10 REM ..... 2.19 G v A K 0 R L A T
20 CLS
30 K=1 : X=0 : L=1
40 FOR I=L TO L+K-1
50 IF X+I)120 THEN STOP
60 SET(X+I,25) a SET(X+I,35) : SET(X+I,45)
70 NEXT I
80 L=L+K : K=K+K
90 FOR F=1 TO 100 : NEXT F
100 GOTO 40
116
10 REM ..... 2.20 G Y A K D R L A T
20 CLS
30 FOR I=1 TO 50
40 PRINT"*";
50 NEXT I
10 REM ..... 2.21 G Y A H D R L A T
20 CLS
30 INPUT"HATI SZAMA ";X
40 CLS
50 INPUT"FERI TIPPJE ";Y
60 PRINT : PRINT"KATI SZAMA ";
70 IF X=Y THEN PRINT"IS UGYANENNYI !" : STOP
B0 IF XiY THEN PRINT"KISEBB" ELSE PRINT"NAGYDBB"
90 PRINT
100 FOR I=1 TO 300 : NEXT
110 GÜTD 40
10 REM ..... 2.22 G Y A H D R L A T
20 CLS
30 X=0 : =0 : I=1
40 SET(X,Y)
50 I=I+I
60 FOR L=1 TO 600 : NEXT
70 FOR J=1 TO I
80 X=X+1
90 IF X(12B THEN SET(X,Y) ELSE X=0 : Y=Y+1 :
IF Yí47 THEN SET(X,Y) ELSE 120
100 NEXT J
110 GOTO 50
120 GOTO 120
10 REM ..... 2.23 G Y A K O R L A T
20 CLS
30 X=1
40 FOR I=1 TO X : PRINT 2 NEXT I
50 PRINT"* * * * *"
60 FOR I=1 TO 300 : NEXT :
X=X+1 1 _
IF X)13 THEN X=1
70 X=X+1
80 IF X)13 THEN X=1
90 CLS
100 GOTO 40
10 REM ..... 2.24 G Y A K O R L A T
20 INPUTX,Y
30 CLS
40 I=4
50 IF I=1 THEN X=X+1 : Y=Y+1
60 IF I=2 THEN X=X-1 : Y=Y-1
70 IF I=3 THEN X=X-1 : Y=Y+1
00 IF I=4 THEN x=x+1 : v=v-1
90 IF X40 THEN IF I=2 THEN I=4 : 0070 50 ELSE I=1 : 0070 50
100 IF x)127 THEN IF I=1 THEN I=3 : 0070 50 ELSE I=2 : 0070 50
110 IF Y(0 THEN IF I=4 THEN I=1 : 0070 50 ELSE I=3 : 0070 50
120 IF V247 THEN IF I=3 THEN I=2 : 0070 50 ELSE I=4 : 0070 50
130 SET(X,Y)
140 0070 50
ll7
10
20
30
40
50
60
70'
B0
90
100
110
120
130
140
10
20
30
40
50
60
70
80
90
100
110
120
130
140
150
160
170
10
20
30
40
50
60
70
B0
90
10
20
30
40
50
60
70
10
20
30
40
50
60
70
80
Harmadik fejezet
REM 3.1 G Y A K
FOR X=0 TO 127
FOR Y=0 TO 47
NEXT X
CLS
FOR Y=0 TO 47
FOR X=0 TO 127
NEXT Y
CLS
FOR X=0 TO 127
FOR Y=47 TO 0 STEP
NEXT X
CLS
GOTO 20
Ü R L A T
: SET(X,Y) NEXT v
SET(X,Y) NEXT x
-1 SET(X,Y) NEXT Y
..... 3.2 G v A K 0 R L A T
CLS
FOR I=10 TO 20
FOR J=5 TO 26
NEXT 1
FOR 1=20 TO 40
FOR J=1 TO
NEXT 1
FOR I=60 TO 70
V FOR J=5 TO 26
NEXT 1
FOR I=70 TO 90
FDR J=1 TO 3
FOR K=1 TO 18
SET(I,J+4)
NEXT J,I
GOTO 170
SET(I,J) NEXT J
3 :
SET(I,J+4) SET(I,J+13) NEXT J
SET(I,J) NEXT J
NEXT K
SET(I,J+13)
SET(I,J+23)
.3 G Y A K Ü R L A
CLS
DEFINT A-Z
FOR Y=0 TO 42
FOR Y=43 TO 46
FOR X=0 TO 62
FOR Y=0 TO 22
NEXT X
GOTO 90
SET(Y+Y+Y,23)
SET(63,Y)
SET(63,Y)
NEXT Y
NEXT Y
SET(X,Y) SET(X+64,Y+24) NEXT Y
IIIII Y A T
CLS
DEFINT I
FOR I=1 TO 5
PRINT"!!!.!!!!!!!!!!!!!!!!!!!!!!.!!!!!!!!!.!!!!!!!!!!!!";
NEXT I
GOTO 70
REM 3.5 G v A H 0 R L A T
CLS_
DEFINT x,v
FOR x=0 TO 127
FOR v=0 TO 47
SET(0,Y)
NEXT v
GOTO 80
SET(X,0) SET(X,47) 3 NEXT X
: : sETk12ó,v) SET(127,Y)
SET(1,Y)
118
10 REM ..... 3.6 G Y A K Ü R L A T
20 CLS
30 FOR X=0 TO 127
40 SET(X,20)
50 FOR Y=127 TO X STEP -3 : NEXT Y
60 RESET(X,20)
70 NEXT x
80 FOR x=127 TO 0 STEP-1
90 SET(X,20)
100 FOR Y=127 TO X STEP -3 : NEXT Y
110 RESET(X,20)
120 NEXT X
130 GOTO 20
10 REM ..... 3.7 B Y A K Ü R L A T
20 I=100 : X=10 : Y=1 : 991 8 B=57 : S=1
30 CLS
40 FOR K=A TO B STEP S
50 IF K(20 THEN X=X+S : GOTO 90
60 IF K(30 THEN Y=Y+S : GOTO 90
70 IF K(48 THEN X=X-S : GOTO 90
80 Y=Y-S
90 SET(X,Y)
100 FOR J=1 TO I : NEXT J
110 RESET(X,Y)
120 NEXT K
130 IF I=100 THEN I=1 : A=57 : B=1 : S=-1 . GOTO 40 ELSE 20
10 REM ..... 3.8 G v A K 0 R L A T
20 DEFINT x,v
30 x1=0 : x2=47
40 CLS s
50 FOR x=x1 TO x2 STEP 3 : SET(40+X,X1) : SET(40+X2,X) : NEXT x
60 x1=x1+2
70 FOR x=x2 TO x1 STEP -3 : SET(40+X,X2) : SET(40+X1,X) : NEXT x
80 x2=x2-2
90 IF x2)24 THEN 50
100 FOR 1=1 TO 50 : NEXT
110 soro 30
10 REM ..... 3.9 G Y A K Ü R L A T
20 X1=0 : X2=47
30 CLS
40 FOR X=X1 TO X2 : SET(40+X,X1) : NEXT X
50 X1=X1+2 '
60 FOR X=X2 TO X1 STEP -1 : SET(40+X,X2) : NEXT X
70 X2=X2-2
80 IF X2)24 THEN 40
90 X1=0 : X2=47
100 FOR X=X1 TO X2 : SET(40+X2,X) 3 NEXT X
110 X1=X1+2
120 FOR X=X2 TO X1 STEP -1 : SET(40+X1,X) : NEXT X
130 X2=X2-2
140 IF X2)24 THEN 100
150 FOR I=1 TO 50 : NEXT
160 GOTO 20
119
10 REM ..... 3.10 G Y A K Ü R L A T
20 K=1 : X=60 : Y=21
30 CLS
40 FOR I=1 TO K
50 IF Y+I)47 THEN 120
60 SET(X+I,Y) : SET(X+K,Y+I)
70 NEXT I I
80 X=X+K : Y=Y+K : K=K+K
90 FOR I=1 TO K : SET(X-I,Y) : SET(X-K,Y-I) : NEXT I
Y
100 X=X-K :
110 GOTO 40
120 FOR X=85 TO 103 . SET(X,0) : NEXT X
130 GOTO 130
=Y-K : K=K+K
10 REM'..... 3.11 G Y A K Ü R L A T
20 CLS
30 FOR Y=1 TO 10
40 FOR X=1 TO Y+Y : SET(62+X,Y+3) : SET(63-X,Y+3) : NEXT X
50 NEXT Y
60 FOR Y=14 TO 24
70 FOR X=49 TO 75 . SET(X,Y) : NEXT X
80 NEXT Y
90 FOR Y=5 TO 10
100 FOR X=72 TO 75 . SET(X,Y) : NEXT X
110 NEXT Y
120 FOR Y=16 TO 20
130 FOR X=65 TO 70 . RESET(X,Y) : NEXT X
140 NEXT Y
150 GOTO 150
10 REM ..... 3.12 G Y A K Ü R L A T
20 DEFINT A-Z
30 FOR K=1 TO 48
40 CLS
50 FOR X=1 TO K+K
60 FOR Y=0 TO K-1 : SET(X,Y) : NEXT Y
70 NEXT X
80 FOR J=1 TO 200 : NEXT J
90 NEXT K
100 GOTO 100
10 REM ..... 3.13 G v A K 0 R L A T
20 DEFINT A-z
30 CLS
40 FOR x=1 TO 20
50 SET(X+30,10) : SET(X+30,30) : SET(30,10+X) : SET(S0,10+X)
60 NEXT x
70 SET(30,10)
B0 FOR v=11 TO 29
90 FOR J=1 TO 10 : NEXT
100 FOR X=31 TO 49 : SET(X,Y) : NEXT X
110 NEXT Y
120 FOR Y=29 TO 11 STEP -1
130 FOR J=1 TO 100 : NEXT _
140 FOR X=49 TO 31 STEP -1 : RESET(X,Y) : NEXT X
150 NEXT Y
160 FOR J=1 TO 200 : NEXT
170 GOTO 80
120
10
20
30
40
50
60
70
80
90
100
110
120
130
140
150
160
170
10
20
30
40
50
60
70
80
90
100
110
120
130
140
150
160
10
20
30
40
50
60
70
80
90
100
120
130
10
20
30
40
50
60
70
REM ..... 3.14 G Y A K
DEFINT A-Z
CLS
FOR X=1 TO 30
FOR Y=1 TO 20 : SET(
NEXT X
FOR Y=1 TO 20
FOR X=1 TO 30
RESET(X+30,Y)
Ü R L A T
x+39,v) : NEXT v
IF X(16 THEN SET(X,Y) ELSE SET(X+60,Y)
NEXT x,v
POR v=1 TO 29
POR x=39 TO 1 STEP
SET(X+30,Y)
-1
IF X(16 THEN RESET(X,Y).ELSE RESET(X+60,Y)
NEXT x,v
GOTO 79
REM ..... 3.15 G v A H
CLS
POR x=1 TO 39
SET(X,1) : SET(X,30)
NEXT x
POR v=14 TO 1 STEP-1
POR x=v+1 TO 39-v
SET(X,Y)
NEXT x,v
POR v=2 TO 14
POR x=v+1 TO 39-v
O R L A T
: SET(X,X) : SET(31-X,X)
FOR J=0 TO 100 : NEXT
RESET(X,Y) : SET(
NEXT x,v
POR J=1 TO 299 : NEXT
GOT0 29
REM ..... 3.16 G v A K
DEFINT A-z
CLS .
POR v=9 TO 19
POR x=59 TO 79 : SET
NEXT v _ ,
POR x=9 T0 127 : SET(X
POR v=49 TO 39 STEP -
FOR X=50 TO 70 : SE
NEXT Y
FOR K=1 TO 1500 : NEX
GOTO 40
REM ..... 3117 G Y A K
FOR K=0 TO 20
CLS
SET(63+K+K+M,24+K) :
SET(61-K-K-K,23-K) :
SET(63+K+K+K,23-K) :
SET(61-K-K-K,24+K) :
FOR J=1 TO 50 : NEXT
NEXT K
GOTO 20
X.31-Y)
O R L A T
(X,Y) : RESET(X,40-Y) : NEXT X
,29) : NEXT x
1
T(X,Y) : RESET(X,40-
T
Ü R L A T
SET(64+K+K+K,24+K)
SET(62-K-K-K,23-K)
SET(64+K+K+K,23-K)
SET(62-K-K-K,24+K)
Y) : NEXT X
121
10
20
30
40
50
60
70
80
90
..... 3.18 G Y A K Ü R L A T
CLS
FOR Y=10 TO 30
FOR X=10 TO 60 : SET(X,Y) : NEXT X
NEXT Y
FOR Y=10 TO 30
FOR X=10 TO 60 : RESET(X,Y) : NEXT X
FOR X=40-Y TO 90-Y : SET(X,Y) : NEXT X
NEXT Y
100 GOTO 100
10
20
30
40
50
60
70
10
20
30
40
60
70
B0
90
REM ..... 3.19 G Y A K Ü R L A T
CLS
FOR K=0 TO 42
FOR J=0 TO 42 : SET(J+J+J,K) : SET(K+K+K,J) : NEXT J
FOR J=0 TO 42 : RESET(J+J+J,K) : RESET(K+K+K,J) : NEXT J
NEXT K 1
GOTO 30
REM ..... 3.20 G Y A K Ü R L A T
CLS
FOR X=0 TO 127
FOR v=10 TO 40 STEP 10 =
NEXT x
FOR x=0 TO 40 STEP 10
FOR v=0 TO 47*
IF POINT(X,Y)
SET(X,Y) : NEXT v
THEN RESET(X,Y) ELSE SET(X,Y)
100 NEXT Y,X
110 GOTO 110
10 REM ..... 3.21 G v A K 0 R L A T
20 DEFINT A-Z
30 CLS
40 FOR x=1 TO 120
50 FOR v=10 TO 40 : SET(X,Y) : NEXT v
60 NEXT x
70 FOR x=50 TO 80
80 FOR v=0 TO 47
90 IF POINT(X,Y) THEN RESET(X,Y) ELSE SET(X,Y)
100 NEXT v,x
110 FOR v=1s TO 35
120 FOR x=45 TO 105
130 IF POINT(X,Y) THEN RESET(X,Y) ELSE SET(X,Y)
140 NEXT x,v
150 FOR x=15 TO 127
160 IF POINT(X,22) THEN RESET(X,22) ELSE SET(X,22)
170 NEXT x
190 FOR v=9 TO 47
190 IF POINT(63,Y) THEN RESET(63,Y) ELSE 9ET(63,Y)
200 NEXT v
210 sora 210
10 REM ..... 3.22 G v A K 0 R L A T
20 CLS
30 FOR K=1 TO 100
40 FOR x=0 TO 100 STEP K
50 IF POINT(X,22) THEN RESET(X,22) ELSE SET(X,22)
60 NEXT x,K
70 FOR x= 0 TO 100
80 IF POINT(X,22) THEN PRINT x;
90 NEXT x
100 GOTO 100
122
10
20
30
40
50
60
70
10
20
30
40
10
20
30
40
60
70
80
90
100
110
120
130
140
150
160
170
10
20
30
40
50
REM ..... 3.23 G Y A K Ü R L A T
CLS
FOR X=ó TO 93
FOR Y=7 TO 13
IF X(15 ÜR BICX THEN SET(X,Y)
NEXT Y,X
GOTO 70
Negyedik fejezet
REM A K Ü R L A T
CLS
FOR X=0 TO 11
FOR Y=0 TO
NEXT X
GOTO 40
4.1
SET(x*X,Y*Y) NEXT Y
REM Y A H O R L A T
DEFINT A-Z
CLS
INPUT"A LOTTOSZAMDK
CLS
PRINT A;B;C;D;E
FOR I=0 TO ó :
FOR J=25 TO 100
NEXT I
FOR I=0 TO 30
FOR J=2S T0 100 STEP 5
NEXT I
X=A/15 : Y=A-X*1S
SET(Y*S+22,X*5+12)
X=B/15 . Y=B-X*15
SET(Y*S+22,X*5+12)
X=C/15 Y=C-X*1S
SET(Y*S+22,X*S+12)
X=D/15 : Y=D-X*15
SET(Y*S+22,X*5+12)
X=E/15 : Y=E-X*15
SET(Y*S+22,X*S+12)
GOTO 170
4.2 G
";A,B,C,D,E
SET(J,5*I+10) NEXT J
SET(J,I+10) NEXT J
IF Y=0 THEN X=X-1 Y=15
IF Y=0 THEN X=X-1 Y=15
IF Y=0 THEN X=X-1 Y=15
IF Y=0 THEN X=X-1 Y=15
IF Y=0 THEN X=X-1 Y=15
REH
K=5
CLS
FOR 1=1 T0 2*K
FOR J=1 TO K
NEXT 1
INPUT L,N
IF L=0 THEN K=K/N ELSE K=K*N
5010 30
4.3 G Y A K Ü R L A T
SET(I,J+ó) NEXT J :
123
10 REM ..... 4.4 G Y A K Ü R L A T
20 DEFINT A-Z :
A=0
30 CLS :
PRINT
40 C=1 :
FOR L=0 TÜ_3 :
FOR K=0 TÜ.3 :
IF A=C THEN M=L : N=K : PRINT" L "; ELSE PRINT" ";
50 C=C+1 :
NEXT K :
PRINT : PRINT : PRINT :
NEXT L :
PRINT
60 C=1
70 FOR L=0 TO 3 : C=C-1 :
FOR K=0 TO 3 :
B=C/2
80 IF C=2*B THEN 110
90 IF M=L AND N=K THEN
FOR X=K*18 TO K*18+17 : SET(X,L*9) : SET(X,L*9+B) : NEXT X :
FOR Y=L*9 TO L*9+B : SET(K*18,Y) : SET(K*18+17,Y) : NEXT Y :
GOTO 110
100 FOR X=K*1B TO K*18+17 :
FOR Y=L*9 TO L*9+8 : SET(X,Y) : NEXT Y :
NEXT Y
110 C=C+1 :
NEXT K,L :
INPUT A :
GOTO 30
10 REM ..... 4.5 G Y A K Ü R L A T
20 DEFINT X :
CLS
30 INPUT"A SZAM ";X
40 IF X)32225E(1/5) THEN PRINT"TUL NAGY A SZAM !" : GOTO 30
S0 PRINT" X","-X","10*X","X*X": PRINTX,-X,10*X,X*X
60 PRINT : PRINT"XE5= ";XE5 : PRINT : PRINT
70 PRINT : PRINT :
GOTO 30
10 REM ..... 4.6 G Y A K Ü R L A T
20 CLS :
INPUT"A HARÜM SZAM ";X,Y,Z :
CLS
30 PRINT"X+Y+Z=";X+Y+Z,"X*Y*Z=";X*Y*Z
40 PRINT"X-Y-Z=";X-Y-Z,"X/Y/Z=";X/Y/Z
50 PRINT"X+Y*Z=";X+Y*Z,"X*Y+Z=";X*Y+Z
60 PRINT"X-Y*Z=";X-Y*Z,"X*Y-Z=";X*Y-Z
70 PRINT"X*Y/Z=";X*Y/Z,"X/Y*Z=";X/Y*Z
80 PRINT"X/Y+Z=";X/Y+Z,"X+Y/Z=";X+Y/Z
90 PRINT"X-Y+Z=";X-Y+Z,"X+Y-Z=";X+Y-Z
100 PRINT"X-Y/Z=";X-Y/Z,"X/Y-Z=";X/Y-Z
110 GOTO 110
10 REM ..... 4.7 G Y A K Ü R L A T
20 CLS :
INPUT N :
P=0 : K=0 :
CLS :
PRINT N : PRINT
30 FOR I=1 TO N : P=P+2*I-1 : K=K+IE3 : NEXT I
40 PRINT"A PARATLAN SZAMÜK ÜSSZEGE : ";P :
PRINT"A KÜBSZAMÜK ÜSSZEGE : ";K
50 GOTO 50
124
10
20
30
40
50
10
20
40
10
20
30
40
50
60
_1m
20
30
40
50
60
70
80
90
10
20
30
40
50
60
70
B0
90
REM ..... 4.8 G Y A K O R L A T
CLS :
INPUT"N= "; :
K=0 :
PRINT"KEREM A SZAMOKAT 9" _
FOR I=1 TO N : INPUT X : K=K+X : NEXT I
PRINT"AZ ATLAG = ";K/N
STOP
REM ..... 4.9 G Y A K O R L A T
CLS :
INPUT"A KOCKA ELHOSSZA ";X :
CLS :
PRINT : PRINT
PRINT"TERFOGAT =";XE3 : PRINT :
PRINT"FELSZIN =";6*X*X : PRINT :
PRINT"ELHOSSZ =";12*X
PRINT : PRINT :
STOP
REM ..... 4.10 G Y A K O R L A T
CLS :
PRINT"A POLINOM : X -) X * X - 2 * X "
PRINT :
INPUT"MELYIK HELYEN KERED A HELYETTESITESI ERTEKET ";X
PRINT : PRINT "X= "; ,"X * X - 2 * X = ";X*X-2*X
PRINT : PRINT : PRINT"UJ ERTEK (1) /KULONBEN VEGE/";
INPUT'I
IF I=1 THEN 20 ELSE STOP
REM ..... 4.11 G Y A K O R L A T
L=10000 : S=50000 : V=10000
CLS :
PRINT"UZEMANYAG :":L :
PRINT"FOLDTOL VALO TAVOLSAG :";S :
PRINT"SEBESSEB :";V : PRINT : PRINT
INPUT"UJ SEBESSÉG ";V : INPUT"IDO ";T
S=S-V*T : L=L-V*V*T/600
IF S)10 THEN IF L)0 THEN 30 ELSE
PRINT"ELFOBYOTT AZ UZEMANYAGOD !" :
FOR I=1 TO 400 : NEXT : GOTO B0
IF SE-10 THEN PRINT"SZERENCSESEN FOLDET ERTEL !" : STOP
PRINT : PRINT : PRINT"BUMM !!!!!!" : PRINT :
PRINT"A FOLDNEK UTKOZTEL !"
STOP
REM ..... 4.12 G Y A K O R L A T
CLS
INPUT"A MASODPERCEK SZAMA ";M :
PRINT : PRINT"EZ " :
N=0 : O=0 : P=0
N=N+1 : IF MiN*86400 THEN PRINTN-1,"NAP" ELSE 40
M=M-(N-1)*B6400
O=O+1 : IF M(O*3600 THEN PRINTO-1,"ORA" EL.Í 60
M=M-(O-1)*3600
P=P+1 : IF MűP§60 THEN PRINTF Í,"PERC" ELSE 80
PRINTM-(P-1)*ó0,"MASL *ERC" : PRINT : PRINT : PRINT :
GOTO 30
125
10 REM ..... 4.13 G Y A K O R L A T
20 DEFINT A-Z :
CLS
30 INPUT"A KETTES SZAMRENDSZERBELI SZAM ";X :
J=X
40 A=0 : I=1
50 Z=X/2 : IF X=2*Z THEN X=X/10 ELSE X=(X-1)/10 : A=A+I
60 IF X)0 THEN I=I*2 : GDTÜ 50
70 PRINTJ,"A TIZES SZAMRENDSZERBEN :";A : PRINT : PRINT
80 INFUT"A TIZES SZAMRENDSZERBELI SZAM ";Y :
J=Y
90 A=0 : I=1
100 Z=Y/2 : IF Y=2*Z THEN Y=Y/2 ELSE Y=(Y-1)/2 : A=A+I
110 IF Y?0 THEN I=I*10 : GOTO 100
120 PRINTJ,"A KETTES SZAMRENDSZERBEN :";A : PRINT :
GOTO 30
10 REM ..... 4.14 G Y A K Ü R L A T
20 CLS :
DEFINT A-Z
30 INPUT"A KET SZAM ";X,Y
40 IF XCY THEN Z=X : X=Y : Y=Z
50 z=x/v : PRINTX;"=";Y;"*";Z;"+";X-Z*Y
60 PRINT : PRINT :
GOTO 30
10 REN ..... 4.15 G Y A K Ü R L A T
20 CLS :
DEFINT A-Z
30 INPUT"A SZAM _";x :
PRINT"AZ ENNEL KISEBB PRIMSZAMÜK :" :
IF X=1 THEN 120
4m PRINT" 1 "; :
IF X=2 THEN 120
50 PRINT" 2 ";
60 H=3
70 IF K)=X THEN 120
80 FOR I=3 TO K/2+1 STEP 2 :
Z=K/I : '
IF K=Z*I THEN 110
90 NEXT I
100 PRINT K;
110 H=K+2 :
BÜTÜ 70
120 PRINT : PRINT : GOTO 30
10 REM ..... 4.16 B Y A K D R L A T
20 CLS :
INPUT"AZ DT SZAM ";A,B,c,o,E
30 X=0': I=0
40 IF X)=A ÜR X)=B ÜR X)=C ÜR X)=D ÜR X)=E THEN X=X-1 3
GOTO 40
50
60
70
80
90
100
110
120
130
140
150
IF A(B THEN Z=E ELSE Z=A
IF ZCC THEN Z=C
IF Z(D THEN Z=D
IF ZűE THEN Z=E -
: IF I)4 THEN STOP
PRINTZ; : I=I+1
IF A=Z THEN A=X
IF B=Z THEN B=X
IF C=Z THEN C=X
IF D=Z THEN D=X
IF E=Z THEN E=X
GOTO 50
126
10
20
30
40
50
60
70
10
20
30
40
50
60
70
80
90
10
20
30
40
50
60
70
80
90
REM ..... 4.17 B Y A K D R L A T
CLS :
DEFINT A-Z
INPUT" A KET SZAM ";X,Y : A=X*Y
IF X=Y THEN 60
IF XPY THEN X=X-Y : GOTO 40 ELSE Y=Y-X
PRINT" L.N.K.D. :";X : PRINT" L.K.K.T.
PRINT : PRINT : GÜTD 30
GOTO 40
";A/X
REM .... 4.18 G Y A K D R L A T
CLS :
DEFINT A-Z
INPUT"A KET SZAM ";X,Y
IF X)Y THEN Z=Y : Y=X : X=Z
X=X+1 : IF X)=Y THEN 80
FOR I=2 TO X/2 :
Z=X/I :
IF X=Z*I THEN 50
NEXT I :
PRINT X :
GOTO 90
PRINT"NINCS ILYEN PRIMSZAM !"
STOP
REM ..... 4.19 G Y A K D R L A T
DEFINT A-Z :
CLS :
INPUT"A KET SZAM "; X,Y :
M=0 : N=0
FOR I=2 TO X/2 :
Z=X/I
IF X=Z*I THEN N=N+1
NEXT
FOR I=2 TO Y/2 :
Z=Y/I
IF Y=Z*I THEN N=N+1
NEXT
IF M=N THEN PRINT"AZ DSZTDK SZAMA UGYANANNYI !":GÜTDÍ
100 PRINT"TDBB DSZTDJA VAN A KDVETKEZD SZAMNAK :"
110 IF M(N THEN PRINT Y ELSE PRINT X
120 STOP
10
20
30
40
50
60
70
80
nem ..... 4.20 G v A K 0 R L A T
DEFINT x,v
CLS
FOR x=5 TO 45
FDR v=5 TO 45
IF x=4m DR x=2m DR x=3e DR x=4o OR 11ix AND xc19
DR v=1o DR v=2o DR v=3o DR v=4m DR 11(v AND Y(19
THEN 70
ELSE SET(X,Y)
NEXT v,x
GOTO se
127
10
20
30
40
50
10
20
40
50
60
70
80
90
Ötödik fejezet
REM ..... 5.1 G Y A K D R L A T
CLS : _
X=ó3 : Y=23
FOR B=0 TO 20 :
IF B=1 ÜR B=2 ÜR B=3 ÜR B=5 ÜR B=ó ÜR B=7 ÜR B=B ÜR B=12
THEN 40 ELSE A=1.8*SÜR(400-B*B) :
SET(X+A,Y+B) : SET(X+A,Y-B) : SET(X-A,Y+B) :
NEXT B
GOTO 50
SET(X-A,Y-B)
REM 5.2 G Y A K Ü R L A T
CLS :
X=ó3 : Y=25
PRINT:PRINT:PRINT"
PRINT:PRINT:PRINT:PRINT:PRINT" "
PRINT"9
PRINT:PRINT:PRINT:PRINT:PRINT:PRINT:
PRINT"
FOR B=0 TO 20 :
IF B=1 ÜR B=2 ÜR B=3 ÜR B=5 ÜR B=ó ÜR B=7 ÜR B=B ÜR B=12
THEN 50 ELSE A=1.B*SGR(400-B*B) :
SET(X+A,Y+B) : SET(X+A,Y-B) : SET(X-A,Y+B) :
12":PRINT:
ól!
SET(X-A,Y-B)
NEXT
FOR I=0 TO 15 : SET(ó3,2"-I) : NEXT I :
FOR I=0 TO 100 : NEXT :
FOR I=15 TO 0 STEP -1 : RESET(ó3,25-I) : NEXT I
FOR I=0 TO 30 : SET(ó3+I,25) : NEXT I :
FOR I=0 TO 100 : NEXT :
FOR I=30 TO 0 STEP -1 : RESET(ó3+I,25) : NEXT I
FOR I=0 TO 15 : SET(ó3,25+I) : NEXT I :
FOR I=0 TO 100 : NEXT :
FOR I=15 TO 0 STEP -1 : RESET(ó3,25+I) : NEXT I
FOR I=0 TO 30 : SET(ó3-1,25) : NEXT I :
FOR I=0 TO 100 : NEXT :
FOR I=30 TO 0 STEP -1 : RESET(ó3-I.25) : NEXT I
100 GOTO 60
10
20
30
10
20
30
128
REM ..... 5.3 G Y A K Ü R L A T
CLS :
I=1
X=ó3+EXP(-.01*I)*75*SIN(I*3.14/32) :
SET(X,23) :
FDR K=1 TO 50 :
RESET(X,23) :
I=I+1 :
GOTO 30
NEXT :
REM .....
CLS :
FOR I=1 TO 15 :
I=1
X=EXP(-.01*I)*SIN(I*3.14/32)*75+ó3 :
SET(X,47) :
I=I+1 :
PRINT :
GOTO 30
5.4 G Y A K Ü R L A T
PRINT : NEXT I :
10
20
30
40
50
60
70
REM ..... 5.5 G Y A K D R L A T
DEFINTA-Z :
CLS
I=0 :
INPUT"A SZAH ";X :
IF ABS(X))9999 THEN 30
IF X(0 THEN X=-X : I=1
K=0 : PRINT
K=K+1 : A=10CK : IF Xih THEN 70 ELSE 60
IF I=1 THEN 90
99 PRINTX,"=",X/10[(K-1);"E+";(K-1) : GOTO 199
99 PRINT-X,"=",-X/Iüt(K-1);"E+";(K-1)
199 PRINT : PRINT : PRINT :
GOTO 39
19 REH ..... 5.5 G v A K 0 R L A T
29 CLS
39 PRINT" Az EGYENLET : s 1 N 1 x ) = x / 2" : PRINT
49 INPUT"X= ";x : PRINT
59 PRINT"X= ";X,"SIN(X)-X/2= ";SIN(X)-X/2 : PRINT : PRINT
59 IF ABS(SIN(X)-X/2)(.0001 THEN PRINT" A svox : ";x ELSE 49
79 PRINT -
80 STOP
19 REH ..... 5.7 G v A K 0 R L A T
29 CLS
39 INPUT"AZ OLDAL A=";A :
IF A)0 THEN 49 ELSE PRINT"
EZ NEM sav HARDMSZOG OLDALA 1" : GDTO 39
49 INPUT"A KET szos (RADIANBAN HERVE 1) x,v=";x,v
59 z=3.14159-x-v :
IF zc9 oR xq9 oR YCO THEN PRINT"
EZEK NEM EGY HARonszos 520551 1" : GOTO 49
59 PRINT : PRINT"A HARMADIK szoe z=";z
79 PRINT = PRINT"A HASIK KET OLDAL B=";A*SIN(X)/SIN(Z),'
"C=";A*SIN(Y)/SIN(Z)
80 PRINT 1 PRINT : PRINT : GOTO 39
19 REM ..... 5.8 G v A K 0 R L A T
29 CLS :
PRINT"A KDSZINUSZ FUGGVENY HELYETTESITESI ERTEKEI :"
39 INPUT"KEZDDERTEK ";x : INPUT"LEPESKDZ ";Y
49 FOR 1=x TO x+19*v STEP Y : PRINT 1,cos(x) : NEXT 1
59 PRINT : PRINT"TDVABB (1) vess 19)";
59 INPUT 1 ; IF 1=1 THEN 29 ELSE IF 1=9 THEN STOP ELSE 59
19 REH ..... 5.9 s v A K 0 R L A T
29 CLS
39 INPUT"N= ";N
49 PRINT" N (1+1/N)[N (1+1/N)[(N+1)"
59 FOR I=N TO N+9 : PRINTI,(1+1/I)[I,(1+1/I)[(I+1) : NEXT 1
59 PRINT : PRINT : PRINT"UJ N ERTEK 11)";
79 INPUT! : IF 1=1 THEN 39
89 STOP
129
10
20
30
10
20
30
40
50
60
70
10
20
30
40
50
60
70
80
10
20
30
40
50
60
10
20
30
40
10
20
30
Hatodik fejezet
REH ..... 6.1 G Y A K Ü R L A T
CLS 3
A=RND(127) : B=RND(47) : H=RND(127) : N=RND(47) :
X=RND(127) : Y=RND(47)
SET(A,B) : SET(H,N) : SET(X,Y) :
IF INKEY3="" THEN CLS : GOTO 30 ELSE 20
REH ..... 6.2 G Y A K Ü R L A T
CLS
GOTO 50
CLS :
X=RND(127) : Y=RND(47) : SET(X,Y)
Bt=INKEY3 : IF B3="" THEN 50 ELSE IF AS()Bt THEN A3=Bt : GOTO 40
FOR I=1 TO 50 : NEXT :
RESET(X,Y) :
FOR I=1 TO 50 : NEXT
A3=INKEYS : IF A3="" ÜR AS=BS THEN SET(X,Y) : GOTO 60 ELSE 40
REM ..... 6.3 G Y A K Ü R L A T
DEFINT I :
CLS :
X=63 : Y=23
I=RND(4)
IF I=1 THEN X=X+4 : IF X)127 THEN X=127
IF I=2 THEN Y=Y+2 3 IF Y)47 THEN Y=47
IF I=3 THEN X=X-4 3 IF X(0 THEN X=0
IF I=4 THEN Y=Y-2 3 IF Y(0 THEN Y=0
RESET(A,B) : SET(X,Y) 3
A=X 3 B=Y 3
BÜTÜ 30
REM ..... 6.4 G Y A K Ü R L A T
CLS :
SET(1,1) : SET(1,20) : SET(25,1) : SET(25,27) 3 SET(50,5) : SET(50,15)
I=RND(6)
IF I=1 THEN X=1 : Y=1 ELSE IF I=2 THEN X=1 3 Y=20 ELSE
IF I=3 THEN X=25 3 Y=1 ELSE IF I=4 THEN X=25 3 Y=27 ELSE
IF I=5 THEN X=50 : Y=5 ELSE IF I=6 THEN X=50 : Y=15
FOR I=1 TO 5 3 _
RESET(X,Y) : FOR J=1 TO 50 : NEXT J 3 SET(X,Y) 3
NEXT I
GOTO 30
REH ..... 6.5 B Y A K Ü R L A T
IF INKEYs="" THEN 20 ELSE CLS
X=RND(120)+3 : Y=RND(40)+3 : SET(X,Y) :
FOR I=1 TO 3 3 SET(x+I,Y+I) 3 SET(X-I,Y+I) 3 NEXT I 3
FOR I=-3 TO 3 STEP 2 3 SET(x+I,Y+3) 3 NEXT I
GOTO 20
REM ..... 6.6 B Y A K Ü R L A T
FOR I=1 TO 15 3 PRINT : NEXT 3
PRINT" ------------------------------------------------- --"
I=RND(B00)+20 3
FOR J=1 TO I 3 NEXT 3
GOTO 20
130
10
20
40
50
60
70
10
20
30
40
50
60
70
10
20
30
40
50
60
70
80
90
100 AS=INKEYS :
10
20
30
40
50
10
20
30
40
60
.PRINT"A KOCKADÜBASÜK ELOSZLASA :" :
REM ..... 6.7 G Y A K O R L A T
DEFINT A-Z :
CLS :
PRINT : PRINT : PRINT
PRINT" +++++++ +++++++" :
FOR I=1 TO 7 :
PRINT" + + + +" :
NEXT :
PRINT" +++++++ +++++++"
I=RND(2) : J=RND(2)
FOR B=3 TO 23 :
FOR A=1 TO 10 :
IF J=1.THEN SET(13+(I-1)*22+A,9+B)
ELSE RESET(13+(I-1)*22+A,35-B)
NEXT A,B
GOTO 40
REM ..... 6.8 G Y A m 0 R L A T
DEFINTA-Z :
A=o : B=0 : c=m : D=0 : E=0 :F=0 :
CLS
PRINT" DOBALOM A KOCKAT se! A DOBASOK SZAMA :"
FOR H=1 TO 1mmm :
I=RND(6) :
PRINTK; :
IFI=1THENA=A+1ELSEIFI=2THENB=B+1ELSEIFI=3THENC=C+1
ELSEIFI=4THEND=D+1ELSEIFI=5THENE=E+1ELSEF=F+1
NEXT K
CLS :
PRINT :
PRINT"4-es",D :
PRINT"1-es",A :
PRINT"2-es",B : PRINT"5-os",E :
PRINT"6-os",F
PRINT"3-as",C :
STOP
REM ..... 6.9 G Y A K O R L A T
CLS :
INPUT"A KEZDOPDNT KODRDINATAI ";X,Y
CLS :
SET(X,Y)
B5=AS
IF BS="F" THEN Y=Y-1 : IF Yű0 THEN Y=0
IF BS="L" THEN Y=Y+1 : IF YP47 THEN Y=47
IF BS="J" THEN X=X+1 : IF X)127 THEN X=127
IF BS="B" THEN X=X-1 : IF X(0 THEN X=0
SET(X,Y)
IF As="" THEN 50 ELSE 4m
REM ..... 6.10 G Y A K 0 R L A T
DEFINT X
CLS :
X=RND(4)
IF X=1 THEN PRINT" TAVASZ" ELSE IF X=2 THEN PRINT"
NYAR" ELSE IF X=3 THEN PRINT" OSZ"
ELSE PRINT"
TEL"
FOR I=1 TO 200 : NEXT : GOTO 30 '
REM ..... 6.11 G Y A K D R L A T
CLS
X=RND(100) : Y=RND(100) : PRINT : PRINT
PRINT"MENNYIVEL EGYENLD ?" : PRINT :
PRINTX;" * ";Y;" = "; : INPUT A : PRINT : PRINT
IF X*Y=A THEN PRINT" JOL SZAMDLTAL ! " : PRINT : PRINT :
GOTO 30
PRINT" ELLENORIZD !!!" : GOTO 40
131
10 REM ..... 6.12 G Y A K O R L A T
20 CLS
30 PRINT : PRINT : PRINT :
X=RND(100) : Y=RND(100)
40 PRINT : PRINT" MI AZ EREDMENY ?",X*Y;" : ";X;" = ";
50 INPUT A : IF Y=A THEN PRINT"JOL SZAMOLTAL !" : PRINT : GOTO 30
60 PRINT"ELLENORIZD !!!" : PRINT : GOTO 40
10 REM ..... 6.13 B Y A K O R L A T
20 CLS :
PRINT : PRINT : PRINT
PRINT"HA MEGJELENIK EGY FELKIALTOJEL A KEPERNYON,
NYOMJAL MEG EGY BILLENTYUT !"
30 PRINT : PRINT : PRINT : PRINT"K E Z D H E T J U K 7"
40 IF INKEYi="" THEN 40 ELSE CLS
50 K=RND(1000)+100 : .
FOR I=1 TO K : NEXT :
I=0 :
A3=INKEYS :
PRINT" S"
60 IF INKEYS="" THEN I=I+1 : GOTO 60
70 PRINT : PRINT : PRINT
PRINT I,"IDOEGYSEGRE VOLT SZUKSEGED !" : PRINT : PRINT :
PRINT"FOLYTATOD -I NEM - N"
80 AS=INKEYS : IF AS="I" THEN 20 ELSE IF A3="N" THEN STOP ELSE 80
10 REM ..... 6.14 G Y A K O R L A T
20 CLS :
PRINT"HA MEGJELENIK AZ 1-ES SZAM, AKKOR AZ 1-ES,
HA A 9-ES SZAM, AKKOR A 9-ES BILLENTYUT KELL
LENYOMNI !
K E Z D H E T J U K ?"
30 IF INKEYt="" THEN 30 ELSE CLS
40 I=RND(1000)+100 :
FOR K=1 TO I : NEXT :
I=0 :
AS=INKEY5
50 IF RND(2)-1 THEN 80
60 PRINT"1"
70 IF INKEYS="1" THEN 100 ELSE I=I+1 : GOTO 70
80 PRINT" 9"
90 IF INKEYS="9" THEN 100 ELSE I=I+1 : GOTO 90
100 PRINT : PRINT : PRINT"AZ IDOEGYSEG : ";I : PRINT :
PRINT : PRINT : PRINT"ELOVASTAD 2"
113 1F_INKEYS="" THEN 110 ELSE 20
10 REM .... 6.15 G Y A K O R L A T
20 CLS :
PRINT : PRINT"A JATEKOSOK A - D - BILLENTYU
LENYOMASAVAL DOBHATNAK 3
_ K E Z D H E T J U K ?"
30 IF INKEYS="" THEN 30 ELSE CLS : A=0 : B=0
40 INPUT" A B JATEKOS TIPPJE ";X . PRINT : PRINT :
PRINT"AZ A JATEKOS DOB !"
50 IF INKEY3="D" THEN Y=RND(6) : PRINT Y ELSE 50
60 IF X=Y THEN A=A+X ELSE A=A-ABS(X-Y)
70 PRINT"A= ";A': PRINT : PRINT
80 IF A)99 THEN PRINT : PRINT"AZ A JATEKOS NYERT 2" 2 STOP
90 INPUT" AZ A JATEKOS TIPPJE ";X : PRINT : PRINT :
PRINT"A B JATEKOS DOB !"
100 IF INKEYS="D" THEN Y=RND(6) : PRINT Y ELSE 100
110 IF X=Y THEN B=B+X ELSE B=B-ABS(X-Y)
120 PRINT"B= "; : PRINT : PRINT
130 IF B??? THEN PRINT : PRINT"A B JATEKOS NYERT !" ELSE 40
140 STOP
132
10
20
30
40
50
10
20
40
50
60
70
10
20
40
50
60
10
20
30
40
50
60
10
20
30
40
50
10
20
30
40
Hetedik fejezet
REM ..... 7.1 G Y A K 0 R L A T
DEFSTR A,B :
CLS -
INPUT"A szo ";A : PRINT = PRINT"A szo FDRDITVA ";
X=LEN(A) :
FOR I=X TO 1 STEP-1 : PRINT MIDS(A,I,1); : NEXT I
PRINT : PRINT : PRINT : BDTO 30
nem ..... 7.2 G Y A K 0 R L A T
DEFSTR A :
CLS
INPUT"A szavas ";A :
X=LEN(A) : J=o
FDR 1=1 TO x :
IF n1os(A,1,1)="A" THEN J=J+1
NEXT 1
PRINT : PRINT"AZ A BETUK sznnn :";J : PRINT : PRINT
GOTO se
REM ..... 7.3 G Y A K D R L A T
DEFSTR A,B :
CLS
INPUT"A szo ";A :
'x=LEN(A)
FOR 1=1 TO x :
B=n1os(A,1,1) :
IF B="A" THEN PRINT"*"; ELSE PRINT B;
NEXT 1
PRINT : PRINT : GOTO 30
REM ..... 7.4 G Y A K 0 R L A T
DEFSTR A,B :
CLS
INPUT"A szavas ";A :
x=LEN(A)
FOR I=1 TO X :
B=MIDS(A,I,1) :
IF Bík" " THEN PRINT B;
NEXT I 1
PRINT : PRINT : GDTO 30
REM ..... 7.5 G v A K 0 R L A T
DEFSTR A,B =
CLS
INPUT"A szo ";A =
X=LEN(A) =
FOR 1=1 TO x = B=n1os(A,1,1) : PRINT cHRs(Asc(a)+32);
PRINT 2 PRINT : PRINT : GOTO 30
REM ..... 7.6 G v A K o R L A T
CLS
FOR I=0 TO 14 :
PRINT RIGHTS(STRS(I*I),LEN(STRS(I*I))-1); :
NEXT 1
PRINT : PRINT : STOP
NEXT I
133
10 REM ..... 7.7 B Y A K 0 R L A T
20 CLS =
DEFSTR K : DEFINT T,Z
30 INPUT"A KETTES SZAMRENDSZERBELI sznn :";K :
X=LEN(K) : L=1
40 FOR I=X TO 1 STEP-1 :
IF MIDS(K,I,1)="1" THEN T=T+L
50 L=L*2 :
NEXT 1 :
PRINT PRINT K,"A TIZES SZAMRENDSZERBEN :",T
60 PRINT = PRINT : INPUT"A TIZES SZAMRENDSZERBELI sznn ";T
70 K="" : L=T
80 Z=T/2 : IF T=2*Z THEN T=T/2 : K="0"+K ELSE T=(T-1)/2 : K="1"+K
90 IF T)0 THEN B0 ELSE PRINT : PRINT :
PRINT L,"A KETTES SZAMRENDSZERBEN :",K
100 PRINT : PRINT : PRINT : GOTO 30
10 REM ..... 7.8 G Y A K O R L A T
20 CLS :
DEFSTR A
30 I=9+RND(90) : J=9+RND(90) : A=STRS(I*J) : X=LEN(A) :
A=RIeHTs(A,x-1) :
IF x=4 THEN A="0"+A
40 PRINT A, :
FOR I=1 TO 200 : NEXT :
BOTO 30
10 REM ..... 7.9 G Y A K O R L A T
20 DEFSTR A,B : DEFINT X,Z :
CLS
30 FOR I=1 TO 10 :
PRINT I;". SZAM= "; : INPUT A : B=B+A
NEXT I
40 X=LEN(B) : Z=X/5 : X=X-Sül : Z=5*Z-1 :
CLS
50 FOR I=1 TO Z STEP 5 : PRINT MIDS(B,I,5)
60 PRINT
70 STOP
NEXT.I
10 REM ..... 7.10 G Y A K O R L A T
20 DEFSTR A,B :
CLS
30 INPUT"A MUVELET ";A :
I=0 : X=LEN(A)
40 I=I+1 : IF I)X THEN CLS : GOTO 30
50 B=MIDS(A,I,1)
60 IF B="+" THEN J=1 ELSE IF B="*" THEN J=0 ELSE 40
70 C=VAL(LEFTS(A,I-1)) : D=VAL(RIGHTS(A,X-I))
80 IF J THEN C=C+D ELSE C=C*D
90 CLS :
PRINT A;" = ";C : PRINT : PRINT : PRINT : GDTO 30
134
10
20
30
10
20
30
10
20
10
20
30
40
50
10
20
30
40
50
Nyolcadik fejezet
REM ..... 8.1 G Y A K O R L A T
CLS
PRINT@RND(1016),VVILLOG" :
FOR I=1 TO 100 : NEXT 3
GOTO 20
REM ..... 8.2 G Y A K O R L A T
CLS :
INPUT"HANYADIK KARAKTERPOZICIOTOL IRJAK ";K :
INPUT"MIT IRJAK KI ";AS
CLS :
PRINT@K,AS :
FOR I=1 TO 1000 : NEXT :
GOTO 20
REM ..... 8.3 G Y A K O R L A T
CLS :
PRINT@ZBS," /////"
PRINT@349,". O O ."
PRINT@477,". o ."
GDTO 30
PRINT@541," ....." =
: PRINT@413,". - ."; :
REM ..... 8.4 G Y A K O R L A T
CLS
FOR I=1 TO 28 : READ X,Y : SET(X,Y) : NEXT I
GOTO 40
DATA ó0,10,ó1,10,ó2,10,ó3,10,ó4,10,59,11,59,12,ó1,12,ó3,12,
59,13,59,14,ó2,14,59,15,59,1ó,ó2,1ó,59,17,ó0,1B,ó1,1B,ó2,
1B,ó3,1B,ó4,18.65,17,ó5,1ó,ó5,15,ó5,14,ó5,13,ó5,12,ó5,11
REM ..... 8.5 G v A K 0 R L A T
CLS
PRINT@5*ó4," 0 - c - O","SZENDIOXID"
PRINT@10*ó4,"
GOTO 50
H - 0 - H","VIZ"
135
10 REH ..... 8.6 G Y A K O R L A T
20 CLS -
30 PRINT" + + + + +" :
PRINT" + + + + +" :
PRINT" + +" g
PRINT" + +"
40 PRINT" + +" :
PRINT" + +" :
PRINT" + +":
PRINT" + +"
50 PRINT" + +" :
PRINT" + +":
PRINT" + +":
PRINT" + +":
60 PRINT" + +" :
PRINT" + + + +" :
PRINT"+ + + +" g
PRINT"+ + + + + + +"-
70 FOR I=1 TO 67 : READ X,Y : SET(X,Y) NEXT I
B0 PRINT@6*64+30,"B U D A P E S T";
90 GOTO 90
100 DATA 50,2,50,3,49,4,48,5,4B,6,47,7,47,B,46,9,46,10,46,11,
45,12,45,13,45,14,46,15,46,16,46,17,47,1B,47,19,4B,20,
4B,21,4B,22,4B,23,49,24,50,25,50,26,51,27,51,2B,52,29,
51,30,50,31,50,32,49,33,4B,34,47,33,46,34,45,35,44,36,
43,37,42,3B
110 DATA 38,39,35,40,32,41,31,42,30,42,29,43,26,44,20,45,15,46,
10.47
120 DATA 4B,34,49,35,51,36,53,37,55,3B,S4,39,54,40,53,41,
52,42,51,44,50,46
130 DATA 46,12,47,13,4B,14,48,15,4B,16,47,17,46,1B
10 REM ..... 8.7 G Y A K O R L A T
20 CLS
30 FOR X=16 TO 122 STEP 3 : SET(X,47-6*LOG(X-15)) : NEXT X
40 FOR X=0 TO 127 : SET(X,36) : NEXT X :
FOR Y=0 TO 45 : SET(10,Y) : NEXT Y
50 PRINT@13*64+2,"0";: PRINT@13*64+10,"1"; =
PRINT@35,"L O G A R I T M U S";
60 GOTO 60
10 REM ..... 8.8 G Y A H O R L A T
20 DEFINT I :
CLS :
X=0 _
30 PRINT" X";TAB(14);"INT(X)";TAB(27);"25*X";TAB(40);
"X*X";TAB(53);"SGR(X)"; :
FOR I=0 TO 63 : PRINT@64+I,"-"; : NEXT I
40 PRINT@3*64,""; : INPUT"A KEZDOERTEK= ";X : INPUT"A LEPESKOZ= ";K
I=7
50 I=I+1 : IF I=15 THEN 40 .
60 PRINT@I*64,X; : PRINT TAB(13);INT(X);TAB(26);2S*X;TAB(39);
X*X;TAB(52);SGR(X);
70 IF INKEY5="" THEN 70 ELSE X=X+K : GOTO 50
10 REM ..... 8.9 G v A H 0 R L A T
20-CLS
zm FOR x=1 TO 81 : SET(X,10) : SET(X,22) : NEXT x :
FOR x=1 TO 81 STEP 20 : FOR v=11 TO 21 : SET(X,Y) : NEXT v,x
4m X=RND(4) :
PRINT@5*64-5+10*X,"!";
FOR 1=1 TO znm : NEXT
PRINT@5*64-5+10*X," "; :
sora 4m_
136
80
90
REM ..... 8.10 G Y A K O R L A T
CLS :
L=0
FOR A=0 TO 80 STEP 10 :
FOR B=0 TO 40 STEP 5 :
IF L=-1 THEN L=0 : GOTO 50 ELSE L=-1
FOR 1=m TO 9 = FOR K=0 TO 4 : SET(A+I,B+K) : NEXT K,I
NEXT B,A
A=RND(9)-1 : B=RND(9)-1 = A=A*10 : B=B*5
FOR I=1 TO 9 :
READ x,v :
IF POINT(A,B) THEN RESET(A+X,B+Y) ELSE SET(A+X,B+Y)
NEXT 1 :
FOR J=1 TO 200 : NEXT J
IF PÜINT(A,B) THEN FÜRI=0TÜ9:FÜRK=0TÜ4:SET(A+I,B+K):NEXT:NEXT
ELSE FÜRI=0TÜ9:FÜRK=0TÜ4:RESET(A+I,B+K):NEXT:NEXT
100 RESTÜRE :
GOTO 60
112 DATA 3,1,4,1,5,1,3,2,4,2,2,3,3,3,4,3,5,3
10
20
30
40
50
60
70
10
20
30
40
50
60
70
10
20
30
40
50
10
20
30
40
10
20
30
40
8.11 G Y A K Ü R L A T
CLS :
PRINT@5*64+25,"I N D U L
I=0 : K=0 :
PRINT@B*64+20,I,":",K
IF INKEYS="I" THEN
PRINT@5*64+2S,"
ELSE 30
K=K+1 : IF K=60 THEN K=0
PRINT@B*64+20,I,":",K
IF INKEYS="S" THEN 70 ELSE 40
IF INKEYt="0" THEN 20 ELSE 70
H A T ?" :
I=I+1
REM ..... 8.12 G Y A K 0 R L A T
CLS
FOR I=1 T0 3
FOR K=0 T0 15 : READ A : PRINT@K*64+I*15,A[I; : NEXT K
RESTORE :
NEXT I
GOTO 60
DATA 1,2,3,4,5,6,7,B,9,10,11,12,13,14,15,16
REM ..... 8.13 G Y A K 0 R L A T
CLS :
FOR I=5 T0 54 : PRINT@6*64+I, CHRS(K) : NEXT I
FOR I=1 T0 200 : NEXT
FDR I=54 T0 5 STEP-1 : PRINT@6*64+I,CHRS(32) : NEXT I
GOTO 20
REM ..... 8.14 B Y A K 0 R L A T
CLS :
K=31+RND(160)
FOR I=15 TO 4 STEP-1 :
PRINT@I*64+5Ü-I,CHRS(K); :
NEXT I
IF INKEY5=""
PRINT@I*64+1B+I,CHRS(K); :
THEN 40 ELSE 20
REM ..... 8.15 G Y A K Ü R L A T
CLS
FOR I=15 TO 4 STEP -1 :
PRINT@I*64+50-I,CHRS(31+RND(160)); :
PRINT@I*64+1B+I,CHRS(31+RND(16)); :
NEXT I
IF INKEYS="" THEN 40 ELSE 30
137
19
Ha
J-
40
50
10
20
30
10
20
30
40
50
60
70
10
20
30
40
50
60
70
80
90
100 FOR K=0 TO 3000
10
20
40
138
..... 8.16 G v A K 0 R L AET
REM
CLS :
I=RND(1ó0)+31 : AS=CHRS(I)
FOR X= 5 TO 9 :
PRINT@X*ó4+21,AS; : PRINT@X*ó4+30,AS; :
PRINT@4*ó4+19+X,AS; : PRINT@10*ó4+19+X,AS; :
NEXT x
PRINT@7*ó4+24,I;
IF INHEYS="" THEN 50 ELSE 20
REM ..... 8.17 G Y A K O R L A I
CLS
I=RND(8) J=RND(B) :
PRINT@(I-1)*128+J*7,CHRi((I-1)*B+J+127);
GOTO 30
REM . . - . .. 8.18 G Y A K O R L A T
CLS
FOR X=1 TO 20 :
SET(41,X) : SET(B3,X) : SET(41+2*X,0) : SET(41+2*X,21) :
NEXT X
PRINT@2*ó4+25,CHRS(131);CHRS(131);CHR3(131); :
PRINT@2*ó4+35,cHRs(131);cHRs(131);CHRs(131);
PRINT@3*ó4+31,CHRS(191);
PRINT@5*ó4+30,CHRS(141);CHRS(140);CHRt(142);
GOTO 70
REM 8.19 G v A K 0 R L A T
DEFSTR A,B
CLS
PRINT@O,""
X=LEN(A)
1=1+1
IF I)X-3 THEN PRINT"NEM JO A szo
IF M1Ds(A,1,3)="ssz" THEN B=LEFTt(A,I)+"Z-"
ELSE 60
: INPUT"A SZO ";A
I=0
GOTO 129 .
A=R1sHTs(A,x-1)
PRINT@44B;LEN(B),B;A
NEXT
GOTO 30
Kilencedik fejezet
REM ..... 9.1 G Y A K O R L A T
DEFSTR A :
CLS
A(0)="V" : A(1)="E" : A(2)="L" : A(3)=A(1) : A(4)="T" :
A(5)=A(2) : A(ó)=A(1) : A(7)="N"
X=RND(B)-1 : PRINT@6*ó4+20+3*X,A(X); :
FOR I=1 TO 200 : NEXT :
GOTO 40
1e REH ..... 9.2 e v A E e R L A T
se cps :
PRINT"KEREM A NEVEKET 9" _
se FOR 1=e Te 9 : INPUT As(1) : NExT 1 :
CLS
4e I=RND(10)-1 : J=RND(10)-1 : IF I=J THEN 4e
se IF As(1)="" OR AS(J)="" THEN 4e ELSE PR1NTAs(1),As(J) :
AS(I)="" : As(J)=""
60 FOR 1=e Te 9 :
IF As(1)=P" THEN 7e ELSE 4e
7e NEXT 1
80 PRINT : STOP
1e REM ..... 9.3 G v A K e R L A T
2e CLS =
DIH x(2e) :
PRINT@S*ó4,"";
se FOR I=1 Te 1e : X(1)=RND(99) : PRINT x(1); : NExT 1 :
PRINT :
FOR 1=11 Te 2e : X(I)=RND(99) : PRINT x(1); : NEXT 1
4e PRINT : PRINT : PRINT "sav KIS TURELMET KEREK 9" : PRINT : PRINT
se I=1 : J=2
60 IF X(I))X(J) THEN X=X(J) : X(J)=X(I) : x(1)=x
7e J=J+1 : IF J§21 THEN 60
se 1=1+1 : J=I+1 = IF 1(2e THEN 60
9e FOR 1=2e Te 11 STEP-1 : PRINTX(I); : NEXT 1 :
PRINT :
FOR 1=1e Te 1 STEP-1 : PRINTX(I); : NEXT 1
---'- Hnvn unna
10 REM ..... 9.4 G Y A K Ü R L A T
20 DIN A(10,10)
30 FOR I=0 TO 10
40 FOR I=1 TO 10
A(I,0)=1 : A(I,I)=0 : NEXT I
FOR J=1 TO 10 : A(I,J)=A(I-1,J-1)+A(I-1,J) : NEXT J,I
60 FOR I=0 TO 10
FOR J=0 TO 10 :
IF A(I,J))0 THEN PRINT@30+I*ó1+J*ó,A(I,J);
70 NEXT J,I
B0 GOTO 80
10 REM ..... 9.5 G Y A K Ü R L A T
20 DIH A(10,5)
30 CLS :
PRINT"EZ EGY ELLENÜRZÜ !" : PRINT@25ó,"A TANTARGYAK :
HATEK -1 , FIZIKA - 2 , M . NYELV - 3 , M . IRÜDALÜM - 4 ,
TÜRTENELEM - 5 , FÜLDRAJZ - 6 , KEMIA - 7 , BIÜLÜGIA - B ,
ÜRÜSZ - 9 , ENEK - 10"
40 PRINT@704,"ÜLVASÜL (K) IRSZ (B)"
50 AS=INKEYS : IF AS="B" THENÓO ELSE IF AS="K" THEN 90 ELSE 50
60 PRINT@B32,CHRS(14); : INPUT"A TANTARGY KÜDSZAMA ";X
70 IF I(X))5 THEN PRINT"EBBÜL A TANTARGYBÜL TÜBB JEGYET NEM
IRHATSZ !" : FOR I=1 TO 900 : NEXT : GOTO 30
B0 INPUT"AZ ÜSZTALYZAT ";Y :
A(X,I(X))=Y : I(X)=I(X)+1 :
GOTO 30
90 PRINT@B32,CHRS(14); : INPUT"A TANTARGY KÜDSZAMA ";X
100 PRINT@B9ó,"A JEGYEK : ";
110 FOR I=0 TO I(X)-1 : PRINTA(X,I); : NEXT I :
PRINT@930,"MEGNEZTED ?"
120 IF INKEYS="" THEN 129 ELSE 30
1139
10 REM ..... 9.6 G Y A K Ü R L A T
20 DIM A(90) :
30 FOR I=1 TO 1000 . X=RND(90) : A(X)=A(X)+1 : NEXT I
40 PRINT@64,CHRS(14); : INPUT"MELYIK SZAM ERDEKEL ";X
CLS :
PRINT"LÜTTÜHUZÜK !"
CLS
IF XCO ÜR X)90 THEN 70
50 PRINT@44B,"EZT.A SZAMÜT ",A(X),"ESETBEN HUZTAM KI 5"
60 FOR I=1 TO 400 : NEXT
70 PRINT@64,CHRS(255) : GOTO 40
10 REM ..... 9.7 G Y A K Ü R L A T
20 DEFINT A-Z : DIN A(50) :
CLS :
PRINT"VELETLENSZAMDK"
30 FOR I=1 TO 1000 : X=RND(50) : A(X)=A(X)+1 : NEXT I
CLS
40 PRINT"SZAMÜLÜK" . J=1
50 FOR I=2 TO 50 :
IF A(J)(A(I) THEN J=I
60 NEXT I :
X=47/A(J) :
CLS
70 FOR I=1 TO 50 : FOR J=1 TO X*A(I) . SET(10+2*I,J) : NEXT J,I
80 GOTO B0
10 REM ..... 9.8 G Y A K Ü R L A T
20 DEFINT A-Z :
CLS
30 INPUT"A SZAM ( %3 ) ";N : PRINT :
PRINT"AZ ENNEL KISEBB PRIMSZAMÜK :" : PRINT
40 DIN A(N) :
FOR I=1 TO N : A(I)=I : NEXT I
50 FOR I=2 TO N/2 : FOR J=2*I TO N STEP I : A(J)=0 : NEXT J,I
60 FOR I=1 TO N-1 :
IF A(I))0 THEN PRINT A(I);
70 NEXT I :
PRINT PRINT :
CLEAR
GOTO 30
10 REM ..... 9.9 G Y A K Ü R L A T
20 DIM A(15)
30 CLS :
PRINT" A 16 SZAM :"
40 FOR I=0 TO 15
50 INPUT A(I) : IF A(1)(32 ÜR A(I)§191
THEN PRINT"UJ SZAMÜT KEREK 9" : GOTO 50
60 NEXT I :
CLS
7m FDR I=0 TO 15 : _
PRINT@I*ó4+20,A(I); : PRINT@I*ó4+35,CHRS(A(I)); :
NEXT 1
80 GOTO 80
140
19 nem ..... 9.19 G v A K 0 R L A T
29 CLS :
INPUT"HANY BETUBDL ALL A szo ";N : N=N-1
39 DEFSTR A : orn A(N) :
A: I! H
49 PRINT : PRINT"KEREM A szo BETUIT s " :
FOR 1=9 TO N : INPUT A(I) : NEXT I
59 1=9 : J=1
60 IF A(1)4A(J) THEN 79 ELSE J=I
79 I=I+1 : IF I=J THEN I=I+1
80 IF I4=N THEN 60
99 IF A(J))"*" THEN A=A(J)+A : A(J)="*" : sora 59
199 CLS :
PRINT@650,A
110 GOTO 110
10
20
30
40
50
60
70
80
10
20
30
40
50
60
10
20
30
40
50
60
70
80
90
100
110
REM ..... 9.11 B Y A K D R L A T
CLS :
DEFSTR A,B : DIM A(19)
PRINT@O,"A B E T U K E S Z L E T :"
FOR I=0 TO 19
A(I)=CHRS(RND(26)+64)
NEXT I '
PRINT@2*64+3*I,A(I)
PRINT@6*64,"A 5 z 0 : " : A="" :
FOR I=1 TO 5 : A=A+A(RND(20)-1) : NEXT I :
PRINT@B*64,A
PRINT@640,"UJ szo (u) UJ BETUKESZLET (B) "
B=INKEYS : IF B="U" THEN 59 ELSE IF B="B" THEN 39
sora 79
REM ..... 9.12 G Y A K 9 R L A T
DIN A(13,1) 0
FDR I=0 TO 13 : READ A(I,0) : READ A(I,1) : NEXT I
CLS .
FDR 1=5 TO 45 STEP 19
FDR J=0 TO 13 :
PRINT@A(J,0)+I*16,CHRS(A(J,1));
NEXT J,I
sora 59
DATA 5,140,197,140,68,170,131,170,194,170,257,170,70,149,
135,149,200,149,265,149,195,136,196,136,19B,132,199,132
REM ..... 9.13 G Y A K D R L A T
CLEAR 500 :
DEFSTR A,C : DIN A(B,B) :
J=0
CLS :
PRINT@530,"M E M D R I A -JATEK" :
FOR I=1 TO 500 : NEXT :
CLS
FOR I=1 TO B :
PRINT@B32,"EBY
FOR I=1 TO B :
FOR J=1 TO B
PRINT@10+I*3,I NEXT I
KIS TURELMET KEREK
PRINT@I*64+72,I
!" C=CHRS(127)
X=RND(63)+12B : IF A(I,J))"" THEN 99 ELSE A(I,J)=CHR§(X)
M=RND(B) : N=RND(B) : IF A(M,N))"" THEN 80 ELSE A(M,N)=cHRs(x)
NEXT J,I _
FOR I=1 TO B : FOR J=1 TO B : PRINT@I*ó4+75+J*3,C; : NEXT J,I
PR1NTee32,cHRs(14); : INPUT"AZ ELSD LAP KDDRDINATAI ";x,v :
PRINT@Y*64+75+X*5,A(X,Y);
PRINT@B96,CHRS(14);:INPUT"A MASODIK LAP KDDRDINATAI ";M,N:
PRINT@N*ó4+75+M*3,A(M,N); : PRINT@945,"MEGNEZTED 7";
IF INKEYS="" THEN 139 ELSE PR1NTee32,cHRs(254); :
PRINT@B96,CHRS(254);
IF A(X,Y)=A(M,N) THEN 119 ELSE .
PRINT@Y*64+75+X*3,C; : PRINT@N*64+7S+M*3,C; : sora 119
141
10 REM ..... 9.14 G Y A H Ü R L A T
20 CLEAR 500 :
DEFSTR A,B,C : DIM A(8,8) :
C=CHRi(127) : B=CHRS(1ó7)
30 CLS :
PRINT@53ó,"T Ü R P E D Ü" :
FOR I=1 TO 500 : NEXT :
CLS
40 FOR I=1 TO B : PRINT@10+I*3,I : PRINT@I*ó4+72,I : NEXT I
50 FOR X=1 TO 5 X
60 I=RND(8) J=RND(B) : IF A(I,J)?"" THEN 60 ELSE A(I,J)=B
70 NEXT X
80 FOR I=1 TO B : FOR J=1 TO B : PRINT@I*ó4+75+J*3,C; : NEXT J,I
90 PRINT@832,CHRS(14); : INPUT"A LÜVES KÜÜRDINATAI ";X,Y :
IF xq1 DR vq1 DR xpe OR Y)8_THEN PR1NTee32,cHRs(25m); = GOTO 9m
1mm PRINT@Y*ó4+75+Xt3,A(X,Y); : L=L+1 :
IF A(X,Y)§"" THEN PRINT@89ó,"TALALT 9" : z=z+1 :
FOR I=1 TO sem : NEXT = PR1NTee9ó,cHRs(21m); =
IF z=5 THEN 13m ELSE PR1NTee32,cHRs(25m); : GOTO 9m
11m PRINT@Y*ó4+75+X*3,"X"; : PRINT@e32,CHRs(25m);
12m BOTO 9m _
13m PRINT@9ó0,"A LOVESEID SZAMA : ";L;
14m BÜTÜ 149
10 REM ..... 9.15 G Y A H Ü R L A T
20 DEFINT A-Z : DIM A(90) :
PRINT"LÜTTÜHUZÜK !"
30 FOR I=1 TO 1000 : X=RND(90) : A(X)=A(X)+1 : NEXT I
40 J=0 :
FOR I=2 TO 90 :
IF A(J)íA(I) THEN J=I
50 NEXT I :
X=47/A(J)
60 CLS :
PRINT" GRAFIKUS SZEMLELTETES ( 1 )
SZAMSZERU EREDMÉNY ( 2 )"
7m DS=INHEYS : IF DS="1" THEN ez ELSE IF Ds="2" THEN 11m ELSE 7m
80 CLS '
99 FOR I=1 TO 90 : FOR J=0 TO X*A(I) = SET(I+20,J) : NEXTJ,I
1mm Ds=1NKEvs : BOTD 7m
11m CLS :
PRINT"MELYIH ERTEKRE vaev KIVANCSI "; : INPUT N
129 CLS :
PRINT N, "EZT A SZAMOT " : PRINT : PRINT A(N),"ESETBEN HUZTAM KI
D5=INHEY5 : 5070 7m
1m REM ..... 9.16 G'Y A K 0 R L A T
20 CLEAR 1mmm :
DEFSTR A :
CLS :
PRINT"KEREM A TIZ SZÜT !"
30 FOR I=0 TO 9-: INPUT A(I) : NEXT I :
PRINT
40 J=0 :
FOR I=1 TO 9 :
IF LEN(A(J))íLEN(A(I)) THEN J=I
50 NEXT I :
IF A(J)="" THEN PRINT : STOP ELSE PRINT A(J), : A(J)="" : BÜTÜ 40
142
10
20
30
40
50
10
20
30
40
50
60
70
80
REM ..... 9.17 B Y A K O R L A T
DEFSTR A : DIM A(15) 3
CLS
FOR I=0 TO 15 3 PRINT I+1;". SZAM ="; 3 INPUT A(I) 3 NEXT I
CLS 3
FOR I=0 T0 15 3 PRINT@I*ó4+40-LEN(A(I)),A(I); : NEXT I
BOTO 50
REM ..... 9.18 B Y A K O R L A T
CLEAR 500 3
DEFSTR A,B 3
CLS
PRINT"KEREK 10 DARAB J-T ,
FOR I=0 TO 9 3 INPUT A(I) 3
CLS
PRINT"EBESZITSD KI A HIANYOS SZOT J-VEL VAGY LY-NAL 9"
X=RND(10)-1 3 A=A(X) 3 I=0 3 H=LEN(A)
I=I+1 3
IF MIDt(A,I,1)="J" THEN J-1 ELSE
IF MIDS(A,I,2)="LY" THEN J=2 ELSE 70
PRINT@530,LEFTS(A,I-1); 3 PRINT@535,RI6HTt(A,H-I-J+1)3 3
PRINT@594+I,""; 3 INPUT B 3 PRINT@530,CHRS(31)
VAGY LY -T TARTALMAZÜ SZÜT 9"
NEXT I =
90 IF B="J" AND J=1 ÜR B'"LY" AND J=2 THEN PRINT@770,"BRAVÜ" 3
PRINT@530,A 3 FOR I=1 TO 500 3 NEXT : PRINT@12B,CHRS(31) 3 GOTO 60
100 PRINT@770,"IRBUM - BURBUM ! " : I=0 :
GOTO 70
T1zed1k fejezet
10 REM ..... 10.1 G Y A K Ü R L A T
20 CLS
se INPUT"N= "; :
DIN A(N) :
FOR I=0 TO N-1 : INPUT A(I) : NEXT
40 GOSUB 60 3
PRINT :
FOR I=0 TO N-1 3 PRINT A(I); : NEXT
50 PRINT
STOP
60 REM
70 J=0 3
FOR I=0 TO N-1 :
IF A(I)(A(I+1) THEN J=1 : Z=A(I) : A(I)=A(I+1) 3 A(I+1)=Z
80 NEXT I :
IF J=1 THEN 70
90 RETURN
10 REM ..... 10.2 G Y A K O R L 9 T
20 DIN B(12),K(12)
30 CLS :
PRINT@330," B E V E T E L (1)" : PRINT@522,
" K I A D A S (2)" :
PRINT@714," O S S Z E S I T E S (3)"
40 AS=INKEYS :
IF AS="1" THEN GOSUB 60 ELSE IF AS="2" THEN
GOSUB 80 ELSE IF AS="3" THEN GOSUB 100 ELSE 40
50 GOTO 30
60 REM BEVETEL
70 CLS :
INPUT"HANYADIK HONAP ";X . PRINT . INPUT"A BEVETEL ";Y :
B(X)=B(X)+Y :
RETURN
80 REM KIADAS
90 CLS :
INPUT"HANYADIK HONAP ";X . PRINT . INPUT"A KIADAS ";Y :
H(X)=K(X)+Y :
RETURN
100 REM OSSZESITES
110 CLS :
PRINT@2*ó4,"BEVETELEK :"
FOR I=1 TO 12 : PRINTB(I); : B=B+B(I)
PRINT@6*ó4,"KIADASOH :" :
FOR I=1 TO 12 : PRINTK(I); : K=K+K(I) . NEXT
120 PRINT@10*ó4,"AZ OSSZES BEVETEL :";B :
PRINT@12*ó4,"AZ OSSZES KIADAS :";K :
PRINT@14*ó4,"AZ EGYENLEG :";B-K; :
PRINT@1S*ó4,"ELOLVASTAD ?"
130 IF INKEY5="" THEN 130 ELSE RETURN
NEXT
10 REM ..... 10.3 B Y A K O R L A T
20 CLS :
DEFINT A-Z :
FOR I=1 TO 3 : X(I)=RND(119) : Y(I)=RND(42) : NEXT
30 I=RND(3) : X=X(I) : Y=Y(I) : GOSUB 70
40 Z=RND(4) :
IF Z=1 THEN X=X-8 ELSE IF Z=2 THEN X=X+8 ELSE
IF Z=3 THEN Y=Y-4 ELSE Y=Y+4
50 IF X§0 THEN X=0 ELSE IF YCO THEN Y=0 ELSE
IF X)119 THEN X=119 ELSE IF Y)42 THEN Y=42
60 GOSUB 100 : X(I)=X : Y(I)=Y : GOTO 30
70 REM TOROL
80 FOR J=0 TO 4 :
RESET(X+2*J,Y) : RESET(X,Y+J) :
RESET(X+8-2*J,Y+4) : RESET(X+B,Y+4-J) :
NEXT
90 RETURN
100 REM RAJZOL
110 FOR J=4 TO 0 STEP -1 :
SET(X+2*J,Y) : SET(X,Y+J) :
SET(X+8,Y+4-J) : SET(X+B-2*J,Y+4) :
NEXT
120 RETURN
144
10 REM ..... 10.4 B Y A K Ü R L A T
20 CLS :
DEFINT A-Z
30 FOR I=1 TO 10 :
FOR J=1 TO 5 :
SET(20*J,I) : SET(20*J+10,I) :
SET(20*J+I,1) : SET(20*J+I,10) :
NEXT J,I
40 FOR I=1 TO 5 : X(I)=10*I+2 : NEXT
50 I=RND(5) : X=X(I) : IF RND(2)-1 THEN BÜSUB 70 ELSE GOSUB 100
ó0 GOTO 50
70 REH BECSUK
80 FOR I=X-1 TO X : FOR J=1 TO 3 : PRINT@J*ó4+I,CHRS(127); : NEXT J,I
90 RETURN
100 REH KINYIT
110 FOR I=X TO X-1 STEP-1 : FOR J=1 TO 3 : PRINT@J*ó4+I," "; : NEXT J,I
120 RETURN
19 REM ..... 19.5 G v A K 0 R L A T
29 CLS
39 H=-1 : GOSUB 59 : P=-1
49 aosua 119 : GOTO 49
59 REM ORA
60 H=H+1 : IF H)23 THEN H=0
79 PRINT@5*ó4+35,H,"ÜRA"; : RETURN
80 REH PERC
99 P=P+1 : IF P)59 THEN P=9
199 PRINT@B*b4+35,P,"PERC";
RETURN
119 REM MASÜDPERC
129 =s+1 : IF 5159 THEN s=9 : GOSUB 80
139 PRINT@11*ó4+35,S,"MASÜDPERC"; :
RETURN
BÜSUB 80 . S=-1 : BÜSUB 110
GOSUB 50
10 REH ..... 10.6 G Y A K Ü R L A T
20 X=0 : Y=10
30 X=X+2.: IF X§57 THEN X=0
40 CLS :
GOSUB 50 : GOTO 30
50 REM BABU
60 PRINT@320+X," ***** " : PRINT@384+X,"* A A *"
PRINT@448+X,"* T *" : PRINT@512+X,"* V *"
PRINT@57ó+X," ***"
70 FOR I=1 TO 30 : NEXT
80 RETURN
10
20
30
40
50
60
70
80
90
100 IF INKEYi=""
REM ..... 10.7 G Y A K Ü R L A T
DIN A(5,S)
CLS :
GOSUB 110
FOR J=0 TO 5 :
FOR I=0 TO 5 : X(I)=A(J,I) : NEXT I
GOSUB 170 : Y(J)=X :
NEXT J
PRINT@100,""; :
FOR I=0 TO 5 :
FOR J=0 TO 5 :
BÜSUB 140 :
PRINT@640,"M I
FOR I=0 TO S :
FOR J=0 TO 5 :
GOSUB 140 :
NEXT I
PRINT@164,"";
FOR I=0 TO 5 :
FOR I=0 TO 5 :
GOSUB 170 :
PRINT@76B,"M A X I M I N :";X
THEN 100 ELSE 30
PRINTY(I); : NEXT
X(J)=Y(J) : NEXT :
N 1 M A x :";x
x(J)=A(J,1) :
v(1)=x :
NEXT J
PRINTY(I); : NEXT
X(I)=Y(I) : NEXT :
110 REM FELTÜLTES
120 FOR I=0 TO 5 :
FOR J=0 TO 5 : A(I,J)=RND(9) : PRINT@I*64+2*J,A(I,J);
NEXT 3,1
130 RETURN
140 REM MAXI
150 X=0 :
FOR K=0 TO 5 :
IF X(K))X THEN X=X(K)
160 NEXT :
RETURN
170 REM MINI
180 X=10 :
FOR K=0 TO 5 :
IF X(K)(X THEN X=X(K)
190 NEXT
RETURN
10 REM ....._10.8 G Y A K Ü R L A T
20 CLS
30 FOR I=1 TO 3 :
PRINTI; : INPUT". PONT KÜÜRDINATAI ";X(I),Y(I) :
IF X(I)í0 ÜR Y(I)í0 ÜR X(I)b127 ÜR Y(I)P47 THEN 30
40 NEXT :
X(0)=X(3) : Y(0)=Y(3) :
CLS
50 FOR Ü=0 TO 2 :
X=X(Ü) : Y=Y(Ü) : A=X(Ü+1) : B=Y(Ü+1) :
GOSUB 70
NEXT Ü
60 IF INHEYi="" THEN 60 ELSE 20
70 REM SZAKASZ RAJZÜLÜ
80 IF ABS(X-A)iABS(Y-B) THEN 90 ELSE 130
90 IF YhB THEN S=-1 ELSE S=1
100
110
120
130
140
150
160
146
FOR I=Y TO B STEP 8':
IF X=A THEN SET(X,I) : GOTO 120
J=X-(X-A)*(Y-I)/(Y-B) : SET(J,I)
NEXT I
RETURN
IF XPA THEN S=-1 ELSE S=1
FOR I=X TO A STEP S :
IF Y=B THEN SET(I,Y) : GOTO 160
J=Y-(Y-B)*(X-I)/(X-A) : SET(I,J)
NEXT
RETURN
10 REM ..... 10.9 G Y A K O R L A T
20 CLS
30 DEFINT A-Z :
PRINT: INPUT"A SZÁMOK HANYJEGYUEK ";N :
DIN A(N),B(N),E(N)
40 PRINT"AZ EGYIK SZAM SZAMJEGYEI ?" :
FOR I=1 TO N : INPUT A(I) : NEXT :
PRINT"A MASIK SZAM SZAMJEGYEI ?" :
FOR I=1 TO N : INPUT B(I) : NEXT
50 FOR I=N TO 0 STEP-1 : F=A(I)+B(I)+C : GOSUB 80 : NEXT
60 CLS :
PRINT"AZ EREDMENY :"; :
IF E(0)=0 THEN J=1 ELSE J=0
70 FOR I=J TO N : PRINT E(I); : NEXT :
.PRINT :
CLEAR :
GDTO 30
80 REM MODULO 10
90 IF F)? THEN E(I)=F-10 : C=1 ELSE E(I)=F : C=0
100 RETURN
10 REM ..... 10.10 G Y A K O R L A T
20 CLS
30 DEFINT A-Z :
INPUT"A SZAMOK HANY JEGYUEK ";N :
DIN A(N),B(N),E(2*N)
40 PRINT"AZ EGYIK SZAM SZAMJEGYEI ?" :
FOR I=1 T0 N : INPUT A(I) : NEXT :
PRINT"A MASIK SZAM SZAMJEGYEI ?" :
FOR I=1 TO N : INPUT B(I) : NEXT
50 F=A(N)*B(N) : K=2*N :
GOSUB 130
60 FOR K=2*N-1 TO 2 STEP -1
V=1 .
IF K(N+1 THEN V=N+2-K
70 Z=N :
IF K)N+1 THEN Z=2*N-K+1
80 X=V+K-N-1 : Y=N+1-V : F=0
90 FOR I=V TO Z : F=F+A(X)*B(Y) : X=X+1 Y=Y-1 : NEXT I
100 F=F+C :
GOSUB 130
110 NEXT K :
E(1)=C
120 CLS :
FOR I=1 TO N : PRINT@2*I,A(I);: PRINT@64+2*I,B(I);: NEXT
FDRI=1 TO 2*N : PRINT@25ó+2*I,E(I); NEXT :
PRINT : PRINT :
CLEAR :
GDTO 30
130 REM NOD 10
140 C=F/10 : E(K)=F-10*C
150 RETURN
147
10 REM
10.11 G Y A K O R L A T
20 DEFINTA-Z : DIN H(12) :
FOR I=1 TO 12 : READ H(I) : NEXT :
CLS
30 N=0 :
PRINT"A MAI DATUM 2" : INPUT"EV , HD , NAP ";X,Y,Z:
PRINT"A SZULETESI DATUM 2" : INPUT"EV , HD , NAP ";A,B,C
40 IF XáA THEN 30 ELSE IF X=A THEN IF Y(B THEN 30 ELSE
IF Y=B THEN IF Z§C THEN 30
50 IF X=A AND Y=B THEN N=Z-C : GOTO 150
60 IF XPA THEN 90
70 E=C : BDSUB 190 : H=0
B0 B=B+1 : IF B§Y THEN GOSUB 190 : GOTO 80 ELSE N=N+Z : GOTO 150
90 K=C : GOSUB 190 : K=0
100 B=B+1 : IF B)12 THEN 110 ELSE GOSUB 190 : BÜTD 100
110 A=A+1 : IF AKX THEN GOSUB 220 : GOTO 110
120 B=0 '
130 B=B+1 : IF BíY THEN GOSUB 190 BDTD 130
140 N=N+Z
150 PRINT@9*64,"AZ ELTELT NAPOK SZÁMA : ",N : PRINT : PRINT :
STOP
160 REM SZDHÜEV
170 I=A/4 : IF I*4=A THEN I=0 ELSE I=1
180 RETURN
190 REM HONAP
200 IF B=2 THEN J=A : GOSUB 160 : IF I=0 THEN N=N+29-K :
RETURN ELSE N=N+2B-K : RETURN
210 N=N+H(B)-H :
RETURN
220 REM EV
230 BDSUB 160 : IF I=0 THEN N=N+366 ELSE N=N+365
240 HETURN
zsm DATA 31,2e,31,3w,31,3m,31,31,3w,31,3m,31
T1zenegyed1k fejezet
10 REM ..... 11.1 G Y A K D R L A T
20 DEFINT A-Z :
X=15360 : I=16537 : Z=PEEK(X) : POKE X,95
30 Y=PEEK(I) : '
IF Y=0 THEN 30 ELSE POKE I,0 : IF Y=10 THEN
POKE X,Z : X=X+64 ELSE IF Y=91 THEN POKE X,Z : X=X-64 ELSE
IF Y=8 THEN POKE X,Z : X=X-1 ELSE IF Y=9 THEN POKE X,Z :
X=X+1 ELSE 30
40 IF XP163B3 THEN X=16383 ELSE IF X(15360 THEN X=15360
50 Z=PEEH(X) : POHE X,95 :
GOTO 30
10 REM ..;. 11.2 G Y A K Ü R L A T
20 DEFINT A-Z :
X=15360 : I=16537 : Z=PEEK(X) : POKE X,95
30 Y=PEEK(I) :
IF Y=0 THEN 30 ELSE PDKE I,0 : IF Y=10 THEN
POKE X,Z : X=X+64 ELSE IF Y=91 THEN POKE X,Z : X=X-64 ELSE
IF Y=B THEN POKE X,Z : X=X-1 ELSE IF Y=9 THEN PDKE X,Z :
X=X+1 ELSE 30
40 IF Xí15359 THEN X=X+1024 ELSE IF X=15359 THEN X=15423ELSE
IF X=16384 THEN X=1ó320 ELSE IF X)16384 THEN X=X-1024
50 Z=PEEH(X) : POHE X,95 :
148
GÜTD 30
10
20
30
40
50
60
70
80
90
100
110
120
130
10
20
30
40
50
60
70
80
10
20
30
40
50
60
70
80
90
.100
110
120
130
140
150
REM ..... 11.3 G Y-A K O R L A T
REM RAJZOLO PROGRAM
NEW LINE billentyuvel karaktermodvaltas 9
DEFINT A-Z :
CLS :
X=15360 : I=16537 : Y=32 : Z=31 : Y1=1:
GOTO 110
Y=PEEK(I) :
IF Y=0 THEN 40 ELSE POKE 1,0 : IF Y=10 THEN .
POKE X,Z : X=X+ó4 ELSE IF Y=91 THEN POKEX,Z : X=X-64 ELSE
IF Y=8 THEN POKE X,Z : X=X-1 ELSE IF Y=9 THEN POKE X,Z :
X=X+1 ELSE 70
IF X)16383 THEN X=16383 ELSE IF X(15360 THEN X=15360
Z=PEEK(X) : POKE X,95 :
GOTO 40
RETURN
POKE X,Y : Z=Y :
RETURN _
IF Yí48 AND Y)41 THEN Z=Y+49 ELSE IF Y§91 THEN Z=Y+75 ELSE
Z=Y+69
POKE X,Z :
RETURN
GOSUB 40 :
IF Y=13 THEN IF Y1=1 THEN Y1=0 : GOTO 110
ELSE Y1=1 : GOTO 110
IF Y1=1 THEN GOSUB 80 ELSE GOSUB 90
GOTO 110
REM ..... 11.4 G Y A K O R L A T
CLS :
X=15835 : X1=X : Y=15843 : I=16537 : L=0
FOR J=0 TO 4 : POKE X+2*J,RND(26)+64 : NEXT :
PRINT@10,". CSERE";
Z=PEEK(X) : POKE X,95
K=PEEK(I) :
IF K=0 THEN 50 ELSE POKE 1,0 : IF K=B THEN POKE X,Z :
X=X-2 ELSE IF K=9 THEN POKE X,Z : X=X+2 ELSE 80
IF X(X1 THEN X=X1 ELSE IF X§Y THEN X=Y
Z=PEEK(X) : POKE X.95 :
BOTO 50
L=L+1 :
PRINT@0,L; :
POKE X,K : Z=K :
GOTO 50
REM ..... 11.5 G Y A K O R L A T
DEFINT H-L
OUT 31,7 OUT 30,254
OUT 31.8 : OUT 30.15
OUT 31.0 -
RESTORE
READ HANG : IF HANG=999 THEN 120
READ IDO
OUT 30,HANG
FOR J=0 TO 33*IDO : NEXT J
GOTO 7m
OUT 3w,o
STOP
.REM A HANG ADATAI
DATA 124,11,999
149
19 REM ..... 11.6 9 v A K 9 R L A T
29 DEFINT H-L
39 OUT 31,7 : OUT 39,254
49 OUT 31,e : OUT 39,15
59 OUT 31,9
59 RESTORE
79 READ HANG : IF HANG=999 THEN 129
89 READ 109
99 OUT 39,HANs
199 FOR J=9 TO 994109 : NEXT J
119 sora 79
129 OUT 39.9
139 STOP
149 REM R9zsA SANDDR BALLADAJA
159 DATA 194,2,9,9,194,2,9,9,117,2,9,9,117,2,9,9,194,2,
9,9,194,2,9,9,117,2,9,9,194,2,9,9
160 DATA 92,2,9,9,117,4,194,2,9,9,194,4,9,9,9,4
179 DATA 139,2,9,9,139,2,9,9,139,2,9,9,139,2,9,9,117,2,9,9,
139,2,9,9,139,2,9,9,155,1,1e5,1,9,9
189 DATA 155,4,0,Ü,1ó5,3,155,1,0,0,139,4,0,Ü,Ü,4
199 DATA 29e,4,9,9,29e,3,222,1,9,9,29e,4,9,9,222,4,9,9
299 DATA 1ó5,2,0,0,1óS,2,0,Ü,155,2,0,0,1S5,2,0,0,139,2,0,0,
124,2,9,9,119,4,9,9
219 DATA 194,2,9,9,119,1,139,1,9,9,139,2,9,9,1z9,1,15s,1,9,9,
155,2,0,Ü,15S,1,1ó5,1,D,Ü,1bS,1,185,1,D,0,222,2,D,D
229 DATA 2B8,2,B,0,208,ó,0,0,208,4,0,Ü,B,4
239 DATA 999
19 REM ..... 11.7 G v A H 9 R L A T
29 CLS
39 CLEAR 129
49 OUT 31.7 : OUT 39,254 : OUT 31,e : 9uT 39,15
59 o=7
59 ss=sTRINss(57,cHRs(191)) :
PRINT@b4*8,Sí; : PRINT@b4*12,Sí;
79 FOR I=9 TO Só STEP 7
89 FOR J=9 TO 11 : PRINT@b4*J+I,CHR5(191); : NEXT J
99 NEXT I
199 RESTORE
119 FOR I=9 TO D : READ Ts,T : PRINT@64*19+7*I+4z,Ts; : NEXT I
129 I=D
139 PRINT@b4*1m+7*I+4," ";
149 PRINT@64*1Ü+7*I+4,Ti;
159 Hs=INHEvs : IF Hí="" THEN 139
159 RESTORE
179 FOR I=9 TO D
189 READ T3,T
199 IF Hs=Ts THEN 9uT 31,9 : OUT 39,T : GOTO 139
299 NEXT 1
219 PRINT@b4*15,CHRí(30);"ISMERETLEN HANG se! ";
229 RR1NT"A FOLYTATASHOZ uss LE EGY BILLENTYUT !
239 OUT 31,9 : OUT 39,9
249 PRINT@14*ó4,""; :
As=INHEvs :
IF As="" THEN 249 ELSE RRINTeó4*1s,CHRs(31); : GOTO 129
259 STOP
259 DATA C,208,D,1B5,E,1b5,F,155,G,139,A,124,H,110,c,104
150
10 REM ..... 11.8 G v A H 0 R L A 7
20 OUT 31,7 : OUT 3m,254
30 OUT 31.8 : OUT 3m,15
40 OUT 31,m
50 X=RND(ó3)+131
60 IF RND(2)-1 THEN J=153b0 : L=1ó3B s=RNo(1mm)
ELSE J=1ó383 -1535 _s=-RND(1mm)
l"
I
S L-J
70 CLS
80 FOR M=J TO L STEP 5
90 POKE M,X
100 OUT 3m,(M-15360)/5
110 NEXT
120 GOTO 50
151
A BASIC-KULCSSZAVAK
TÁRGYMUTATÓJA ÉS MAGYAR
Első fejezet
SET
RUN
CLS
GOTO
RESET
NEW
LET
PRINT
INPUT
REM
Második fejezet
IF
THEN
ELSE
STOP
END
CONT
FOR TO
STEP
NEXT
152
ÉRTELMEZÉSE
valamely állapotba juttat, a képernyő egy grafikus pontját
kigyújtja
fut, indul
Clear of the Screen: a képernyő törlése
megy valahova, az adott sorszámú sorra ugrik
alaphelyzetbe állít, kikapcsol
új
legyen
(ki)nyomtat, kiír
bemenet, bemenő jel/adat
Remark: megjegyzés
ha
akkor
különben
állj!
vége
Continue: folytat
-tól, -ig
lépés
következő
Harmadik fejezet
DEFINT
POINT
AND
OR
Negyedik fejezet
Ötödik fejezet
DEFSNG
DEFDBL
ABS
SQR
INT
SIN
COS
EXP
LOG
Hatodik fejezet
RND
DEFSTR
INKEY
Hetedik fejezet
CLEAR
STRING
CHR
ASC
LEN
LEFT
RIGHT
MID
Define Integer: egész típus definiálása
pont
és
vagy
Define Single (Precision): egyszeres pontosság definiálása
Deüne Double (Precision): dupla pontosság definiálása
(Value) Absolute: abszolútérték
Square Root: négyzetgyök
Integer: egész
szinusz
koszinusz
exponenciális
logaritmus
Random: véletlen
Define String: karaktertípus definiálása
In Keyboard: billentyűzeten
töröl
(karakter)lánc
Character: karakter
ASCII
Length: hosszúság, valaminek a hossza
bal
jobb
közép(en levő)
153
VAL Value: érték
STR String
Nyolcadik fejezet
TAB tabulálás
DATA adat
READ olvas
RESTORE visszaállít
Kilencedik fejezet
DIM Dimension: dimenzió
Tizedik fejezet
GOSUB szubrutin hívás
RETURN visszatérés
ON -nál, -nél
Tizenegyedik fejezet
PEEK megnéz, kukucskál
POKE zsák
OUT ki, kifelé
154
Az ASCII-kódok táblázata
32 space 48 0 64 @ 80 P 96 112 p 128 SPACE 144 160 176
33 ! 49 1 65 A 61 Q 97 a 113 q 129 145 161 177
34 " 50 2 66 B 82 R 96 b 114 r 130 146 162 176
35 # 51 3 67 C 63 S 99 c 115 s 131 147 163 179
36 $ 52 4 66 D 84 T 100 d 116 t 132 148 164 180
37 % 53 5 69 E 65 U 101 e 117 u 133 149 165 181
36 & 54 6 70 F 66 V 102 f 118 v 134 150 166 182
39 ' 55 7 71 G 67 W 103 g 119 w 135 151 167 183
40 ( 56 6 72 H 66 X 104 h 120 x 136 152 166 164
41 ) 57 9 73 I 89 Y 105 i 121 y 137 153 169 185
42 * 58 : 74 J 90 Z 106 j 122 z 136 154 170 186
43 + 59 ; 75 K 91 [ 107 k 123 { 139 155 171 187
44 , 60 < 76 L 92 \ 106 l 124 | 140 156 172 188
45 - 61 = 77 M 93 ] 109 m 125 } 141 157 173 189
46 . 62 > 76 N 94 ^ 110 n 126 ~ 142 158 174 190
47 / 63 ? 79 O 95 _ 111 o 127 143 159 175 191
Megjegyzések:
- Géptípusonként bizonyos ASCII-kódokhoz tartozó karakterekben eltérések lehetnek.
- Érdekességképpen megemlítjük, hogy az ASCII-kódokat nem minden személyi számítógép hasz-
nálja, léteznek más kódrendszerek is.
- A 6- 31 közötti ASCII-kódok közül néhánynak a jelentésére utaltunk a hetedik fejezetben (ún.
vezérlő karakterek).
155
Tartalom
Előszó ........................................................ 5
Bevezető ....................................................... 7
Első fejezet: ISMERKEDJÜNK A KÉPERNYŐVEL! ............... 14
SET, RESET, CLS, GOTO .................................... 14
Értékadás .................................................... 15
Grafikus képernyőméret ....................................... 17
Parancs, utasítás, program, programsor .......................... 13
Karakteres képernyőméret ..................................... 13
PRINT, INPUT .............................................. 19
Gyakorlatok az első fejezet anyagához ........................... 21
Az első fejezet feladatainak egy lehetséges megoldása .............. 23
Második fejezet: HOGYAN MARADJUNK A KÉPERNYŐN?! ..... 25
IF-THEN-ELSE .............................................. 25
Ciklusok .................................................... 28
STOP, END, CONT ........................................... 30
FOR-TO-STEP-NEXT ........................................ 30
Rövid összegzés .............................................. 32
Gyakorlatok a második fejezet anyagához ........................ 34
A második fejezet feladatainak egy lehetséges megoldása ........... 35
Harmadik fejezet: ALAKZATOK A KÉPERNYŐN ................ 38
Rajzolási sebesség ............................................. 38
DEFINT .................................................... 39
POINT ...................................................... 40
AND és OR ................................................. 41
Gyakorlatok a harmadik fejezet anyagához ....................... 42
A harmadik fejezet feladatainak egy lehetséges megoldása .......... 43
Negyedik fejezet: A SZÁMÍTÓGÉP SZÁMOLNI IS TUD ........... 45
Az egész típusú változók ....................................... 45
Egészrész .................................................... 47
Aritmetikai műveletek ......................................... 48
A prioritás ................................................... 49
Gyakorlatok a negyedik fejezet anyagához ....................... 51
A negyedik fejezet feladatainak egy lehetséges megoldása ........... 52
Ötödik fejezet: TOVÁBB SZÁMOLUNK .......................... 54
A valós típusú változók ......................................... 54
A kiíratás pontossága ......................................... 55
156
Belső aritmetikai függvények ................................... 56
Gyakorlatok az ötödik fejezet anyagához ............,........... 58
Az ötödik fejezet feladatainak egy lehetséges megoldása ............ 59
Hatodik fejezet: JÁTSSZUNK A KARAKTEREKKEL! ............. 60
RND ..................................................... 60
Karaktereket tartalmazó változók ............................... 61
INKEY$ .................................................... 62
Gyakorlatok a hatodik fejezet anyagához ........................ 65
A hatodik fejezet feladatainak egy lehetséges megoldása ............ 65
Hetedik fejezet: LÁNC, LÁNC, KARAKTERLÁNC ................. 68
A karakterláncok összeadása ................................... 68
CLEAR ..................................................... 69
STRING$, ASCII-kódok, CHR$, ASC .......................... 70
Karakterláncok összehasonlítása ................................ 72
LEN, LEFT$, RIGHT$, MID$ ................................. 73
VAL, STR$ .................................................. 74
Gyakorlatok a hetedik fejezet anyagához ......................... 75
A hetedik fejezet feladatainak egy lehetséges megoldása ............ 76
Nyolcadik fejezet: RUGALMASABB KÉPERNYŐCÍMZÉS ......... 78
PRINT@ .................................................... 78
Tabulálás .................................................... 79
DATA, READ, RESTORE .................................... 80
Gyakorlatok a nyolcadik fejezet anyagához ....................... 82
A nyolcadik fejezet feladatainak egy lehetséges megoldása .......... 83
Kilencedik fejezet: MAGASABB DIMENZIÓK ..................... 85
Tömbök ..................................................... 85
CLEAR ..................,.................................. 87
Gyakorlatok a kilencedik fejezet anyagához ...................... 90
A kilencedik fejezet feladatainak egy lehetséges megoldása .......... 91
Tizedik fejezet: EGY PROGRAM PROGRAMOKAT
IS TARTALMAZHAT ........................................ 93
Egy program megtervezése ..................................... 93
Szubrutinok .................................................. 96
Kapcsoló utasítások ........................................... 99
Gyakorlatok a tizedik fejezet anyagához ......................... 100
A tizedik fejezet feladatainak egy lehetséges megoldása ............. 101
Tizenegyedik fejezet: A SZÁMÍTÓGÉP LELKIVILÁGA ............ 104
PEEK, POKE ................................................ 104
Hanggenerátor ............................................... 105
157
Gyakorlatok a tizenegyedik fejezet anyagához .................... 108
A tizenegyedik fejezet feladatainak egy lehetséges megoldása ........ 109
Tizenkettedik fejezet: A GYAKORLATOK EGY LEHETSÉGES
MEGOLDÁSA .............................................. 111
Első fejezet .................................................. 111
Második fejezet ............................................... 114
Harmadik fejezet ............................................. 118
Negyedik fejezet .............................................. 123
Ötödik fejezet ................................................ 128
Hatodik fejezet ............................................... 130
Hetedik fejezet ............................................... 133
Nyolcadik fejezet ............................................. 135
Kilencedik fejezet ............................................. 138
Tizedik fejezet ................................................ 143
Tizenegyedik fejezet ........................................... 148
A BASIC-kulcsszavak tárgymutatója és magyar értelmezése .......... 152
Az ASCII-kódok táblázata ....................................... 155
158
Tankönyvkiadó Vállalat. A kiadásért felelős: Petró András igazgató. Dabasi Nyomda (85-1249),
Budapest-Dabas, 1986. Felelős vezető: Bálint Csaba igazgató. Raktári szám: 53 023. Szedte a
Nyomdaipari Fényszedő Üzem (85.77 l 3/8). Felelős szerkesztő: Nagy Józsefné. Műszaki igazgatóhe-
lyettes: Lojd Lajos. Grafikai szerkesztő: Démuth Ágnes. Műszaki szerkesztő: Gregor László.
A kézirat nyomdába érkezett: 1985. június. Megjelent: 1986. március. Példányszám: 21 800. Terjede-
lem: 14,30 (A/5) ív. Készült: fényszedéssel, íves ofszetnyomással, az MSZ 5601-59 és az MSZ 5602-55
szabvány szerint.