A DjVu fájl le is töltheto: basic_feladatok_tukreben_ocr.djvu vagy megtekintheto a nyers szöveg.

Hiányzó bovítmény: Caminova DjVu plugin (win) vagy "djvu-plugin" csomag (Linux).

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&lt;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

PRINT

PRINT

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$="&amp;"

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$="&amp;" 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," ",!,&amp;,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," ",!,!,!,&amp;,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

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" --------------------------------------- --"

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

PRINT

PRINT


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) =

PRINT

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.