Ismerkedés a
ZX81-gyel


Tartalom

Előszó
1. A számítógép és a csatlakoztatható eszközök
2. A számítógép kezelése
2.1 Parancsok és utasítások
2.2. Egyéb BASIC utasítások
2.3. Függvények
2.4. A gép üzenetei
3. Programok


Előszó

E könyvnek főleg azok vehetik hasznát, akiknek nincs számítástechnikai előképzettségük, és nem végeztek komolyabb műszaki-természettudományos tanulmányokat. A könyv elsősorban azoknak szól, akik még nem foglalkoztak számítógépekkel és - legalábbis egyelőre - nem kíváncsiak a kisszámítógép belsejében lejátszódó folyamatokra, nem akarnak alaposabban elmélyülni a programozástechnikában, ill. a kapcsolódó ismeretekben.
Könyvem célja elsősorban az, hogy megszerettessem a gépet az Olvasóval. Ennek érdekében igyekszem úgy bemutatni a gép használatát, hogy a programok beírása minél hamarabb sikerélményt, örömet szerezzen, hogy az Olvasó hamar felismerje a gép uralásának, önálló irányításának élvezetét, hogy kialakíthassa személyes kapcsolatát a géppel. Meggyőződésem, hogy a gép - ill. a BASIC nyelv - valamely önállóan felismert tulajdonsága sokkal értékesebb, használhatóbb a kezdő számára, mintha ezt matematikai korrektséggel levezetve kapná meg. Ha valaki nem látja át az összefüggéseket a programozás során, de a gépben örömét leli, valószínű, hogy a gépet, ill. a számítástechnikát magasabb szinten tárgyaló művekkel hamar pótolja majd hézagos ismereteit.
A könyv szerkezetét is ezen elképzelésnek megfelelően alakítottam ki. Bárhol elkezdhető, akár a kapcsolódó eszközöknél, akár az utasításoknál, akár a programok bármelyikénél. Ezért találkozhatunk a fontosabb megállapítások ismétlésével is a könyvben. A programok elrendezése nem követ semmilyen didaktikus elvet, a beírást bármelyikkel elkezdhetjük - legfeljebb a memóriaigény korlátoz. A programok után leírt "ötletek" azt szeretnék megmutatni, hogy egy program sohasem végleges, mindig célszerűbbé, jobbá alakítható, és az ilyen átalakításokat az Olvasó önállóan is el tudja végezni. A közölt programokat rosszabbul és jobban is meg lehetett volna írni. Használja őket mindenki azzal a biztos tudattal, hogy jobbat tud (vagy fog tudni) írni. Ezért is nem törekedtem a programokban a legfrappánsabb, legtrükkösebb megoldásokra. (Az egyszerűbb programok működése némi angol tudással - és persze fantáziával - követhető.)
A leírt parancsokkal, üzenetekkel nem kívánom helyettesíteni a gépkönyvet - a leírás egyébként sem teljes - de szeretném, ha e könyv önmagában elég volna az elinduláshoz a kisszámítógépek, ill. a számítástechnika szinte végtelen birodalmában.
Nap mint nap hallhatunk a számítógépek csodáiról, amelyeken az átlagos képzettségű halandó aligha tud eligazodni. Ezért próbáltam az elkerülhetetlenül szükséges meghatározásokat, gondolatmeneteket "hétköznapi" nyelven megfogalmazni, amely igen eltérő a számítástechnika szaknyelvétől. De ne felejtsük el: ez a könyv nem számítástechnika! A gép ui. - bizonyos szintig - ilyen "szakszerűtlen" módon is használható, irányítható, programozható. Ezt bizonyította számomra kisfiam is, akitől a programok készítése során számos remek észrevételt és ötletet kaptam.
Remélem könyvemmel valóban segítséget tudok nyújtani a kitűnő játékban, a gép megismerésében.

Sági Gyula

1. A számítógép és a csatlakoztatható eszközök
Bár a könyv címében egyetlen típusmegjelölés szerepel, a leírtak nem egyetlen számítógéptípusra vonatkoznak. A legkisebb teljesítménykategóriába - adattároló képesség, memória - tartozik két fő típus:

a ZX81 és
a TIMEX (vagy T/S 1000).

A ZX81 egyike az Európában legjobban elterjedt gépeknek, hazánkban is közismert, népszerű. Mindebben a legnagyobb része annak van, hogy ez a legolcsóbb gép.
A TIMEX 1000 a tengerentúlon Kanadában a legelterjedtebb. Európai gyártója Franciaország, ezért ott gyakori. Sokszor meglepően alacsony áron kerül a kereskedelembe, ezért egyre közismertebb a hozzánk közeli nyugati országokban is. Az ára különösen azért mondható előnyösnek, mert a két gépet összehasonlítva a TIMEX 2 K-s memóriája - szemben a ZX81 1 K-jával - sokkal használhatóbbá teszi a gépet. (Másik különbség, hogy a TIMEX kétféle tv-csatornára csatlakoztatható, ez azonban alig kihasználható előny.)
A különbségeknél még fontosabb azonban a két típus egyértelmű rokonsága. Ez teszi lehetővé, hogy a két típust szinte egyként tárgyaljuk. Az említett különbségeken kívül zavaró lehet az 1.1. ábrán látható megjelenésbeli különbség.

A készülékek nyomólapja tehát megegyezik, kivétel két mező:

  • a NEW LINE, ill. ENTER
  • és A RUBOUT, ill. DELETE.

Ezt a különbséget azért hangsúlyozzuk, mert az állandó műszaki fejlesztés következtében sok ZX81 került forgalomba a TIMEX-éhez hasonló nyomólappal! Az azonos helyen levő mezők használata és hatása teljesen azonos! A TIMEX változat mezőinek elnevezései tekinthetők korszerűbbnek, mivel a Sinclair cég újabb géptípusán - a Spectrumon - is ezeket találjuk. A programok leírásakor általában említjük mindkét jelölést, pl. NEW LINE (ENTER) vagy RUBOUT (DELETE), de ez minden esetben természetesen csak egy-egy mezőt jelent.
Fontos, hogy tudjuk: a ZX81 típusjelű változatokhoz, ill. a TIMEX 1000-hez minden tartozék egyformán csatlakoztatható. Egészen kivételesen előfordulhat az, hogy a tápegység csatlakozója más méret, de ennek egyszerű cseréjével ez az eszköz is csereszabatossá tehető.

A tápegység
A gép legfontosabb tartozékának tekinthetjük, mert nélküle a gép nem működik. A géphez és a hálózathoz való csatlakoztatása után azonban a gép már tökéletesen működik, tv sem kell hozzá - igaz, hogy így semmit sem látunk.
A tápegység feszültsége 9 V. Valamilyen hiba vagy az esetleges barkácskivitel miatt ez csökkenhet. A feszültség kismértékű csökkenését abból vehetjük észre, hogy a képernyőn enyhe, vízhullámzásszerű jelenségeket tapasztalhatunk. (Egyébként ezt más is okozhatja.)
Használat közben a tápegység - és a gép - jól érzékelhetően melegszik. Ez a melegedés - ha kézzel tapintva még nem kellemetlen - nem hiba, hanem a Sinclair típusok nem dicsérhető sajátsága. Hihetünk azonban a gyártó cégnek; ez nem okoz hibás működést. Mindenesetre lehetőleg úgy helyezzük el a tápegységet, hogy a természetes hűlése biztosítva legyen.
A géppel együtt vásárolható tápegységgel az alaptípus és az esetleg csatlakoztatott memóriabővítő kifogástalanul működtethető. Ez a tápegység akkor válhat alkalmatlanná, ha gépünkhöz nyomtatót akarunk használni. A nyomtató megindításakor - vagy esetleg néhány másodperc után - a kép eltűnik, és a gépbe írt program összeomlik. A Sinclair típusú nyomtatót csak akkor használhatjuk gépünkhöz, ha a tápegység 9 V feszültségen legalább 1,2 A áram leadására képes. Ilyen tápegység nemcsak gyárilag készíthető, de a legkézenfekvőbb, ha a Spectrum tápegységét használjuk nyomtatónkhoz. Nem Sinclair típusú nyomtató esetében a szükséges teljesítmény más lehet, erről a nyomtató gépkönyve tájékoztat.
A TIMEX és a ZX81 tápegység csatlakozója eltér egymástól.


1.1 ábra: A két géptípus közötti eltérések
a. ZX81; b. TIMEX 1000

A TV-készülék
Kis számítógépünk működésének láthatóvá tételére minden olyan tv-készülék alkalmas, amellyel a Magyar Televízió második műsora vehető. (A TIMEX-hez elég az első adás vételképessége.) Számítógépünk csak fekete-fehér adásnak megfelelő jeleket bocsát ki, tehát színes tv-n is csak fekete-fehér képet kapunk. A készülékek csatlakozómérete már igen változatos lehet; minden esetben ehhez vagyunk kénytelenek alkalmazkodni. Ha a tv-csatorna beállítóját, majd finombeállítóját a 36. csatorna tájékán mozgatjuk (TIMEX-nél az 5. csatornánál), előbb-utóbb alaktalan szinkronjeleket látunk, majd eljutunk egy olyan beállításhoz, hogy a kép stabilizálódik, és a bal alsó sarokban megjelenik a fekete hátterű, inverz K betű - a K kurzor. Ezzel gépünk használatra kész. Érdekes, hogy eddig általában úgy is eljuthatunk, ha gépünk tv-zsinórját nem csatlakoztatjuk fémesen a tv-készülékhez, csak az antennabemenet közelébe visszük vagy a bent levő antennahuzalhoz fogjuk. Az így kapott kép persze igen gyenge minőségű lesz, de tapasztalhatjuk a számítógép "életjelenségeit" úgy is, ha nincs megfelelő méretű csatlakozódugónk.
A számítógép hosszabb használata során hamar tapasztaljuk, hogy a képernyő figyelése ugyancsak fárasztja a szemet. A hatás csökkentése érdekében legcélszerűbb a tv-t a leglágyabb kontraszt mellett erősen csökkentett fényerővel használni. Műszaki szempontból mindegy, hogy kis- vagy nagyképernyős készüléket használunk. A kisebb képernyős tv (pl. Junoszty) azért előnyösebb, mert a készülék munkahelyünkhöz (a számítógéphez) közelebb helyezhető el, így szemünknek nem lesz fárasztó a messzebb lévő, nagyobb képernyő nagyobb távolságához való gyakori alkalmazkodás.
A tv-készülék egyébként a számítógép működését nem befolyásolja. Bármilyen műveletet elvégezhetünk rajta a tv bekapcsolása nélkül. Valószínűbb azonban, hogy hibázunk, mivel nincs ellenőrzési lehetőség (próbáljuk meg!). A kép hullámzásának egyik lehetséges okáról már a tápegységnél írtunk. Ezenkívül gyakori hibaok lehet valamelyik távoli tv-adó hatása vagy a hibásan beállított tv-készülék. Ezeken a hibákon nem egyszerű javítani.

A nyomtató
A nyomtató (printer, drucker) arra szolgál, hogy

A kereskedelmi forgalomban nagyon sokféle nyomtató kapható, amelyek műszaki jellemzők és ár tekintetében igen eltérők. Az olvasó már nyilván tapasztalta, hogy a számítástechnikai eszközök árára döntő hatással van a beszerzés helye. Hatalmas árkülönbségek tapasztalhatók. Ettől függetlenül megállapítható, hogy a nyomtatók közül a legolcsóbb a Sinclair cég által kifejlesztett típus.
Ez a nyomtató különleges, fémesen vezető papírral működik. A papíron a tv-képernyő működési elvéhez hasonlóan keletkezik feketedés. Ez a nyomtató legérdekesebb tulajdonsága, és legnagyobb hátránya is. A különleges papír ugyanis drágább a hagyományosnál. "Amator" célokra azonban ez a rendszer tökéletesen megfelel, mivel ára hazánkban is egyre csökken. A könyvben található programlisták, ill. képernyőképek Sinclair nyomtatóval készültek. A Sinclair típusú nyomtató közvetlenül (ún. interface nélkül) csatlakoztatható a ZX81-hez, a TIMEX-hez és a Spectrumhoz. A nyomtató a memóriabővítők használatát nem befolyásolja. Ez a típus (egyes készülékkel szemben) nem igényel külön áramforrást. Áramellátásáról a számítógép tápegysége (l. ott) gondoskodik.

Fényképezés
A nyomtató költségét sokan szívesen megtakarítják, azonban a számítógépbe írt programokat, ill. a gép termékeit mégis célszerű könnyen áttekinthető formában is rögzíteni, tárolni. A felvételekhez használjunk a közepesnél nagyobb érzékenységű filmet (pl. FORTEPAN 200). A tv-n állítsuk be a legnagyobb kontrasztot és a legnagyobb fényt. Ekkor 1/30 másodpercet exponálhatunk 4-es blendével. Ezek az értékek természetesen tájékoztató jellegűek: ha van fénymérőnk, pontosabban exponálhatunk. Megtehetjük, hogy a filmet kissé alulexponáljuk, de túlhívjuk. Így a film "keményebb" lesz, ami inkább előny, mint hátrány. A negatívról a szokásos módon készíthetünk papírképeket.
Egyszerű expozíciós kísérletsorozattal meghatározhatjuk a legkedvezőbb beállításokat.

A magnetofon
A gépben levő program magnetofonnal rögzíthető. Ez remek dolog, de mégis ezzel van a legtöbb bosszúságuk a gépek használóinak. Néhány gyakorlati tanács betartásával a bizonytalanságot alaposan lecsökkenthetjük.
A felvételek készítéséhez elvileg minden orsós vagy kazettás, mono- vagy sztereo magnetofon alkalmas. A tapasztalat azt mutatja, hogy a legalkalmasabbak az egyszerű, jó műszaki állapotban levő mono készülékek. Konkrétabb általános szabály aligha mondható. A sikertelen felvételeknek sokszor éppen nem a technikai berendezések az okai, hanem az, hogy a felvételhez szükséges műveletek közül valamelyiket elvétjük, elfelejtjük, és mindezt nem vesszük észre. Törekedjünk tehát arra, hogy a számítógép-magnó kapcsolatot stabillá, üzembiztossá tegyük. Ennek érdekében vizsgáljuk meg először is a magnó csatlakozórendszerét.
A számítógéppel együtt kapott jack-dugókkal szerelt zsinórpár arra szolgál, hogy a számítógép EAR kimenetét a magnó hangszórókimenetéhez, a MIC kimenetet pedig a magnó mikrofonbemenetéhez csatlakoztassuk. Az első nehézség rögtön kiderül, ha a magnó csatlakozói más rendszerűek. Ez a különbség azonban viszonylag könnyen, csatlakozócserével vagy közbetétdarabbal megszüntethető.
"Sunyibb" a hiba, ha a csatlakozók mérete megfelelő, de mindkét csatlakozót a gépben tartva a felvételek nem sikerülnek, vagy a siker csak esetleges. (Ezt a jelenséget a gépkönyv is említi.) Ilyenkor a felvétel-lejátszás megvalósítható, ha az egyik dugót kihúzzuk a magnóból. E művelet alapvető fontosságú, de a legnagyobb felvételi bizonytalanságot okozza, mert könnyen elfelejthető. Természetesen vannak olyan magnetofontípusok is, amelyekkel remek felvételek és visszatöltések valósíthatók meg a csatlakozók egyidejű benntartásával is.
Az a csatlakozórendszer tekinthető a legalkalmasabbnak, amelynek vagy csak a középérintkezői, vagy csak a külső köpeny(hüvely-) érintkezői vannak egymással közvetlen, fémes kapcsolatban. Magnetofonunk csatlakozóit viszonylag egyszerűen átköthetjük. Válasszuk pl. a hangszórókimenetnél és a mikrofonbemenetnél is testpontként a külső, hüvelyes részt.

Az 1.2. és az 1.3. ábrán láthatjuk az MK 29 (JUNO) típusú, BRG gyártmányú magnetofon átalakítását. Az átalakítás kiegészítő-csatlakozókkal is elvégezhető - nem szüntetve meg ezzel az eredeti csatlakozási lehetőségeket. (Mivel a huzalok színjelzése - gyártási okok miatt - eltérő lehet, az eredeti kapcsolási rajznak megfelelő bekötést is közöljük.) Azért érdemes ezzel a típussal kiemelten is foglalkozni, mivel ez a hazánkban jelenleg általánosan megvásárolható, viszonylag olcsó (gyakori árleszállítások!) és a kisszámítógéphez remekül alkalmazható típus.

A felvétel-visszatöltés másik jelentős hibaforrása a nem megfelelő hangerő beállítás. Sokan úgy készítik a felvételeket, hogy beállítják a (kézi szabályozásnál) hangerő-szabályozó potenciométert valamilyen állásba, majd a visszatöltést valamilyen más hangerő-beállítással végzik. A módszer hibája a feledékenység veszélye: felvételkor megfeledkezünk a megfelelő beállításról. Célszerű tehát olyan beállítást találni, amely éppen megfelelő a felvételhez és a visszatöltéshez. Kísérletsorozatot kell tehát végeznünk. Készítsünk egy felvételt, majd próbáljuk ugyanazzal a hangerővel visszatölteni, méghozzá többször egymás után. Ha találtunk olyan beállítást, amely "oda-vissza" jó, akkor használjuk mindig azt. (Például az MK 29 típusnál ez a beállítás a 8-as mező felső részénél van. A hangszínszabályozót tartsuk közepes állásban.)
A felvételeknél lehetőleg soha ne használjuk az automatikus felvételszint-szabályozást. Ha a magnóban van valamilyen kivezérlésjelző, akkor úgy állíthatjuk be a helyes kivezérlést, ha a normál (pl. komolyzenei) felvételekhez a szükségesnél jóval nagyobb kivezérlést engedünk meg. (Ez a durva szabály elsősorban akkor érvényes, ha magnónk zajszintje nem abnormálisan magas. Az utóbbi esetben ugyanis hosszasabb kísérletezésre van szükség a megfelelő hangerő megtalálásához.) A helyes kivezérlés beállítását segítheti az 1.4. ábrán látható kapcsolás. A 4 db R1 ellenállás értékét kísérletileg állapítsuk meg: kb. 700 ohm körüliek. (A 3 db R2 értéke kb. 2,2 kohm. A T jelű tranzisztorok BC237 típusúak lehetnek.) Hasonló kivézérlésjelző van az MK 29 magnóban is. A kivezérlés nagyságának becslésére egy átlagos kivitelű zsebrádiót is felhasználhatunk: két adó közé állítva a keresőjét, a számítógép közelébe (vagy tetejére) helyezve félreérthetetlen hangokat ad.

Igen nagy mértékben fokozza a magnó használhatóságát, ha beépített számlálója van. Enélkül ui. igen nehéz megtalálni a felvételek kezdetét. Néhány lehetőséget az előtétprogramoknál említünk. Tudnunk kell, hogy sok magnótípusnál a kazetta (szalag) lejátszása során az idő-számlálófordulat arány nem marad állandó. (Tehát a kazetta elején egy számlálófordulathoz más időtartam tartozik, mint a szalag közepén.)

A magnószalagot (azaz a kazetta tartalmát) szívesen szidja az ember, ha a felvétel-visszatöltés nem sikerül. Az igazság azonban az, hogy csak az esetek igen kis hányadában hibás a szalag a kudarcért. Elvileg bármilyen szalag alkalmas jó felvételek készítésére. Természetesen alapkövetelmény, hogy a magnó alkalmas legyen az adott kazetta (szalag) lejátszására. A szinte minden kazettánál automatikusan teljesülő követelmények a következőkben foglalhatók össze:

  • legyen a szalag kis zajú;
  • legyen az anyag legalább annyira jó minőségű, hogy a használat során még mikroszkopikus méretű leválások se keletkezzenek rajta (az ilyen leválások tönkretehetik az egyébként jelfelvételt, pedig ezeket még komolyzenei felvételeknél sem vehetjük észre;
  • legyen a kazetta játékideje minél rövidebb.

Így kevesebb keresgélés után, hamarabb találhatjuk meg a keresett felvételt (gyakran kaphatók pl. a Sertex Sx40 típusú 2*20 perces játékidejű kazetták).
Érdemes programfelvételeinket - bár igen ronda hangjuk van - néha hangszórón keresztül meghallgatni. Így megfigyelhetjük, nincs-e a magnónknak túl nagy alapzaja, nem nyomja-e el - pl. rossz csatlakozás miatt - a számítógép "hangját" valamilyen búgó hang, nem "hullámzik-e" a felvétel hangja Az utóbbi esetben sokszor a szalag anyaghibájára gyanakszunk, pedig az ok lehet egészen más is.
Vegyünk elő egy kazettát és vizsgáljuk meg! A kazetta szalagoldali, középső részén a szalag alatt kis filctömb van, amelyet egy (általában) rézlemezke tart, ill. nyom rugalmasan a szalag hátsó oldalához. Ez a kis szerkezet arra szolgál, hogy a szalag mindig hézagmentesen simuljon a kombinált felvevő-lejátszó fejhez. Vannak olyan magnók, amelyek meglehetősen érzékenyek arra, hogy a kis filctömb eléggé nyomja a szalagot. (Ilyen pl. az MK 29 is.) A megfelelő beállítást könnyen elélhetjük, ha. valamilyen hegyes eszközzel a rézlemezke mögé nyúlunk, és kicsit kifelé hajlítjuk. Természetesen nem szabad annyira elhajlítani, hogy a szalag a filctömb felett jól észrevehetően felpúposodjon.


1.2 ábra: Az MK 29 magnetofon eredeti kapcsolásának részlete.
a - mikrofonbemenet, b - hangszóró kimenet

 

1.3 ábra: kapcsolási rajz a módosítás után
a - a számítógép MIC hüvelyéhez csatlakozó bemenet (3,5)
b - a számítógép EAR hüvelyéhez csatlakozó kimenet (3,5) és monitorozási lehetőség (2,5)


1.4. ábra: Egy lehetséges kivezérlésjelző elvi kapcsolása

A felvételkészítés úgy lehetséges, hogy a számítógép és a magnetofon közötti hibátlan kapcsolat kialakítása, után a számítógépbe a

SAVE "valamilyen cím"

parancsot írjunk, és megnyomjuk a NEW LINE-t (ENTER-t). Ezzel egyidejűleg haladéktalanul el kell indítanunk a magnetofont természetesen felvétel állásban. Ha késlekedünk, esetleg lemaradunk a felvétel elejéről, és munkánk sikertelen lesz. (Ugyanezt a hatást tapasztaljuk, ha a felvétel eleje a bekötőszalagra, kerül...)
Kevésbé kapkodós módszer, ha a

SAVE "valamilyen cím"

után előbb, indítjuk a magnót (felvétel állásban), és csak azután következik a NEW LINE (ENTER). E módszer hátránya, hogy a felvételek között több lesz a zörej, amely a keresés-visszatöltés alkalmával zavarokat okozhat.
A felvételek visszatöltése legegyszerűbben a

LOAD ""

Beírásával - majd természetesen NEWLINE (ENTER) - kezdhető el. A magnó elindítása után a gépbe töltődik az első felvétel, amelynek a gép a legelejét megtalálja. Az eljárás igen egyszerű, de sokszor sikertelen. A NEW LINE (ENTER) megnyomása után megjelennek a változatos minták, csíkok a képernyőn, de egyszercsak el is tűnek - és még az a szerencsésebb eset, ha a bal sarokban ismét megjelenik a kurzor. Gyakori ui., hogy visszatöltési akciót csak a hálózati csatlakozó kihúzásával tudjuk befejezni. A dolog kimenetele esetleges: a visszatöltést megismételve gyakran sikerrel járunk. Kísérleteket végezve megfigyelhetjük, hogy a csíkok és a kurzor "elvesztésének" legtöbbször az az oka, hogy a gép számára túl erős és "nem oda való" jel érkezik a magnóból. Ez lehet valamelyik felvétel közbenső része, de a LOAD ""-ra a légveszélyesebbek a felvételközi szünetekben levő zajok, amelyek a felvételi előkészületek során keletkeznek. Ilyen "zajok" közé kell sorolnunk a beszédhangot is, amely az egyes felvételek előtt azonosításképpen bekonferálja a következő programot. (Saját mikrofonnal a számítógépdugó kihúzása után készíthető ilyen beszédfelvétel).
A visszatöltési kísérletek sikerének valószínűségét erősen növelhetjük azzal, hogy nem az előbbi paranccsal töltünk vissza, hanem

LOAD "megfelelő cím"

és NEW LINE (ENTER) módszert alkalmazzuk. Megfigyelhetjük, hogy így a gép - általában - baj nélkül áthalad a nem megfelelő felvételeken és felvételközi szüneteken, és a beírt címmel azonosított felvétel töltődik vissza. Érdemes tehát pontos nyilvántartást vezetni a felvételeink címéről. Természetesen a

LOAD ""

is használható, de kockázatosabb.
A leírt jelenségekkel járó sikertelenségekre számíthatunk akkor is, ha pl. 64 K-s memóriabővítővel magnóra vett, de egyébként 1 K memóriaigényű felvételt kívánunk a gépbe visszatölteni a memóriabovítő nélkül (tehát az alapgéppel).

Memóriabővítők
Bár a ZX81 (vagy a TIMEX 1000) alapgépekkel is remek dolgokat tudunk csinálni, kétségtelen, hogy a gépek használhatóságát igen nagy mértékben fokozza a memóriabővítő egység.
Ilyen kiegészítő - eltérő műszaki paraméterekkel és eltérő kivitelben - sokféle létezik. Az alapgép memóriáját 8 ... 64 K-ra bővítik, létezik eredeti Sinclair, de szinte minden nyugati országban van saját gyártmány, és léteznek hazai kisiparosok által előállított egységek is. Az árak - mint a többi eszköznél - igen eltérők. A ZX81-hez és a TIMEX-hez azonos típusok alkalmasak. Más géptípusokhoz készült memóriabővítőkkel ne kísérletezzünk! A régebbi ZX80-hoz készült 8 K-s tárolók is csak esetlegesen alkalmasak. Megpróbálhatjuk ezt a típust: a kísérlettel nem okozhatunk kárt. A ZX80 3 K-s bővítője nem alkalmas az említett típusokhoz.
Ha a rendelkezésünkre álló memóriabővítő valóságos képességében nem vagyunk bizonyosak, a DIM utasítással (l. ott) a kiegészítőtároló memóriájával arányos helyet foglalhatunk le, és tájékozódhatunk annak kapacitásáról.
Ha a nyomtatót és memóriabővítőt egyszerre kívánunk a géphez csatlakoztatni, akkor a kiviteltől függően vagy a nyomtató, vagy a bővítő csatlakozója kerül előbb a gépbe. Általában a nyomtatót kell előbb a géphez csatlakoztatni, a nyomtató csatlakozójába kerül a memóriabővítő. A gyengébb kivitelű bővítők sajnos gyakran rosszul érintkeznek a gép érintkezősorával. Átmenetileg megteszi a befőttesgumi is, de végleges megoldásra csak a bővítő szétszerelése és mechanikai megerősítése vezet. Bosszantó, de természetes jelenség, hogy a memóriabővítő csatlakoztatásával a gép egyes működései lelassulnak. (Ne csodálkozzunk tehát pl. azon, ha a program futását BREAK-kel megállítva, majd a NEW LINE-t (ENTER-t) megnyomva szinte semmi sem történik; a képernyőn láthatók igen lassan "épülnek le", és egy perc is eltelhet, mire megjelenik a programlista a képernyőn.)
A memóriabővítők nem igénylik a tápegység teljesítményének növelését.

2. A számítógép kezelése
Ha gépünket csatlakoztattuk a televízióhoz és a tápegységhez, ill. bekapcsoltuk, a képernyő bal alsó sarkában megjelenik egy fekete hátterű K betű. Ez a kurzor.
Kurzor azonban többféle van. Tartsuk nyomva a bal alsó sarokban levő (pirossal jelzett SHIFT) mezőt és nyomjuk meg a 9-es mezőt (pirossal: GRAPHICS)! A K betű átváltozik G-re. Ha ujjunkat a SHIFT-en tartva ismét megnyomjuk a 9-est, a G visszaváltozik K-ra. A G betű a GRAPHICS üzemmódot jelölte. Ha a képernyőn a G kurzor látható, akkor a nyomólapon látható jelek fekete háttérrel (inverzként) jelennek meg a képernyőn.
Ujjunkat a SHIFT-en tartva nyomjuk meg a NEW LINE-t (ENTER-t)! A K betű F-re változik. Ez a rövidítése a NEW LINE (ENTER) mezőbe pirossal írt FUNCTION-nak. Ujjunkat a SHIFT-en tartva, ismét megnyomva ezt a mezőt, az F ismét K-ra változik.

A kurzorok szerepe tehát egyszerű, használatuk azonban csak gyakorlással sajátítható el. Szerepüket megtanulni is csak így érdemes. A kurzor megjelenése után - teljesen érthető módon - az Olvasó végre valamilyen sikerélményre vágyik, és azonnal megnyomja az egyik mezőt - legalább történjen valami. Ha azonban még nem ismeri a gépet, ez aligha jelent örömet, mert a megjelenő szám vagy szó a képernyőn marad, és úgy tűnik, nincs tovább. Máris kiderült tehát, hogy talán a legfontosabb művelet a törlés. Ennek legalaposabb módja a tápegység csatlakozójának kihúzása a gépből vagy a konnektorból. Ezzel mindent törlünk, ami a képernyőn vagy a gépben volt. A csatlakozódugót visszahelyezve, a gép alapállapotba kerül; teljesen üres, és az üres képernyőn csak a K kurzor látható.
Mindent törölni azonban csak ritkán akarunk. Általában már a beírás közben észrevesszük, hogy hibát vétettünk, és csak néhány jelet vagy szót akarunk törölni. A képernyő legalsó sorában tehát olyan jelek vannak, amelyeket le akarunk törölni. Tartsuk ujjunkat a SHIFT-en és nyomjuk meg a 0-t (a nullát, ne az O betűt!). A kurzor letörli a tőle balra álló jeleket, ill. utasítást (azaz kulcsszót vagy parancsszót).
A "bármi" beírása és letörlése azt is megmutatja, hogy van egy negyedik kurzor is, a fekete hátterű L. Ez a K-ból változik át akkor rögtön, ha a K-val valamilyen kulcsszót írtunk be. Míg a K-val csak számot vagy kulcsszót írhatunk be, az L-lel szinte bármit, csak kulcsszót nem. Az átváltozásokat jól megfigyelhetjük, ha törlés után pl. ezt írjuk a képernyő alsó sorába:

10 PRINT 123

A dolog egyszerű: a K kurzor jelenlétében írjunk be egy 1-est, majd egy 0-t és ezután nyomjuk meg a P betű mezőjét. Előugrik a PRINT szó és tőle jobbra az L kurzor. A számjegyeket egymás után beírhatjuk. Próbáljuk most a SHIFT és a nulla segítségével letörölni az eddigieket! Jobbról balra haladva eltűnnek a számjegyek, majd hirtelen eltűnik a PRINT szó és nyomában megjelenik a K kurzor - amely már nem változik a 10 letörlése után sem. Bármit beírhatunk a G vagy az F kurzorral, a törlési művelet ugyanez.
Írjuk most a gépbe:

PRINT 1

Nyomjuk most meg a NEW LINE-t (ENTER-t)! A képernyő bal felső sarkában azonnal megjelenik egy 1-es. Mi történt? Emberi nyelvre fordítva a gépnek ezt a parancsot adtuk: "Írj a képernyő első üres helyére egy 1-est!" A gép a parancsot vonakodás nélkül végrehajtotta. Írjuk a gépbe:

10 PRINT 1

A tapasztalatok alapján talán azt várjuk, hogy a NEW LINE (ENTER) megnyomása után megjelenik az 1-es. Próbáljuk meg! A képernyő legfelső sorában változatlanul az jelenik meg, amit az előbb beírtunk. Mi ez? Bármilyen hihetetlen is, de ez egy program! Nagyon egyszerű, de van egy nagy előnye: működik! - ha működtetjük, azaz futtatjuk. Az angolul tudók gyaníthatják, hogy ez a RUN-nal lehetséges. Ha a K kurzort látjuk, nyomjuk meg az R betűt, azaz RUN majd NEW LINE (ENTER).
A képernyőről eltűnik, amit eddig láttunk, és megjelenik az 1-es. A gép végrehajtotta a PRINT utasítást. Hová lett a program? A gépben van, ha megnyomjuk a NEW LINE-t (ENTER-t), ismét megjelenik.
Írjuk most be ezt:

10 PRINT 123

Utána természetesen NEW LINE (ENTER).
Az előbbi szerény programsorunkat a legutoljára beírt sor váltja fel. Ez a törlés másik, gyakran alkalmazott módja - nevezhetjük felülírásnak is. Ha azonos sorszámmal írunk be egy programsort, akkor az utóbbi felváltja az előbbit úgy, hogy az előzőnek emléke (nyoma) sem marad a gépben. (Ha legújabb programocskánkat a leírt módon futtatjuk, a képernyőn 123 fog megjelenni.) Ha az eddigi programrészt megtartva ezt írjuk a gépbe:

20 PRINT 5

a NEW LINE (ENTER) megnyomása után a képernyő felső két sorában láthatjuk az eddig beírtakat. (A program bonyolódik.) Ha a már leírt módon futtatjuk a programot, a programsorok eltűnnek a képernyőről, és az első sorban 123, a másodikban 5 jelenik meg.
Ha - mondjuk - a második sorba mást akarunk írni, az előbbiek szerint 20-as sorszámú új sorral felülírhatjuk a

20 PRINT 5 -öt.

Különösen bonyolultabb programsoroknál ez a felülírásos módszer hosszadalmas. Jobban járunk, ha a képernyő felső részén a programban levő sort "kivesszük", azaz a képernyő alsó részébe juttatjuk- Ezt úgy tehetjük meg, ha ujjunkat a SHIFT-en tartva, megnyomjuk az EDIT-et (az 1-est). A 20-as sor változatlan formában megjelenik a képernyő alján. Figyeljük meg, hogy a SHIFT-EDIT előtt a 20-as programsorban a nulla és a P betű között egy fekete hátterű > jel látható. Ez a sorjelző mutatja az aktuális sort; a SHIFT-EDIT-tel az a sor vehető ki, amelyben ez a jel van.
A sor tehát megjelent a képernyő alján és a nulla és a P betű között a jól ismert K kurzor látható. Ha a RUBOUT (DELETE)-tel - azaz a SHIFT-nullával - elkezdenénk a törlést, eltűnne a kurzortál balra álló nulla, majd a 2-es. De mi a PRINT után álló 5-öst szeretnénk kijavítani, el kell tehát juttatnunk a kurzort jobbra, a sor végére. Ezt úgy tehetjük meg, ha ujjunkat a SHIFT-en tartva, a piros jobbra mutató nyilat (8-as mező) többször megnyomjuk. (Figyeljük eközben a kurzor betűjelének változását is!) Ha a törölni kívánt jel már a kurzortól balra van, megkezdhetjük - a már leírt módon - a RUBOUT (DELETE) mezővel a törlést. Ha a sort kedvünkre alakítottuk, a NEW LTNE (ENTER) megnyomásával visszaküldhetjük a képernyő felső részébe. Megfigyelhettük, a képernyő felső részén levő sor a javítási, műveletek során változatlan maradt, a kijavított sort visszaküldve azonban felülíródott.Gyakran előfordul az is, hogy a programsarok közül kivett sort rosszul javítottuk ki, vagy nem is azt a sort akartuk kivenni. Hová tegyük? Ha a sorban nincs hiba, egyszerűen visszaküldhetjük: NEW LINE (ENTER). Ha rosszra javítottuk ki, nem érdemes javítgatni, hanem SHIFT-EDIT módszerrel kivehetjük a már meglevő programsorok közül azt, amelyikben a > sorjelző van. Ekkor a képernyő alján levő sor íródik felül. Ha végül kialakult a hibátlan sor, ezt a szokott módon visszaküldhetjük a programsorok listájába. Ne felejtsük az eddigieket kipróbálni!

Természetesen nem mindig azt a programsort akarjuk kivenni javítani, amelyben a > sorjelző éppen van. A sorjelzőt a SHTFT és fel-, ill. lefelé mutató nyilakkal (6 ill. 7 mező) mozgathatjuk a programsorok között. Mivel bőven lesz még dolgunk sokkal rosszabb programokkal is, érdemes megjegyezni a következő módszert: bármelyik sort kivehetjük úgy is, hogy a K kurzorral az üres legalsó sorba egy olyan sorszámot írunk, amely a kívánt sorénál nagyobb, de kisebb mint a felette levő sorszám, majd NEW LINE (ENTER). Ez után a > sorjelző nem látható (mondjuk a sorok között van), de a SHIFT-EDIT együttes megnyomására a beütött szám utáni sorszámú sor jelenik meg a képernyő alján. (Kevés gyakorlás után mindez világossá válik.)

Mit tegyünk, ha valamelyik sorra nincs többé szükség - azaz példánkban nem akarjuk, hogy a gép kiírja a 123-at? Írjuk be a K Kurzorral a feleses sor számát (példánkban 10), majd NEW LINE (ENTER). A sor megszűnt.
Az eddig leírtak olyan programszerkesztési fogások, amelyekre gyakran szükségünk lehet, ismeretük elengedhetetlen a programok beírásakor. Mint mindent a komputerrel kapcsolatban, ezt is csak gyakorlással sajátíthatjuk el.

2.1 Parancsok és utasítások
E két fogalmat nagyjából úgy különböztethetjük meg egymástól, hogy a parancsokat és a hozzájuk tartozó információkat sorszám nélkül írjuk a gépbe, és a NEW LINE (ENTER) megnyomásával azonnal, közvetlenül végrehajtatjuk a géppel. Az utasítások a programlista részét képezik, sorszámuk van, és a program futása közben kerülnek végrehajtásra. A megkülönböztetés nem lehet teljesen precíz, mert a parancsok is szerepelhetnek sorszámmal a program belsejében, és így utasításként viselkedek.
A gépre pillantva láthatjuk, hogy azokról a szavakról lesz szó, amelyek a betűmezők között láthatók. A szavak legtöbbje a szabványosított BASIC nyelb kifejezései között is szerepel. Kétségtelen, hogy kis gépünk a BASIC programnyelv segítségével működtethető, mégis hatalmas csalódásban lehet része annak, aki BASIC nyelvű, de nem ZX81-en íródott programlistát akar a gépbe írni, majd a programot futtatni akarja. Igen ritka esetektől eltekintve az általános BASIC nyelvem irt program változatlan formában nem alkalmazható gépünkre. A számítógép-konstruktőrök kényszerűségből, esetleg vélt vagy valóságos előnyöket keresve "nyelvjárásokat" alkalmaznak, így az egyik géptípus a másik programjait csak módosítások után érti meg. A géphez tartozó kezelési utasításban megtalálhatjuk a gép utasításait, ill. a működés során alkalmazható függvények leírását. Leírásunkkal nem kívánjuk a gépkönyv szerepét átvenni, ezért nem minden utasítást vizsgálunk. Felhívjuk viszont a figyelmet néhány BASIC nyelvű, de nem ZX81-re írt programban szereplő utasítás lehetséges átírási módjaira. Ezek megismerésével növekszik az Olvasó önállósága, hiszen más gépek programjait is átültetheti "kedvenc" nyelvére.

CLEAR
Az összes változót törli, azaz a változóknak (pl. LET utasítással) adott értékeket törli. (Törli ezenkívül a képernyőt is, ha parancsként adjuk.)
Ha a CLEAR után valamilyen változót, pl. ki akarunk - PRINT-tel - íratni, 2 típusú hibát kapunk.
Parancsként való használata után a programlista változatlan marad.

CLS
Letörli a képernyőt, de semmi mást. Használata nem okoz változást sem a programlistában, sem a változók értékében. Használata megszüntetheti pl. az 5 típusú hibát.

CONT
Parancsként való használatakor a GOTO-hoz hasonló hatása van Ha pl. egy futó programot a BREAK-kel megállítunk, a CONT és NEW LINE hatására a program a képernyő alján megjelenő üzenetben szereplő második számnak megfelelő programsornál folytatódik A működés megértéséhez írjunk egy olyan programot, amely számokat ír ki, pl.

1 PRINT 1
2 PRINT 2
3 PRINT 3
4 PRINT 4
5 PRINT 5
6 PRINT 6
7 PRINT 7
8 PRINT 8
9 PRINT 9
10 PRINT 10
20 GOTO 1

Amint a kiírt számok elérik a képernyő alját, a program 5/13 üzenettel leáll. Ebből az 5 jelzi, hogy nincs több hely a képernyőn, a 3 pedig, hogy az első végre nem hajtható utasítás a 3. sorban van. A CONT és NEW LINE hatására a képernyő törlődik és a képernyő tetején 3-mal folytatódik a számsor. A gép tehát a 3. programsorban szereplő utasítást hajtja végre.
A CONT tehát törli a képernyőt, de a gép csak olyan utasítást fog végrehajtani, amely egyébként végrehajtható.

COPY
Csak akkor hatásos, ha a géphez printer csatlakozik. Hatására a nyomtató másolatot készít a képernyőről.

DIM
Ezzel az utasítással (ill. paranccsal) a gép memóriájában helyet foglalhatunk le a DIM után álló betűvel jelzett változó (ill. változók) számára. A

DIM A$(10,5)

(és NEW LINE) parancs pl. egy olyan memóriaterületet foglal le, amelybe 10 db 5 betűhely (karakter) hosszúságú jelsorozat fér be. Ezeket a jeleket természetesen idézőjelek közé írva vihetjük csak be. Ha viszont az A$ változóra ezen a módon foglaltunk le helyet, akkor a gép "ragaszkodik" ahhoz, hogy értékadáskor (LET utasítás) meghatározzuk, melyikre gondolunk a lehetséges 10 db A$ változó közül. Pl. elfogad ilyen utasítást:

LET A$(6)="ZX81"

(és NEW LINE) de ha a zárójelben levő számot, ill. a zárójelet elhagyjuk, 3 típusú hibát jelez a gép.
Ha az előbbi A$-ra vonatkozó DIM utasítás után újabb DIM utasítást adunk az A$-ra, akkor ez törli az összes A$ értéket. Ez akkor is így van, ha a zárójelben ugyanazok a számok szerepelnek, mint az előbb.

FAST
Ez az utasítás (parancs) a gyors működésű üzemmódba kapcsolja a gépet. Az utasítás a működtetést valóban meggyorsítja, de a gép nem írja (ill. nem rajzolja) folyamatosan a képernyőre működésének eredményeit hanem csak a program végén, vagy az inputok (INPUT utasítások), vagy a PAUSE utasítások előtt. A programlista beírását (szerkesztését) is meggyorsíthatjuk, ha ezt az utasítást parancsként (SHIFT-tel, egyidejűleg F betű, majd NEW LINE) bevisszük. Hátránya, hogy ilyem üzemmódban a képernyő meglehetősen, nyugtalan. A hatást mindig közömbösíthetjük a SLOW utasítással (paranccsal).

FOR
Valamilyen ciklusban ismétlődő műveletsort vezet be. Vele alakítható ki a FOR - NEXT ciklus, amelyben FOR után álló változót a kifejezés további része számlálja. Például a

10 FOR I=1 TO 6

kifejezés egy olyan program sora, amelyben a 10. sort követő utasítások a NEXT I utasításig hatszor ismétlődnek. Az ismétlődő ciklus csak akkor jön létre (azaz csak akkor működik), ha, a FOR I ... utasítást valahol NEXT I követi. Esetünkben a ciklus tehát hatszor megismétlődik, majd a program a NEXT I utáni sorral folytatódik. A gép az I változót egyesével felfelé haladva számolja. Ezen változtathatunk a STEP (egyidejűleg SHIFT és E betű) kifejezéssel. A

10 FOR I=1 TO 6 STEP 2

sor az előzőekhez képest úgy módosítja a programot, hogy a következő műveletek csak háromszor ismétlődnek meg, mert a gép kettesével számolja I értékét. Más szóval a lépés értéke 2. Ha a STEP után pl. felet írunk akár tizedes törtben, akár valódi törtben -, a művelet tizenegyszer ismétlődik meg; a gép "felesével" számolja I értékét, Negatív számot írva a STEP után, a gép "visszafelé" számol - persze ekkor a TO előtti és utáni tól-ig értékeket fel kell cserélni.
A FOR - NEXT ciklus viselkedését feltétlenül kísérletekkel érdemes megtanulni: a definíciók ebben az esetben is túl bonyolultnak bizonyulnak. Ha a gép a programban olyan NEXT utasítást talál, amely után szereplő változót nem határoztak meg FOR-ral, 1 vagy 2 típusú hibát jelez. Ciklusok működhetnek egymás belsejében, de nem keresztezhetik egymást. (Jó példa erre az óraprogram.)

GOSUB
A GOTO-hoz hasonlóan a programot az utána álló számmal megjelölt sorhoz küldi. Minden esetben hozzátartozik a RETURN utasítás, amelynek hatására a gép a GOSUB- utáni első programsorra tér viasza. Tipikus felhasználási területe, hogy segítségével apró programokat fűzhetünk össze. A GOSUB szót kiszámítandó kifejezés, ill. törtszám is követheti. A program az így kialakult értékkel megegyező, vagy - ha ilyen sorszám nincs - közvetlenül az arra következő programsorra ugratva folytatja a futást.

GOTO
A GOSUB-hoz hasonlóan az utána írt számnak (kifejezés értékének) megfelelő sorra ugratja a programot. Nem kell más utasításhoz kapcsolódnia (mint pl. a GOSUB-nak a RETURN-höz).

IF
Mindig a THEN-nel együtt fordul elő. Működését úgy értelmezhetjük, hogy ha az IF után kijelölt feltétel teljesül, akkor a gép végrehajtja a THEN után álló utasítást. (A Sinclair programnyelvnek egyik jellegzetessége, hogy ha a feltétel teljesülése után azt akarjuk, hogy a program egy másik sorban folytatódjon akkor mindem esetben GOTO... vagy GOSUB... szükséges a THEN után. Más gépre írott BASIC nyelvekben megengedett, itt azonban nem, hogy a THEN-t közvetlenül egy sorszám kövesse.).
Az IF után álló feltételek az

= egyenlő (SHIFT és E),
<= kisebb vagy egyenlő (SHIFT és R),
>= nagyobb vagy egyenlő (SHIFT és Y),
<> nem egyenlő (SHIFT és T),
< kisebb (SHIFT és N),
> nagyobb (SHIFT és M),
NOT nem (tagadás), azaz valaminek az ellenkezője igaz (SHIFT + NEW LINE és N)

jelekkel állíthatók fel. Ezek többféleképpen láncolhatók, pl. zárójelekkel, ill. az

AND és; azaz a feltételek együttes teljesülése (SHIFT és 2),
OR vagy; azaz két feltétel közül az egyik teljesülése is elég ahhoz, hogy a gép végrehajtsa a THEN után álló utasítást (SHIFT és W).

Az egyszerűbben láncolt logikai kifejezések általában jól követhetők. Vannak azonban olyan esetek, amikor a gép - legalábbis első pillantásra - váratlan dolgokat művel. Próbáljuk meg

PRINT 5>8

és NEW LINE (ENTER). majd próbáljuk meg

PRINT 5<8

és NEW LINE (ENTER). Az első esetben nullát ír ki a gép, mert a két szám között kijelölt kapcsolat nem igaz, a második esetben 1-et kapunk, mert a kapcsolat igaz. A gépnek ezt a tulajdonságát igen változatosan használhatjuk ki pl. a programok gyorsítására. Egy "kézenfekvő" programrészlet:

40 IF X>Y THEN LET Y=Y+ 1
50 IF X<Y THEN LET Y=Y-1

Ugyanerre a feladatra szokatlanabb, de egyenértékű és gyorsabb utasítás:

40 LET Y=Y+(X>Y)-(X<Y)

A logikai összefüggésekből kiszámolt értékeket sok más módon felhasználhatjuk, de kezdőknek aligha érdemes ezzel kezdeni a programírást.

INPUT
Az INPUT utasításhoz érkezve a gép megáll, és a program csak akkor folytatódik, ha a megfelelő adatot begépeljük. (Ekkor mondjuk, hogy a gép inputra vár.) Ha számadatra van szükség, csak az L kurzor jelenik meg. Ha az adatot beírjuk (a megfelelő számok után mindig, NEW LINE, ill. ENTER), a program tovább fut. Ha a gép szó (string) típusú adatra vár, akkor az L kurzor idézőjelek között jelenik meg. Ebben az esetben természetesen beírhatunk bármilyen jelet, a gép ezt elfogadja: hibát majd csak akkor jelez, ha valamilyen műveleteket akar végezni a bevitt adattal, de az arra nem alkalmas. Hogy milyen típusú adatot vár a gép, azt az dönti el, hogy az INPUT szó után beírt betűt (változónevet) követi-e dollárjel ($). Ebben az esetben ui. a kurzor idézőjelek között jelenik meg, és szótípusú adatra van szükség. A program leállítható, ha az input kérésre STOP-ot írunk be (azaz SHIFT és A betű). Ha gép szótípusú adatot vár (tehát megjelennek az idézőjelek), a STOP-ot csak úgy írhatjuk be, ha előbb eltüntetjük az idézőjeleket. Ezt megtehetjük úgy, hogy a SHIFT és nyíl (8-as mező) segítségével a kurzort mozgatjuk, majd a SHIFT és a nulla segítségével letöröljük az idézőjeleket. Egyszerűbb megoldás az, ha EDIT-tel törlünk, azaz SHIFT és 1-es mező. Az INPUT parancsként nem alkalmazható; a gép 8 típusú hibát jelez.

LET
Az utasítás utáni kifejezés kijelöli a változó értékét. Sok géptípus van, ahol az értékadás végrehajtható a LET szó nélkül is, de a Sinclair BASIC megköveteli a LET szót. Próbáljuk meg!

10 DIM A$(5)
20 LET A$="SINCLAIR"
30 PRINT A$

Azt várnánk, hogy a 30-as sorral kiíratott A$ értéke az lesz, amit a 20-as sorban az egyenlőségjel után látunk. A gép azonban 5 karakter hosszúságúra vágja le a szót, mivel a DIM-mel az A$-t 5 hosszúságúra határoztuk meg. Ha a 10-es sort töröljük, az értékadás a várt módon teljesül.

LIST
Az utána írt sorszámtól kezdve megjeleníti a képernyőn a programlistát. Ha nem írunk utána számot, a programsorok az elsőtől kezdve jelennek meg. Amint a képernyő megtelt, a gép leáll, de a listázás folytatható újabb LIST és másik sorszám paranccsal.

LLIST
Hatása teljesen megegyezik a LIST-tel, de csak akkor működik, ha a géphez nyomtató van csatlakoztatva. Az utasítás a képernyőn nem jeleníti meg a programlistát. Működését a BREAK-kel állíthatjuk le.

LOAD
Valamely program kazettáról való visszatöltését mindig ennek a parancsnak kell megelőznie. Hatásáról, gyakorlati alkalmazásáról már írtunk. Működését a BREAK-kel állíthatjuk le.

LPRINT
Csak akkor hatásos, ha a géphez nyomtató csatlakozik. Hatása hasonló a PRINT utasításhoz, de az AT használata a TAB-éhoz válik hasonlóvá. Általában a kiíratás helyére vonatkozó jelölések (pl. vesszők) használatát kell kísérletekkel begyakorolnunk.

NEW
Ez a parancs szinte mindent töröl: a képernyőt, a programot és a memóriát. A parancs végrehajtása után a gép "üressé" válik; új programot írhatunk bele. Vannak azonban olyan területek a memóriában, amelyekben megmaradnak a beírt adatok e parancs végrehajtása után is.

NEXT
A FOR-nál már említettük ezt az utasítást. Ez lépteti a változót, amelynek határait a FOR ... TO utasításokkal jelöltük ki.

PAUSE
A programban elhelyezve szünetelteti a program futását. A PAUSE után álló számot 1/50-del megszorozva, megkapjuk a várható szünet végeredményét másodpercben. A PAUSE "szüneteltető" hatása leállítható, ha szünet közben bármelyik betűmezőt megnyomjuk. A gép nem várja ki a szünet végét, a program tovább fut.

PLOT
Az utána álló vesszővel elválasztott két szám által meghatározott képelemet feketére változtatja. Ez az utasítás tehát egy előre meghatározott jelet visz a képernyőre - míg a PRINT tetszés szerinti jelet. Másik eltérés, hogy a képernyőn levő helyeket a PLOT és a PRINT utasításnál máshonnan kezdve mérjük. A PLOT helymegjelölése az "iskolai" koordináta-rendszerhez hasonló. A kezdőpont a képernyő bal alsó sarka. Ez a nulla, nulla (0, 0) koordináta. Az első szám a vízszintes (X) koordináta, a második szám a függőleges (Y) koordináta. A teljes képernyő vízszintesen 64, függőlegesen 44 részre van felosztva. A koordináták helyébe nemcsak számokat, hanem betűket is írhatunk. Így van pl. mód arra is, hogy függvényeket ábrázoljunk a képernyőn. Az UNPLOT az utána álló számokkal meghatározott helyeket fehérre rajzolja. A PLOT - UNPLOT utasításpárral hozhatunk létre mozgásszerű ábrázolásokat a képernyőn. Ezekkel az utasításokkal együtt érdemes tanulmányozni a PRINT-et.

PRINT
Ha utána számot írunk, a NEW LINE (ENTER) hatására ez a szám megjelenik a képernyőn. Betűket, egyéb jeleket idézőjelbe kell tennünk. Ekkor - ha még semmi sincs a képernyőn - a számok, jelek a bal felső sarokban fognak megjelenni. Ha a képernyőn már van valami, akkor az újabb megjelenítés helyét az is befolyásolhatja, hogy az előző kiíratás hogyan történt. Írjuk a gépbe

10 PRINT 1

és NEW LINE (ENTER). A program futtatása (RUN és NEW LINE) után a bal felső sarokban megjelenik az 1. Módosítsuk most úgy a programot, hogy az 1-es után pontosvesszőt írunk:

10 PRINT 1;

A futtatás után ismét az előző helyre kerül az 1. Folytassuk a programot:

20 PRINT 2

A futtatás során a megjelenő 1-es után - azaz mellette - jelenik meg a 2-es. Ha az előbb beírt pontosvesszőt töröljük, a program az első sorba írja az 1-est és a másodikba a 2-est. Ha a pontosvessző helyére vesszőt írunk, a 2-es a sor második felének elején jelenik meg. Próbáljuk növelni a vesszők számát, és figyeljük meg, milyen hatása van! (Hogyan változik a vesszők hatása, ha a 10-es sorba idézőjelek közé 16-nál több betűt írunk?)
Próbáljuk meg ezt a programot:

10 PRINT 1,,,,
20 PRINT 2
30 PRINT AT 1,1;3
40 PRINT TAB 2;4

Tehát az AT utasítással visszaugorhatunk és "megelőzhetjük" a legutolsó kiírást. Az AT utáni első szám ui. a képernyő egyes számú sorát jelenti. A PRINT utasításnál ui. mindig a bal felső sarokból indul a számozás. És mivel a számítástechnikában mindig nullával kezdik a számolást, pl. a képernyő második sora az l-es sor. Az AT utáni második szám az oszlopok számát jelenti (szintén nulla az első oszlop, balról kezdve). Az AT-tel tehát szintén valamilyen helykoordinátákat adunk meg, de ezeket a bal felső sarokból kezdjük mérni, és ebben a rendszerben a képernyő 22 sorra és 32 oszlopra van osztva. (Láthatjuk tehát, hogy egy PRINT-hez tartozó betűhelyhez vízszintesen és függőlegesen is két - tehát 2-szer 2 - olyan képelem jut, amelyet a PLOT utasítással befeketíthetünk.)
Programunk futtatásakor azt is láthatjuk, hogy a TAB utasítással a felhasznált oszlop számát adtuk meg, és hogy a gép az utolsó kiíratás sorához képest a következő sorba ír (nem a hely szerinti, hanem a műveleti sorrend szerinti "utolsóról" van szó). Ha a 30-as sor végére pontosvesszőt teszünk, a 4-es szám egy sorral feljebb, a 3-as után jelenik meg. A TAB-ra tehát ugyanolyan hatással van a pontosvessző, mint az egyszerű PRINT-re. Próbáljuk ezt a pontosvesszőt egy, két, majd három vesszővel helyettesíteni. Az "események" talán váratlanok, de jellemzők.
Érdemes összehasonlítani a PRINT és a PLOT utasítások hatását, ill. a koordináta-rendszerüket. Ehhez írassunk a PRINT AT-tel mondjuk a 10-es sorba egy olyan grafikai jelet, amely jó támpontot ad. Ilyen jel, amit G kurzorral az 1-es mezon írhatunk be. (Természetesen idézőjelbe kell tennünk.) Oszlopszámnak válasszuk szintén a tízest.) Persze tudjuk, hogy igazából a 11. sorról és a 11. oszlopról van szó... (Programunk következő sorába írjunk PLOT utasítást, az ezt követő koordinátákat pedig igyekezzünk úgy megválasztani, hogy a PLOT-tal előállított fekete négyzet végül essen egybe a PRINT-tel írt grafikai jellel. A két programsor közé írhatunk egy pl. PAUSE 100-at tartalmazó sort is, így jobban elkülöníthető a két jel megjelenése. Ha a PRINT után olyan grafikai jelet írunk, amelynél máshol van a fekete rész (pl. 2-es, 3-as, 4-es stb.), jól láthatjuk a PLOT és a PRINT kapcsolatát. Ha a PRINT utasítás után nem írunk semmit, akkor a gép nem ír semmit - de kihagy egy sort. Ezt a hatást általában a legutolsó PRINT utasítás végére vagy a következő elejére írt vesszőkkel is meg tudjuk valósítani. A vesszőket - amelyek az adott sor kiíratását befolyásolják - nemcsak az előző sorban, hanem az adott sorban is elhelyezhetjük, közvetlenül a PRINT szó után.

REM
Utána bármilyen jeleket írhatunk, még idézőjelre sincs szükség. A beírtakat a program futása során a gép figyelmen kívül hagyja. A REM használatakor ne felejtkezzünk el memóriafogyasztó tulajdonságáról, tehát ez az utasítás sem teljesen "ártatlan"!

RETURN
A GOSUB-bal kezdődő utasítássorozat másik vége. Amikor a gép a programban idáig ér, a program közvetlenül azután a GOSUB után folytatódik, amelyik ide ugratta a gépet.

RUN
Tulajdonképpen egy egyesített CLEAR és GOTO utasítás. Tehát törlünk vele - és ha nem írunk számot utána, a program a legelső sortól kezdve fog futni. Számot írva utána, a program az adott sorszámtól fog futni. Kedvelt parancs a programok indításához, de sokszor kárt okozhat, mert törli a nagy nehezen bevitt adatokat. Érdemes a GOTO-val való indításra rászokni.

SAVE
A programok - ill. a gép állapotának - szalagon való rögzítéséhez szükséges. Utána idézőjelbe valamilyen jelsorozatot kell írni - enélkül F hibajelet kapunk. Az ide kapcsolódó egyéb felvételi fogásokról már írtunk, de még a programok között is lesz erről szó. A SAVE utasítást program közben alkalmazva és az utána következő sorba RUN-t (vagy a megfelelő GOTO-t) írva, a magnóról visszatöltött program automatikusan elindul. A SAVE utasítást nem használhatjuk a GOSUB-RETURN által kialakított programágakban. A már elindult SAVE-et a BREAK-kel állíthatjuk meg (jobb alsó mező).

SCROLL
A képernyőn levő sorokat eggyel feljebb tolja - ami természetesen csak úgy lehetséges, hogy a legfelső sor eltűnik. Ha egy SCROLL utasítást PRINT követ, akkor az egyszerű (AT nélküli) PRINT a legalsó sorba kezdi a kiírást. A programok írásánál éppen ezért könnyen előfordulhat - mivel az utolsó sor foglalt -, hogy nincs már hely a képernyőn és így 5 típusú hibaüzenetet kapunk. Ekkor vagy további SCROLL-okat kell beiktatnunk, vagy az AT-tel kell visszatérnünk a kívánt helyre a képernyő utolsó sorából.

SLOW
Hatására a gép olyan üzemállapotba kerül, amelyben számol is és folyamatosan ír (rajzol) a képernyőre is. A FAST utasítás (parancs) ellentéte: egyik a másik hatását közömbösíti. Ha a gépet ki-, ill. bekapcsolják, automatikusan a SLOW-nak megfelelő üzemállapot jön létre. Ugyanez a hatása a NEW parancsnak is. A SLOW üzemmódban - akár a program beírásakor, akár a program futásakor - a képernyő nyugodtabb.

STOP
Megállítja a program futását. Parancsként és utasításként egyaránt használható. Bizonyos programírási hagyományok megkívánják, hogy a programok végén a program végét jelző utasítást (pl. így a STOP-ot) írjunk. A ZX81 BASIC-jében ennek általában nincs sok haszna. A STOP-ot is megjegyzi a gép - ennek szemléltetésére próbáljuk meg a következő programot:

10 PRINT "KISERLET"
20 INPUT A
30 PRINT A
40 INPUT B$
50 PRINT B$
60 CONT

A programot elindítva megjelenik az idézőjelben levő szó, majd a bal alsó sarokban az L kurzor, tehát a gép valamilyen szám bevitelére vár. Szám helyett azonban írjuk be, hogy STOP és NEW LINE (ENTER). A gép D/20 üzenettel válaszol. Indítsuk el ismét pl. RUN-nal a programot. A felirat megjelenése után az inputkérésre írjunk be egy akármilyen számot, amely a NEW LINE (ENTER) után megjelenik a szó alatt. Utána az idézőjelben megjelenő kurzorral beírhatunk bármit, ami a bevitel után ismét megjelenik harmadik sorként. Ezután a képernyő bal alsó sarkában ismét megjelenik az L kurzor, amely megint inputkérést jelent. Ha beírunk egy számot, akkor az előbbi működés ismétlődik. A program tehát a 20-as sorral kezdve ciklikusan ismétlődik, anélkül, hogy pl. GOTO 20 volna a programban. Próbáljuk most azt meg, hogy amikor a program a 40-es sorhoz ér (azaz megjelenik a kurzor az idézőjelben), írjuk be a STOP-ot. (Ez úgy a legegyszerűbb, ha egyszerre lenyomjuk a SHIFT-et és az 1-est, majd ha eltűntek az idézőjelek, akkor egyszerűen bevihetjük a STOP-ot.) Ezután induljunk ismét el a program elejéről. Egy ideig minden a szokott módon történik, de most már a program a 40-es sortól ismétlődik -miként az előbb a 20-as sortól. A gépnek ez a tulajdonsága felhasználható arra, hogy a gépnek megmondjuk, honnan ismételjen egy programot, anélkül, hogy ilyen utasítás szerepelne a programlistában.

UNPLOT
A PLOT utasítás párja; a már leírt koordinátákkal megadott képelemet fehérre "festi".

2.2. Egyéb BASIC utasítások
Gyakran előfordulhat, hogy valamilyen BASIC nyelvű programot a ZX81-en akarunk futtatni, de az eredeti programlistában olyan utasításokkal találkozunk, amelyek gépünk nyomólapján nem láthatók. Az ilyen utasítások közül gyűjtöttünk össze néhányat, ill. néhány helyettesítési lehetőséget is leírunk.
A ZX81-nél egy sorba csak egy utasítás írható!

ASC
Általában jól helyettesíthető a CODE függvénnyel, de lehet, hogy a számértékek megváltoztatására is szükség lesz.

CALL
A program ennek hatására a gépi kódban írott programrészekre (szubrutinokra) ugrik. Az USR függvénnyel helyettesíthető. Általában a következő alakok használhatók:

PRINT USR szám
LET A=USR szám
RAND USR szám

DIV
Ez a függvény az osztás egész részeit hozza létre, pl. a

21 DIV 5

kifejezés értéke 4. Ez a ZX81 számára így helyettesíthető:

INT(21/5)

DIM
A ZX81-nél a DIM utasítások nem írhatók egy sorba, a bennük szereplő változó csak egyetlen betűből állhat.

DO...UNTIL
A legtöbb esetben egyszerűen helyettesíthető:

IF...THEN GOTO...

DRAW
Ez az utasítás legtöbbször valamilyen egyenes rajzolását eredményezi. A problémát általában nem a helyettesítő utasítás megtalálása okozza, hanem a képernyő felosztásának eltérő rendszere, azaz az átszámolás a ZX81 koordináta-rendszerébe.

ELSE
A következő környezetben szokott előfordulni:

IF ... THEN ... ELSE ...

Az ELSE utáni részt a gép csak akkor hajtja végre, ha az IF után álló összefüggés nem igaz. Ilyen példa:

IF A=1 THEN PRINT "A=1" ELSE PRINT "A NEM 1"

Ezt így helyettesíthetjük:

10 IF A=1 THEN PRINT "A=1"
20 IF A<>1 THEN PRINT "A NEM 1"

Értékadás
Sok BASIC nyelvjárás megenged ilyen programsorokat:

10 X=2
20 A$= "EGY"

A Sinclair BASIC-ben minden esetben szükség van a LET-re:

10 LET X=2
20 LET A$ = "EGY"

END
A legtöbb esetben egyszerűen elhagyható, de minden esetben helyettesíthető STOP-pal.

FOR ... NEXT ...
A FOR-t mindig változónak, ill. TO-nak kell követnie. A NEXT után ugyancsak ki kell írnunk a változó nevét, bár ezt is sok nyelvi változat elhagyja. A FOR, ill. a NEXT után írt változó csak egy betűből állhat.

GET és GET$
A teljes kifejezés valószínűleg

LET Y = GET (esetleg GETY vagy GET$)

alakú. A gép valamelyik betűmező megnyomására vár. Az átalakítást az INKEY$ (esetleg INPUT) felhasználásával végezhetjük el, pl. így:

100 LET Y= CODE INKEY$
110 IF Y=0 THEN GOTO 100

Ha az eredeti programban GET$ van, akkor így helyettesíthetjük:

100 LET Y$=INKEY$
110 IF Y$="" THEN GOTO 100

A megbízhatóbb működés érdekében célszerű e sorok elé egy rövidebb PAUSE-t beiktatni.

IF ... THEN ...
Ebből a kapcsolatból sok BASIC változatban elhagyható a THEN. Így pl. az

IF A=1 PRINT "EGY"

így helyettesíthető:

IF A=1 THEN PRINT "EGY"

A Sinclair BASIC-ben a THEN sosem hagyható el. Igen gyakori, hogy a feltétel teljesülése esetén a program nem a következő sorban folytatódik. Például:

100 IF X=1 THEN 10

Ezt a ZX81 számára így kell helyettesíteni:

100 IF X=1 THEN GOTO 10

Hasonlóképpen:

10 IF Y=2 THEN X=1 (vagy 10 IF Y=2 X=1)

helyett ezt kell írnunk:

10 IF Y=2 THEN LET X=1

INKEY
A gép valamelyik lenyomott jel kódjára kíváncsi, tehát a

10 LET A=INKEY

így helyettesíthető:

10 LET A =CODE INKEY$

Ha a gép az INKEY-el bevitt adat előtt még vár is, ilyen alakkal találkozhatunk:

10 LET Y=INKEY(100)

Ez így helyettesíthető:

10 PASUE 100
15 LET Y=CODE INKEY$

INSTR
Ez az utasítás arra alkalmas, hogy a gép valamilyen karaktersorozatban megkeresse egy másik karaktersorozat helyét. Helyettesítését, ill. a működést az alábbi programrészletben láthatjuk. Az INSTR utasítás helyettesítését az 1000-rel kezdődő szubrutin, és legegyszerűbb használatát a felette levő néhány sor jelenti. S értéke megmutatja, hogy az A$ karaktersorozatban hányadik a B$ karaktersorozat. Ha az is várható, hogy a B$ többször is megtalálható A$-ban, akkor GOSUB 1000-rel többször is visszaküldhetjük a programot, de előbb A$-t S értékének megfelelően "vágni" kell.

10 LET A$="JYRJGJFYHGY*FRUTIOOLMJHTERS**MM"
20 LET B$"**"
30 GOSUB 1000
40 PRINT S
50 STOP
1000 LET S=0
1010 IF LEN B$=0 OR LEN A$=0 OR LEN B$>LEN A$THEN RETURN
1020 FOR S=1 TO LEN A$-LEN B$+1
1030 IF A$(S TO S+LEN B$-1)=B$ THEN RETURN
1040 NEXT S
1050 LET S=0
1060 RETURN


LEFT$
A függvény rendszerint LEFT$(A$,B) alakban van kijelölve. Azt jelenti, hogy az A$-ral jelölt karaktersorozatból (balról) az első B darab karakterre van szükség. Például a

10 LET X$=LEFT$(A$,B)

így helyettesíthető:

10 LETX$=A$(TO B)

LINK
Általában egyszerűen az USR függvénnyel helyettesíthető.

MAT
Ezzel a függvénnyel általában a következő összefüggésben találkozhatunk:

10 DIM A(20)
20 DIM B(20)
30 MAT A=B

Így helyettesíthetünk:

10 DIM A(20)
20 DIM B(20)
30 FOR I=1 TO 20
40 LET A(I) = B(I)
50 NEXT I

MID$
A MID$(X$,A,B) alakban megadott függvény az X$ (karaktersorozat) középső B darab elemét jelenti, A-tól kezdve a számlálást. Általános alakban így helyettesíthető:

X$(A TO A+B-1)

MOD
A MOD B az A szám B-vel való osztása után megmaradó maradékot jelenti. A MOD B tehát így helyettesíthető:

(A/B)-INT (A/B)

NEXT
Néhány BASIC változatban a NEXT szó után elhagyható a változó betűjele. Ez azonban nem lehetséges a Sinclair BASIC-ben.

ON ... GOTO ...
ON ... GOSUB ...

Például így fordul elő:

10 ON B GOTO 20,30,40,50

A legkézenfekvőbb ez az átalakítás:

10 IF B=1 THEN GOTO 20
12 IF B=2 THEN GOTO 30
14 IF B=3 THEN GOTO 40
16 IF B=4 THEN GOTO 50

"Cselesebben" - de főleg rövidebben - is átalakíthatunk (gyorsabb működésre számítva):

GOTO (20 AND B=1) + (30 AND B=2) + (40 AND B=3) + (50 AND B=4)

PROC, ENDPROC
A PROC GOSUB-bal helyettesíthető, az ENDPROC pedig RETURN-nel.

RIGHT$
A RIGHT$(X$,A) kifejezés az X$ karaktersorozatból jobbra A darab karaktert használ fel. Így helyettesíthető a

10 LET Y$=RIGHT$(X$,A)

kifejezés:

10 LET Y$=X$(LEN X$-A+1 TO)

TAB (A,B)
Általában helyettesíthető az AT függvénnyel, az AT A,B; alakkal.

2.3. Függvények
A függvények az egyes betűmezők alatt vannak feltüntetve. A különböző gyártási szériáknál a függvények elnevezései, ill. rövidítései eltérőek lehetnek, de könnyen azonosíthatók. A függvények jó része ismert matematikai függvény: szögfüggvények, ill. azok arkuszai, logaritmusfüggvények, abszolút érték stb. A többi sajátos függvényről azonban érdemes szólni.
A függvényeket F kurzorral (FUNCTION üzemmódban) írhatjuk be: SHIFT-tel egyidőben NEW LINE (ENTER).

CHR$
A gép kikeresi az utána álló számnak a kódtáblázat szerint megfelelő betűt, számot, jelet vagy utasítást. Mint a gépkönyv kódtáblázatában láthatjuk, ezek a számok nulla és 255 között lehetnek. A függvény által előállított jelek természetesen csak akkor jelennek meg a képernyőn, ha kiíratjuk őket, pl.

PRINT CHR$ 12

Ezzel a módszerrel jelsorozatot is előállíthatunk, pl. így:

PRINT CHR$ 42+CHR$ 44+CHR$ 62

CODE
Egy karaktersorozat (szó) CODE-ja a karaktertáblázatból az első karakterhez kikereshető szám. A CHR$ ellentétének tekinthetjük. Működését tanulmányozhatjuk a következő sorral:

PRINT CHR$ CODE "P"

Eredményként a P jelenik meg. Ha elhagyjuk a CHR$-t - a kódtáblázatnak megfelelően - 53-at kapunk.

INKEY$
A gép nyomólapján megnyomott mezőnek megfelelő jelet eredményez. Pl. így szemléltethetjük:

10 PRINT INKEY$
15 PAUSE 100
20 GOTO 10

Az egyes mezőket megnyomva megjelenik a jel képe.

INT
Valamely számnak az egész részét írja ki; mindig lefelé kerekít. Negatív számokra is alkalmazható: akkor a számot a nála kisebb egész számmá alakítja.

LEN
Valamilyen-karaktersorozat (szó) hosszát adja meg, azaz a betűhelyek darabszámát. A "mérendő" szót idézőjelbe kell írni.

SQR
Megfelel a négyzetgyökvonásnak.

STR$
Az utána álló számot (vagy karaktersorozatot) a gép szóként kezeli, azaz pl. nem törődik az utána álló szám értékével.

USR
A gépi kódban írt programrészekhez vezeti a program futását. Az USR-t követő szám a gépi kódú program kezdetének memóriacíme. Az USR elé - a gépi kódú rész tulajdonságától függően - valamilyen utasítás szükséges: LET, PRINT, RAND.

VAL
Az utána idézőjelben álló kifejezés értékét határozza meg. A kifejezéstől függően sokféle hibajelzéssel találkozhatunk.

2.4. A gép üzenetei
Ha a gép végrehajtott - vagy megpróbált végrehajtani - egy parancsot vagy programot, a képernyő bal alsó sarkában egy ferde törtvonal jelenik meg, bal oldalán betűvel vagy számmal, jobb oldalán számmal. Ha a jobb oldali szám nulla, akkor az azt jelenti, hogy a kapott utasításnak nem volt sorszáma. Egyébként itt mindig az utolsóként végrehajtani megkísérelt sor számát találjuk. Ha a bal oldali szám nulla, a gép mindent sikerrel végrehajtott. A nullától különböző számok, betűk jelentését később foglaljuk össze.
A géppel való műveletek során kapott üzenetek jelentését soha ne mulasszuk el megfejteni!

0 (nulla)
Sikeres végrehajtás után jelentkezik, vagy akkor, ha p1. a programot GOTO-val olyan programsorra küldtük, amelynek száma nagyobb a meglévőknél. Ekkor a törtvonal jobb oldalán természetesen nem a nemlétező sor száma áll.

1
Ez a hibaüzenet akkor jelenik meg, ha egyik sorban van NEXT utasítás (és utána egy változó), de ezt megelőzően ezzel a változóval nincs FOR... stb. utasítás - ugyanakkor a NEXT után álló változó már előbb valahol szerepel a LET után.

2
Általában akkor jelenik meg ez a hibaüzenet, ha olyan változót használunk, amelyet addig még nem határoztunk meg (pl. LET utasítással még nem kapott értéket).
Indexes változónál (pl. A(I), ahol I az index) ezt jelzi a gép, ha a változó indexes formáját használjuk, mielőtt a változót DIM-mel meghatároztuk volna. Ezt a jelzést kapjuk az 1 típusú hibánál leírt esetben, ha a változó előbb nem szerepel LET után.

3
Ha indexes változónál az index nulla (vagy azzá válik). Ha az index negatív (vagy azzá válik) B hibát jelez a gép.

4
Nincs elegendő hely a memóriában. A jelzést érdemes alaposan elemezni, mert ilyen esetben az is előfordulhat, hogy a gépnek már csak a jelzés egy részének kiírásához maradt "ereje".

5
A képernyő megtelt, a gép már nem tud hová írni. A CONT általában segít, vagy a programot kell úgy alakítani, hogy a képernyő ne teljen túl (SCROLL), vagy időnként le kell töröltetnünk (CLS).

6
A számítások során túlságosan nagy szám keletkezett. (Ez a túlcsordulás.) Ezt kapjuk akkor is, ha nullával próbálunk osztani.

7
RETURN utasításnál jelentkezik, ha nincs meg a hozzá való GOSUB.

8
Akkor jelentkezik, ha parancsként próbáljuk használni az INPUT utasítást.

9
A STOP utasítás végrehajtása után jelenik meg. Ezután CONT-tal folytathatjuk a programot a STOP után.

A
Valamilyen függvénybe olyan számot helyettesítettünk, amelyre nincs értelmezve (pl. az SQR vagy az LN után negatív számot írtunk).

B
A megadott (egész) szám értéke nem megfelelő, azaz nem tartozik az adott funkcióhoz rendelt értéktartományba. (Például a LIST vagy a RUN után negatív számot írtunk.) "Rokon" hiba a 3.

C
A VAL utáni idézőjelben olyan karaktersorozat van, amely nem alkot matematikailag értelmes kifejezést.

D
A program futása közben megnyomtuk a BREAK-et, vagy a gép inputkérésére STOP-ot írtunk be.

F
A SAVE utasítás (vagy parancs) utáni idézőjelbe nem írtunk semmit (még SPACE-t sem).

3. Programok
Ebben a fejezetben programlistákat közlünk magyarázattal, a beíráshoz esetleg szükséges segítséggel. Ezek után következnek az ötletek, amelyeket gondolatébresztőnek szánok, előkészületként más programok önálló megírásához. Remélem, hogy az Olvasónak a leírt ötleteken kívül még sokkal több ötlete lesz, amelyek által a lehető legjobban megismeri a gépet. Bármiféle kérdésünk, kétségünk támad a géppel szemben, azonnal próbáljuk ki! A programok beírása és a próbálgatások során ne legyünk a géphez türelmetlenek, mert "ő" is nagyon türelmes hozzánk... Az egyes programok leírásának kezdetét jelző cím után közöljük a szükséges legkisebb memóriaigényt. Ha gépünk ennél nagyobb kapacitású - van memóriabővítőnk - akkor természetesen a kisebb igényű program is futtatható a gépen.
Ha az Olvasó a számára kedvezően kialakított programokat "titkosítani" akarja, az így lehetséges:
Írjuk be parancsként:

POKE 16509,0

és NEW LINE (ENTER)
Majd a gép 0/0 üzenete után:

POKE 16510,0

és NEW LINE (ENTER). Ezzel a módszerrel a már beírt program első sorából egy kitörölhetetlen nulladik sor keletkezik.
Mint már emutettük, a NEW LINE (ZX81) és az ENTER (TIMEX) a működés szempontjából egyenértékű. Általában a félreértés elkerülése érdekében mind a kettőt feltüntetjük. Ugyanez vonatkozik a RUBOUT (ZX81) és a DELETE (TIMEX) funkciókra is.
Nemcsak nyelvészeti problémát okozhat, minek nevezzük a gép fekete színű síkjától fehér színnel elhatárolt síkrészt, amelyet megnyomva a gép valahogy reagál? A "gomb" legalábbis olyan dologra emlékeztet, amely valahonnan kiáll... Ilyesmit a gépen aligha találunk. A billentyűt biztosan igen sokféleképpen definiálhatnánk, de a műszaki gyakorlatban ismert billentyűk nem emlékeztetnek a gép sík felületére. A számítástechnika a "mező" szót egészen más értelemben szokta alkalmazni, éppen ezért nem hiszem, hogy az Olvasót megzavarná, ha a betűk, jelek síkban határolt helyére ezt a szót használjuk. Van olyan szövegkörnyezet is, ahol mindez még egyszerűbben kifejezhetű.

Előtétprogramok
E programok segítségével a kazettán levő programfelvételekről olyan tartalomjegyzéket készíthetünk, amely a kazetta lejátszásakor megjelenik a képernyőn. A program segítségével a kazettaoldalon levő programfelvétel a gépbe betölthető. A programlista beírásakor különösebb nehézséggel nem találkozhatunk. A PRINT utasításokban levő vesszőkre ügyeljünk, mivel ezek határozzák meg a kiírt szavak helyzetét, és helytelen beírásuk sok zavart okozhat. A programlisták 700-as, ill. 80-as sorában látható B betűt normál betűként (nem inverzként, hanem L kurzoros üzemmódban) kell beírnunk. Ez a betű a magnón való első sikeres rögzítés után viszont inverzzé válik! A programcímeket természetesen csak e példa kedvéért írtuk be.

Az első változat felépítése egyszerű. A PRINT utasítások kiírják az egyes felvételek címét, ill. a hozzájuk tartozó számlálóállást. A könnyebb áttekinthetőség kedvéért itt az utasítások sorszáma megegyezik a számlálóállásokkal. (Ez persze másképpen is lehet.) A sorszámok a számlálóállásoknak megfelelően növekednek (ez a szám - hatvan perces kazetta és MK29 magnó esetén - nem éri el a 600-at).

5 PRINT "**MAGNO ALLJ **"
10 PRINT ,,"B OLDAL FELVETELEI:"
50 PRINT ,," 50 EGYENLETEK"
65 PRINT " 65 ATALAKITAS"
80 PRINT " 80 LOTTO"
95 PRINT " 95 FUGGVENY"
105 PRINT "105 REAKCIOIDO"
115 PRINT "115 FUGGVENYEK"
135 PRINT "135 KONYVTAR"
195 PRINT "195 SZOTAR"
250 PRINT "250 BIORITMUS"
285 PRINT "285 REKLAM"
300 PRINT "300 ATALAKITAS2"
315 PRINT "315 ABC1K"
325 PRINT "325 ABC2K"
345 PRINT "345 ABC16K"
395 PRINT "395 SZAMREND"
600 PRINT ,,"A BETOLTENDO PROGRAM: ";
610 INPUT C$
620 PRINT C$
630 PAUSE 50
640 LOAD C$
650 STOP
700 SAVE "B"
705 RUN

A következő program is hasonló, de ebben a kiírandó felvételcímek két utasításban vannak összesűrítve a memóriatakarékosság érdekében. Ezzel a megoldással 1 K esetén is igen sok programcímet írhatunk ki.

5 PRINT "** MAGNO ALLJ ** "
10 PRINT ,,"B OLDAL FELVETELEI:"
20 PRINT ,," 50 EGYENLETEK",," 65 ATALAKITAS",," 80 LOTTO",," 95 FUGGVENY",,"135 KONYVTAR",,
30 PRINT AT 4,16;"195 SZOTAR",,"250 BIORITMUS",,"285 REKLAM"
50 PRINT AT 21,0;"BETOLTENDO FELVETEL: ";
55 INPUT C$
60 PRINT C$
65 PAUSE 50
70 LOAD C$
75 STOP
80 SAVE "B"
85 RUN

A programok használata: Az előtétprogramot a szalag elejére, a bekötő után vegyük fel, miután a megfelelő számlálóállásokat és címeket beírtuk. A bekötő után a biztonság kedvéért hagyjunk elegendő helyet, mivel a programfelvétel ideje az újabb címekkel növekszik. Állapodjunk meg magunkkal, hogy minden szalagon mondjuk az 50-es számlálóállásnál kezdődik az első program. Így a szalag elején bőven lesz helyünk a tartalomjegyzék felvételéhez. (A közölt példaprogramok felvételi ideje 20-30 s.) Tételezzük fel, hogy beírtuk - legalábbis ideiglenes adótokkal - az előtétprogramot. Hogy vegyük fel a programot?

  1. Csavarjuk a szalagot a bekötővel való találkozáshoz! Tegyük a kazettát a magnóba!
  2. Írjuk, a gépbe: GOTO 700 (az első változatnál), ill. GOTO 80 (a második változatnál), tehát a SAVE sorral kezdjük a programot.
  3. Indítsuk el a magnót!
  4. NEW LINE (ill. ENTER).
  5. A felvétel végeztével megjelenik a a programlista mellett látható kép; a gép beírásra vár.

(A 3. és 4. művelet felcserélhető, de ekkor az indítást gyorsan végezzük!) Ezzel az előtétprogramot rögzítettük. Ha ilyen programmal ellátott kazettát helyezünk a magnóba, akkor:

  1. Álljunk a szalag elejére!
  2. Nullázzuk a számlálót!
  3. Írjuk be: LOAD "" és NEW LINE (ENTER)!
  4. Indítsuk el a magnót!
  5. A megjelenő feliratnak megfelelően állítsuk meg a magnót, és miután eldöntöttük, melyik felvételt akarjuk betölteni, írjuk be a címét a megjelenő idézőjelek közé, majd NEW LINE (ENTER)!
  6. Ha a kívánt felvétel túlságosan messze van a szalag elejétől, továbbítsuk a szalagot a felvétel kezdetének közelébe. (Természetesen kivárhatjuk, amíg a magnó normál sebességgel eléri a megfelelő felvételt, de ez fél óráig is eltarthat!)
  7. Miután a kiválasztott programot a gép befogadta, a LOAD utasításnak megfelelően a képernyő alján az 1. programnál 0/640, a 2. programnál 0/70 üzenet jelenik meg. Ez arra utal, hogy a gép az előtétprogram utasítását hajtotta végre, bár azt a memóriából kitörölte, azaz a betölteni kívánt programmal helyettesítette.

Mit tegyünk, ha az előtét programban rögzített adatokat módosítani, ill. kiegészíteni akarjuk?

  1. A szalag legelejéről induljunk LOAD ""-dal!
  2. A megjelenő programkép alján az idézőjelek közötti L kurzor jelzi, hogy a gép adatbevitelre vár, mi viszont magához a programlistához szeretnénk hozzájutni. Ujjunkat a SHIFT-en tartva nyomjuk meg az EDIT-tel (1-es). Erre az idézőjelek eltűnnek és marad az L kurzor. Ekkor bevihetjük a STOP utasítást (SHIFT+A betű) és NEW LINE (ENTER). Ezt a műveletsorozatot érdemes megjegyezni, mert sokszor alkalmazható fogás. (Az idézőjelek úgyis eltüntethetők, hogy a SHIFT+RUBOUT (DELETE) és a SHIFT+5, ill. 8 számok mezőivel ügyeskedünk. Ez azonban kevésbé egyszerű.) A gép erre D/az inputnak megfelelő sorszámüzenettel válaszol.
  3. NEW LINE (ENTER) megjeleníti a listát.
  4. A módosítás közben derül ki az 1. változat szerinti program előnye: könnyebben módosítható. A számlálóállással megegyező sorszámok mindig könnyen illeszthetők a listába, még felvétel-"beszúrás" esetén is. (Ha memóriaszűke mutatkozik, áttérhetünk a 2. változat szerinti programra. Ebbe a 30-as sorba akkor érdemes írni, ha a 20-as sorral már megtöltöttük a bal oldali fél képernyőt. A 30-as sor új oszlopot nyit.)
  5. Az elkészített - és RUN-nal kipróbált! - listát a már ismertetett módon vehetjük fel.

Ötletek

Egyenletrendszerek megoldása (1 K, 2 K)
A program elsőfokú három- (ill. két-) ismeretlenes egyenletrendszerek megoldására alkalmas. Az alapprogram kényelmesen elfér a TIMEX 1000 2 K tárolójában.

5 REM *** EGYENLETEK ***
10 PRINT TAB 5;"* AZ EGYUTTHATOK: *"
20 PRINT ,,"A1  X + A2  Y + A3  Z = A4"
30 PRINT "A1=";
40 INPUT A1
50 PRINT A1; TAB 8;"A2=";
60 INPUT A2
70 PRINT A2; TAB 16;"A3=";
80 INPUT A3
90 PRINT A3;TAB 24;"A4=";
100 INPUT A4
110 PRINT A4,,,"B1  X + B2  Y + B3  Z = B4","B1=";
120 INPUT B1
130 PRINT B1;TAB 8;"B2=";
140 INPUT B2
150 PRINT B2;TAB 16;"B3=";
160 INPUT B3
170 PRINT B3;TAB 24;"B4=";
170 INPUT B4
190 PRINT B4,,,"C1  X + C2  Y + C3  Z = C4","C1=";
200 INPUT C1
210 PRINT C1;TAB 8;"C2=";
220 INPUT C2
230 PRINT C2;TAB 16;"C3=";
240 INPUT C3
250 PRINT C3;TAB 24;"B4=";
260 INPUT C4
270 PRINT C4
280 LET AA=A1*((B2*C3)-(B3*C2))-A2*((B1*C3)-(B3*C1))+((B1*C2)-(B2*C1))
290 IF AA=0 THEN GOTO 350
300 LET AX=A4*((B2*C3)-(B3*C2))-A2*((B4*C3)-(B3*C4))+A3*((B4*C2)-(B2*C4))
310 LET AY=A1*((B4*C3)-(B3*C4))-A4*((B1*C3)-(B3*C1))+A3*((B1*C4)-(B4*C1))
320 LET AZ=A1*((B2*C4)-(B4*C2))-A2*((B1*C4)-(B4*C1))+A4*((B1*C2)-(B2*C1))
330 PRINT AT 15,7;"* VEREREDMENY *",,,"X=";AX/AA;TAB 13;"Y=";AY/AA;TAB 26;"Z=";AZ/AA
340 STOP
350 PRINT AT 15,6;"* NINCS MEGOLDAS *"
360 STOP

A program a háromismeretlenes egyenletrendszereket a determinánsok módszerével oldja meg. A 2 K-s programban az egyenletrendszer általános alakja a következő:

A1 X + A2 Y + A3 Z = A4
B1 X + B2 Y + B3 Z = B4
C1 X + C2 Y + C3 Z = C4

Az A1 ... A4, B1 ... B4, C1 ... C4 a változók együtthatói; a számok indexeket jelentenek. Ilyen alakba - a hagyományos A11 ... A14, A21 ... A24, A31 ... A34 stb. helyett - a számítógép adottságai miatt írjuk. Az egyenletek előbbi alakját egyébként a 2 K-s programváltozat kiírja. (Ugyanez érvényes a determinánsokra utaló AA, AX, AY, AZ jelekre is.) Adatbevitel előtt a megadott egyenleteket mindig hozzuk ilyen alakra.
Az egyenletrendszer első általános sorának kiírása után A1= jelenik meg: a gép az X első együtthatóját kéri. Az együtthatókat rendre beírva - egészen C4-ig - a gép kiírja a megoldást; X, Y és Z értékeit. Az együtthatókat természetesen mindig előjelhelyesen kell beírni. Ha a megadott egyenletrendszer valamelyik sorában, valamelyik változó nem szerepel, akkor a megfelelő együttható értéke nulla legyen. (Ugyanez érvényes az egyenletek jobb oldalára is!) Az együtthatók értékeként tizedestörteket és valódi törteket is megadhatunk: a gép a törtvonallal kijelölt műveletet azonnal elvégzi. Ha az egyenletrendszer nem oldható meg, a gép NINCS MEGOLDÁS jelzést ad.

Az 1 K-s változat csak nehezen gyömöszölhető be a ZX81 memóriájába. Ezért a programlistát - és ezzel a szolgáltatásokat - alaposan csökkenteni kellett:

3 INPUT A
4 INPUT B
5 INPUT C
6 INPUT D
7 INPUT E
8 INPUT F
9 INPUT G
10 INPUT H
11 INPUT I
12 INPUT J
13 INPUT K
14 INPUT L
16 PRINT ,A,,B,,C,,D,E,,F,,G,,H,,,I,,J,,K,,L,,,
20 LET W=A*(F*K-G*J)-B*(E*K-G*I)+C*(E*J-F*I)
21 IF W=0 THEN GOTO 35
22 LET X=D*(F*K-G*J)-B*(H*K-G*L)+C*(H*J-F*L)
23 LET Y=A*(H*K-G*L)-D*(E*K-G*I)+C*(E*L-H*I)
24 LET Z=A*(F*L-H*J)-B*(E*L-H*I)+D*(E*J-F*I)
25 PRINT "X=";X/W,,"Y=";Y/W,,"Z=";Z/W
30 STOP
35 PRINT "          NINCS MEGOLDAS"

A gép adatkérésnél ("inputra várva") nem írja ki, melyik együttható beírása következik (csak az L kurzor jelenik meg), ezért sokkal jobban kell figyelnünk. A 12 együttható beírása után a képernyőn -- az egyszerűsítés kedvéért - függőleges elrendezésben megjelennek az együtthatók. Így legalább utólag láthatjuk, hol rontottuk el az adatbevitelt...
Ugyancsak a programlista kényszerű rövidítése miatt változtak meg az együtthatók jelölései is. Így az egyenletrendszer általános alakja:

AX + BY + CZ = D
EX + FY + GZ = H
IX + JY + KZ = L

A megadott egyenletrendszert tehát erre az alakra kell hoznunk. Az értékek bevitelére ugyanaz vonatkozik, mint az előző változatnál.
Mindkét programmal megoldhatók az elsőfokú, kétismeretes, egyenletrendszerek is. Az adott kétismeretlenes egyenletet valamilyen háromismeretlenessé kell alakítani. Első pillanatra kézenfekvő megoldásnak látszik, hogy valamelyik változó együtthatóit, valamint az egyenletrendszer harmadik sorának együtthatóit nullának vesszük (Próbáljuk ki! Legyen pl. A3=0, B3=0, C1=0, C2=0, C3=0 C4=0, ill. a másik változatban: C=0, G=0, I=0, J=0, K=0 L=0. A többi együttható bármilyen értékű lehet. Mit tesz a gép?) Aki ismeri a determinánsok szabályait, rögtön tudja, hogy a gép válaszának magyarázata az, hogy az egyenletrendszer determinánsa így nullává válik. A kedvezőtlen választ úgy kerülhetjük el, hogy a harmadik sorban az első két egyenletben nem szerepeltetett ismeretlen együtthatójára nem nullát adunk meg. A példában tehát úgy kapunk megoldható kétismeretlenes egyenletrendszert, ha C3-nak, ill. K-nak nullától különböző értéket adunk (pl. 1-et). A

2x + 3y = -2
3x = 4y = -3,2

egyenletrendszernél a beírandó együtthatók sorrendben: 2, 3, 0, -2 3, 4, 0, -3.2, 0, 0, 1, 0.
(Ne felejtsük el, hogy a gépen tizedesvessző helyett tizedes pont van!) A gép X = -1.6, Y = 0.4, valamint Z = 0-t ír ki, ami helyes - még Z-re is.
A programlisták beírásánál (2 K-s változat) ügyeljünk a 20., 110., 190. sorokban levő közökre, mert ezek alakítják ki a kiírás el helyes képét. A TAB a FUNCTION üzemmódban (SHIFT és NEW UNE) írható be a P betűvel.

Ötletek

Lottószámok (1 K)
program a lottóhúzásokhoz hasonlóan véletlenszerűen választ ki számokat és ezzel segíthet kitölteni a lottószelvényt, de nyerést nem garantál.

5 PRINT TAB 5;"* LOTTOSZAMOK *"
10 RAND
15 DIM S(90)
20 FOR I=1 TO 5
30 LET Z=INT (91*RND)
40 IF S(Z)<>0 THEN GOTO 30
50 LET S(Z)=Z
60 PRINT
70 NEXT I
80 FOR J=1 TO 90
100 IF S(J)=0 THEN GOTO 120
110 PRINT S(J);"    ";
120 NEXT J

A programlista beírásakor legfeljebb az RND jelentet újdonságot: a függvények között találjuk meg és az F kurzorral (FUNCTION üzemmód) a T betűn írhatjuk be. Tulajdonképpen ez a függvény (a véletlenszám-generátor) jelenti a program "lelkét". Ha a memória megtelik, tisztítsunk CLEAR-rel! A programot RUN-nal indítsuk!

Ötletek

Átalakítás (1 K, 2 K)
A programok tízes számrendszerben megadott pozitív egész számokat alakítanak át 2...9 alapú számrendszerekbe. (A programnak különösen azok a szülők vehetik jó hasznát, akiknek gyermeke az ötödik, osztály környékén ilyen jellegű feladatokat kap. A számítógépet persze csak a házi feladat megoldásának ellenőrzésére szabad használni!)
A 2 K-s változatot tekintjük alapnak, mert ez mondható elegendően "komfortosnak":

1 REM *** ATALAKITAS ***
3 GOTO 10
5 CLS
6 PRINT AT 0,9;"* ADATHIBA *"
8 PAUSE 90
10 CLS
20 PRINT "AZ ATALAKITANDO SZAM: ";
30 INPUT X
40 PRINT X
50 IF X<>INT X OR X<0 THEN GOTO 5
70 PRINT AT 2,0;"AZ UJ SZAMRENDSZER ALAPJA: ";
80 INPUT N
90 PRINT N
100 IF N>9 OR N<0 OR N<>INT N THEN GOTO 5
110 PRINT AT 6,0;"* AZ ATALAKITOTT SZAM: *"
115 PRINT
120 IF X<N THEN PRINT X
125 IF X<N THEN STOP
130 DIM K(25)
140 LET J=1
150 LET Q=X/N
160 LET K(J)=X-N*INT Q
170 IF INT Q>0 THEN LET X=INT Q
173 IF INT Q>0 THEN LET J=J+1
175 IF INT Q>0 THEN GOTO 150
180 FOR I=J TO 1 STEP -1
190 PRINT K(I);
200 NEXT I
210 STOP

Ez a program épphogy nem fér be az 1 K-s gépbe. A redukált, 1 K-s változat és az alapprogram közötti különbség jól jellemzi a más esetekben is alkalmazható "gyömöszölési" fogásokat:

1 REM * ATALAKITAS *
3 GOTO 10
6 PRINT AT 0,9;"ADATHIBA"
8 PAUSE 90
10 CLS
20 PRINT "SZAM:";
30 INPUT X
40 PRINT X
50 IF X<>INT X OR X<0 THEN GOTO 5
70 PRINT AT 2,0;"ALAP:";
80 INPUT N
90 PRINT N
100 IF N>9 OR N<0 OR N<>INT N THEN GOTO 5
110 PRINT AT 6,0;"* AZ ATALAKITOTT SZAM: *"
115 PRINT
120 IF X<N THEN PRINT X
125 IF X<N THEN STOP
130 DIM K(25)
140 LET J=1
150 LET Q=X/N
160 LET K(J)=X-N*INT Q
170 IF INT Q>0 THEN LET X=INT Q
173 IF INT Q>0 THEN LET J=J+1
175 IF INT Q>0 THEN GOTO 150
180 FOR I=J TO 1 STEP -1
190 PRINT K(I);
200 NEXT I
210 STOP

Mindkét programban az 50-es sor "védi ki" a negatív vagy tört számok bevitelét. A programlista beírásánál az INT és az AT az F kurzor segítségével írható be, a STEP a SHIFT-tel az E betűn, az OR pedig a W betűn. A program használata nem igényel különösebb magyarázatot. Működéséről csak annyit érdemes megjegyezni, hogy a számrendszerváltásnak ez csak az egyik lehetséges változata; számos, más elven működő program írható.

Ötletek

A reakcióidő mérése (1 K)
A program arra alkalmas, hogy mérje azt az időt, amely a képernyőn valamilyen betű (szám) megjelenése és az annak megfelelő "gomb" megnyomása között telik el. Segítségével a betűk (számok) elrendezése jól elsajátítható. Hasznos segédeszköz lehet a gépírás tanulásakor is. Játéknak sem utolsó: hamar kiderül pl., hogy nem is olyan könnyű egy másodpercen belül (helyesen!) válaszolni a gépnek.

5 PRINT AT 15,8;"* REAKCIOIDO *"
8 RAND
10 LET R=INT (35*RND)
15 FOR I=1 TO 15*R
20 NEXT I
25 LET S$=CHR$ (R+28)
27 SCROLL
30 PRINT TAB 18,5;S$
32 SCROLL
35 FOR I=1 TO 1000
40 LET X$=INKEY$
45 IF X$="" THEN GOTO 55
50 IF X$=S$ THEN GOTO 60
55 NEXT I
60 PRINT I*.055;" S"
65 GOTO 8
70 SAVE "REAKCIOIDO"
75 RUN

A programlista beírásánál az RND, CHR$, TAB, INKEY$ az F kurzorral írható be. A listában a felvétel azonosító ("REAKCIOIDO") címének utolsó karaktere a felvétel után inverzzé válik. A program a már említett véletlenszám-generátor (RND) segítségével egész számokat állít elő (INT a 10. sorban). Ezeket betűk, ill. számok kódjainak tekintjük (ezeket a kódokat megtalálhatjuk a gépkönyv végén). Az így előállított kódoknak megfelelő jelet íratjuk ki a képernyőre (25-ös, 27-es, 30-as, 32-es sorok). A 35-ös sorban levő I változó nagysága a megjelenítés óta eltelt időre jellemző. Ezt felhasználva számítja és írja ki az időt másodpercben a 60-as sor. Ha a programot más géptípusra írjuk át, az itt szereplő változónak szinte biztosan más értéke lesz (TIMEX 2 K-nál pl. 0,08 körül). Ennek értékét legcélszerűbb kísérletileg meghatározni. Például úgy, hogy hagyjuk lejátszódni a 35-ös sorban az ezer ciklust, és a kiírt időt összehasonlítjuk a stopperrel mért értékkel. Tény, hogy a kiírt érték nem igazán pontos.
Ha a programot fel akarjuk venni a magnó indítása után, induljunk GOTO 70-nel.

Ötletek

Mozgó reklámfeliratok (1 K, 2 K)
A programok arra alkalmasak, hogy korlátozott terjedelmű, tetszés szerinti karakterekből felépített szöveget gyakorlatilag korlátlan ideig a sorokat váltogatva megjelenítsenek a képernyőn. (A program tulajdonságai egyébként lehetővé teszik, hogy más területeken is felhasználjuk. Tanulhatunk vele évszámokat vagy szavakat is: a vég nélküli ismétlés segít ebben.) Kitűnő reklámtevékenységre fogható gépünk, ha a tv-készüléket a kirakatban helyezzük el, és a vásárlókat érdeklő szövegeket futtatunk rajta. A megoldás éjjel-nappal vonzó kirakatképet biztosít.
Az 1 K-s változat egyszerű, mintájára könnyen készíthetünk más szövegű programokat. Igen sok bajunk lehet viszont az 1 K-s memóriába való bezsúfolással. (A 2 K-s TIMEX sokkal szabadabb variáció lehetőségeket biztosít.)

10 DIM A$(8,12)
15 LET A$(1)="* SINCLAIR *"
20 LET A$(2)="CEG TERMEKEI"
25 LET A$(3)="- ZX 81 1K - "
30 LET A$(5)="64 K TAROLO"
35 LET A$(4)="16 K TAROLO"
40 LET A$(7)="ZX PRINTER"
45 LET A$(6)="-TIMEX 1000-"
50 LET A$(8)="> KAPHATOK <"
60 FOR I=1 TO 8
65 SCROLL
70 PRINT AT 21,1.5*I;A$(I)
75 SCROLL
80 FOR J=1 TO 100
85 NEXT J
90 NEXT I
95 GOTO 60

A program működésére nézve már a 10-es sorban lefoglalt hely is meghatározható jellegű lehet (természetesen ezt tovább befolyásolja a többi programrész). Mintapéldánkban a DIM-mel lefoglalt hely 8 darab 12 hely (karakter) hosszúságú "szónak" elég. Ezt az utasítást kell először megváltoztatnunk, ha más szöveget (ill. más jeleket) akarunk beírni. Tartsuk szem előtt, hogy "minden összefügg", tehát gondosan mérlegelve, próbálgatva alakítsuk ki a végső listát. A késznek látszó programot ne csak egyszer futtassuk, hanem tartósabban hagyjuk működni. (Hamar rájövünk, hogy miért.)
A példaprogram 15...50-es sorában látszik, hogy az utasítások tetszés szerinti sorrendben írhatók be, a gép mégis a zárójelben levő számoknak megfelelő sorrendben írja ki őket. Ezt a 60-as sor határozza meg, ahol 1-től esetünkben 8-ig kerülnek elő a változók, amelyeket a 70-es sor ír ki. Legalább egyszeri futtatás után a 10...50-es sorokat akár ki is törölhetjük, mivel a gép ezeket megjegyezte. Próbáljuk ki: pl. írjuk be:

PRINT A$ (7)

és NEW LINE (ENTER), (A beírás során a PRINT "felmászik" a lista alá, jelezve, hogy alaposan tele van a memória.) Ha a programban más szöveg van, elképzelhető, hogy ilyen külön parancsra már nem lesz hely a memóriában. Ekkor bizony nem célszerű CLEAR-t alkalmazni. (Miért?) A LET utasítások törlése után persze nem indulhatunk RUN-nal, csak GOTO-val (miért?).
A 80-as és a 90-es sor kizárólag az egyes sorok kiírása között eltelt időt hivatott megnövelni. A sor végén álló szám változtatásával szaporábbá vagy lassúbbá tehetjük a kiírást. Természetesen lehetne itt is a PAUSE utasítással dolgozni (próbáljuk meg!), de ekkor a megjelend kép "nyugtalanabb" lenne.

Ötletek

Könyvtárrendezés (16 K)
Egy könyvtárat többféle elv szerint lehet rendezni. Saját könyvtárammal sohasem az a bajom, hogy nincsen ábécérendbe téve, hanem az, hogy nem tudom, hol van a könyv, amit keresek. Ilyen problémán igyekszik e program segíteni: a könyv írója és címe után beírjuk a témáját és a helyet, ahol található. A keresés során a gép az író, a cím, a téma vagy a könyv helye szerint kikeresi a feltételeknek megfelelő tételeket. A program - megfelelő módosítás után - természetesen sok más területen is felhasználható.

5 REM * KONYVTAR *
10 GOTO 1000
20 LET J=8
30 LET C=10
40 LET Z=100
50 LET S=1
60 DIM A$(Z,J)
70 DIM B$(Z,C)
80 DIM C$(Z,4)
90 DIM D$(Z,4)
100 GOTO 1000
110 CLS
120 PRINT TAB 8;"* MODOSITAS *"
130 PRINT ,,"HANYADIK TETELT KELL MODOSITANI?"
140 INPUT H
150 IF H>S-1 THEN LET H=S-1
160 LET I=H
170 PRINT ,,I;".";A$(I);" ";B$(I);" ";C$(I);" ";D$(I)
180 PRINT ,,"AZ UJ TETEL:"
190 PRINT,,I;".";
200 INPUT A$(I)
210 PRINT A$(I);" ";
220 INPUT B$(I)
230 PRINT B$(I);" ";
240 INPUT C$(I)
250 PRINT C$(I);" ";
260 INPUT D$(I)
270 PRINT D$(I)
280 PRINT ,,"  LEHETOSEGEKHEZ BARMIT"
290 PAUSE 80
300 IF INKEY$="" THEN GOTO 300
305 FAST
310 IF INKEY$<>"" THEN GOTO 1000
320 CLS
330 PRINT AT 2,7;"* ATTEKINTES *"
340 PRINT ,,,,"METTOL MEDDIG LISTAZZAK?"
350 INPUT E
355 INPUT U
360 IF E>S-1 THEN LET E=S-1
370 IF U>S-1 THEN LET U=S-1
380 CLS
390 PRINT ,,,,"A TETELEK ";E;"-TOL ";U;".-IG:"
400 FOR I=E TO U
405 PRINT
408 SCROLL
410 PRINT I;".";A$(I);" ";B$(I);" ";C$(I);" ";D$(I)
415 SCROLL
420 NEXT I
425 SCROLL
430 PRINT "    LEHETOSEGEKHEZ BARMIT"
440 IF INKEY$="" THEN GOTO 440
445 FAST
450 IF INKEY$<>"" THEN GOTO 1000
460 CLS
470 PRINT AT 3,3;"* UJ ADATOK BEIRASA *"
480 PRINT ,,"   (A LEHETOSEGEKHEZ 0)"
490 PRINT AT 20,3;"IRO"; AT 20,J+4;"CIM"; AT 20,J+C+5;"TEMA"; AT 20,J+C+10;"HELY"
500 FOR I=S TO Z
503 SCROLL
505 PRINT
508 SCROLL
510 PRINT I;".";
520 INPUT A$(I)
530 PRINT A$(I);" ";
535 IF CODE A$(I)=28 THEN FAST
540 IF CODE A$(I)=28 THEN GOTO 1000
550 INPUT B$(I)
560 PRINT B$(I);" ";
570 INPUT C$(I)
580 PRINT C$(I);" ";
590 INPUT D$(I)
600 PRINT D$(I)
605 SCROLL
610 LET S=I+1
620 NEXT I
630 CLS
640 PRINT TAB 5;"* FELVETEL MAGNORA *"
650 PRINT ,,"MI LEGYEN A FELVETEL CIME?"
670 INPUT Q$
680 PRINT ,,"A FELVETEL CIME: ";Q$
690 PRINT ,,"INDULJON A MAGNO, MAJD BARMIT"
700 IF INKEY$="" THEN GOTO 700
710 SAVE Q$
720 GOTO 1000
730 CLS
740 PRINT AT 3,9;"* KERESES *"
750 PRINT AT 5,8;"MIT KERESSEK?"
760 PRINT AT 7,0;"IROT=I CIMET=C TEMAT=T HELYET=H"
770 INPUT K$
780 IF K$="I" THEN LET P=J
790 IF K$="C" THEN LET P=C
800 IF K$="T" OR K$="H" THEN LET P=4
810 DIM X$(P)
820 PRINT AT 9,1;"MELYIK TETEL SZERINT?"
830 INPUT X$
840 CLS
850 PRINT AT 2,2;"KERESES > ";X$;" < SZERINT"
860 PRINT
865 SCROLL
870 LET Q=0
880 FOR I=1 TO S
890 IF A$(I)=X$ OR B$(I)=X$ OR C$(I)=X$ OR D$(I)=X$ THEN GOSUB 915
900 NEXT I
905 SCROLL
910 GOTO 950
915 PRINT
916 SCROLL
920 PRINT I;".";A$(I)," ";B$(I);" ";C$(I);" ";D$(I)
930 LET Q=1
940 RETURN
945 SCROLL
950 IF Q=0 THEN PRINT ;"   ! ILYEN TETEL NINCS !"
960 PAUSE 80
965 SCROLL
967 PRINT
968 SCROLL
970 PRINT "  LEHETOSEGEKHEZ BARMI "
980 IF INKEY$="" THEN GOTO 980
985 FAST
990 IF INKEY$<>"" THEN GOTO 1000
1000 CLS
1005 SLOW
1010 PRINT TAB 2;"* LEHETOSEGEK *"
1020 PRINT AT 3,1;"UJ ADATOK BEIRASA (B)"
1030 PRINT AT 5,1;"ATTEKINTES (A)"
1040 PRINT AT 7,1;"MODOSITAS (M)"
1050 PRINT AT 9,1;"KERESES (K)"
1060 PRINT AT 11,1;"FELVETEL MAGNORA (F)"
1070 IF INKEY$="" THEN GOTO 1070
1080 IF INKEY$="B" THEN GOTO 460
1090 IF INKEY$="K" THEN GOTO 730
1100 IF INKEY$="A" THEN GOTO 320
1110 IF INKEY$="M" THEN GOTO 110
1120 IF INKEY$="F" THEN GOTO 630
1130 GOTO 1000

A program beírásakor különösen ügyeljünk a kiírási elrendezést meghatározó jelekre: helytelen használatuk sok zavart okozhat a program futásakor. A 300-as, 310-es, 440-es stb. sorokban az INKEY$ (F üzemmód és B) után az idézőjelek között nincsen köz! (Az INKEY$="" feltétel állítja meg a program futását, mindaddig, amíg valamilyen jelet meg nem nyomunk.)

A program használata: Ha a programot pontosan írtuk be, 100 db (40-es sor) könyv adatait írhatjuk be úgy, hogy az író rovat 8 betűhely hosszú lehet (20-as sor), a cím 10 (30-as sor), a téma- és a helyadatok pedig négy-négy betűhely hosszúak lehetnek. Ezek az adatok a J, C, Z változókkal, ill. a 60...90-es sorokbeli DIM utasításokkal vannak meghatározva. Ezek megváltoztatásával módosíthatjuk a tételek számát, ill. a rovatok hosszát. Ezeket a változtatásokat alapvetően korlátozza a rendelkezésünkre álló memória. 64 K-s memóriabővítővel már egészen komoly könyvtárat is rendezhetünk - módosított programmal.
Ha a beírt programot először indítjuk RUN-nal vagy GOTO 1-gyel, 2-es hibaüzenetet kapunk, ha pl. az áttekintést meg akarjuk valósítani. Úgy kell tehát indulnunk, hogy a gép tudomásul vegye a DIM-mel meghatározott változók létét. Ez pl. GOTO 20-szal lehetséges. Ha ezután az ATTEKINTES üzemmódban megpróbálunk kiíratni (bármilyen számokat írunk be), a gép 0-tól 0-ig fog listázni, és 3-as hibaüzenettel leáll. Mindez érthető, mert a gépbe nem írtunk adatokat - nulla adat van benne -, és az ilyen index érvénytelen.
Ha már írtunk be tételeket, mindig GOTO 1-gyel induljunk!
A GOTO 20 után tehát az új tételek beírásával kell kezdenünk. A tételeket addig írhatjuk be, amíg az IRO rovatba nullát nem írunk. Ekkor a gép visszatér a lehetőségekhez. Ha valamelyik rovatot üresen akarjuk hagyni, elég, ha NEW LINE-t (ENTER-t) ütünk be.
Módosításra a lehetőségekből M betűvel indulhatunk. A gép a beírt sorszámú tételt megjeleníti. Ezután a teljes tételt újra kell írnunk; a módosítandót a gép felülírja.
Amikor a programot - bármilyen üzemmódból - a lehetőségekhez küldjük, a gép kissé hosszú ideig "gondolkodik"; legyünk türelmesek. A lehetőségekből A-val kilistáztathatjuk a gépben levő összes tételt vagy csak egy részét.
A keresésnél meg kell határoznunk, hogy a gép melyik rovatban keressen, majd azt kell beírnunk, hogy mit keressen meg, ill. melyik tételt írja majd ki. Vigyázat! A keresendő betű- (szám-) sorozatot pontosan kell beírnunk, tehát ügyelnünk kell pl. a szóközökre is. Ha könyvcímnél csak a szóközt tévesztjük el, a gép szerint: ILYEN TETEL NINCS. A keresés lehetőséget ad, hogy gyors listát kapjunk arról, hogy pl. könyveink közül melyek az ifjúságiak vagy melyek vannak az egyik vagy másik polcon, a szekrényben stb. Természetesen így kaphatjuk meg azt is, hogy egy írótól milyen könyveink vannak stb. A TEMA és a HELY rovatokba természetesen célszerű rövidítéseket kell beírni: pl. IREG lehet az ifjúsági regény, MUSZ a műszaki könyv stb. A hely lehet pl. SZEK vagy a polcok sorszámai: POLl, POL2 stb. Ezek alapján nyilvánvaló, hogy a rovatok és rövidítések megváltoztatásával a programot bármilyen más adatanyag rendezésére, azaz irányított keresésre is használhatjuk.
A lehetőségektől F betűvel juthatunk el a kényelmes magnófelvételt biztosító programrészhez, amely letiltáskor a lehetőségek megjelenítésével indítja a programot.

Ötletek

Rendezés betűrendbe (1 K, 2 K, 16 K)
A programok arra alkalmasak, hogy tetszés szerinti sorrendben beírt szavakat ábécérendbe tegyék. (A szavak jelsorozatok is lehetnek.) Tekintsük alapprogramnak a 2 K-s változatot:

5 REM * BETUREND *
10 FAST
20 DIM N$(50,8)
30 PRINT AT 20,0;"A SZAVAK:"
40 LET Z=0
50 LET Z=Z+1
60 INPUT N$(Z)
70 SCROLL
80 PRINT N$(Z)
90 IF CODE N$(Z)=28 THEN GOTO 110
100 GOTO 50
110 LET C=0
120 FOR J=1 TO Z-2
130 IF N$(J) <=N$(J+1) THEN GOTO 180
140 LET Y$=N$(J)
150 LET N$(J)=N$(J+1)
160 LET N$(J+1)=Y$
170 LET C=1
180 NEXT J
190 IF C=1 THEN GOTO 110
195 CLS
200 SLOW
210 PRINT AT 20,0;"A SZAVAK ABC RENDBEN:"
220 FOR K=1 TO Z-1
230 SCROLL
240 PRINT K;". ";N$(K)
250 NEXT K
260 STOP

Ez 50 db 8 betűhely hosszúságú szó (20-as sor) beírására és rendezésére alkalmas. A 10-es sor utasítása meggyorsítja a beírást, de ha a tv-képernyője túl nyugtalanul viselkedik, ez a sor elhagyható. A CODE a függvény (F) üzemmódban írható be az I betűvel. (A 90-es sor azt jelenti, hogy nulla beírásával a program a 110-es sortól folytatódik, megkezdődik a rendezés.)
Ebből a programból van "rövidítve" az 1 K-s változat:

20 DIM N$(25,6)
40 LET Z=0
50 LET Z=Z+1
60 INPUT N$(Z)
70 SCROLL
80 PRINT N$(Z)
90 IF CODE N$(Z)=28 THEN GOTO 110
100 GOTO 50
110 LET C=0
120 FOR J=1 TO Z-2
130 IF N$(J) <=N$(J+1) THEN GOTO 180
140 LET Y$=N$(J)
150 LET N$(J)=N$(J+1)
160 LET N$(J+1)=Y$
170 LET C=1
180 NEXT J
190 IF C=1 THEN GOTO 110
200 SLOW
220 FOR K=1 TO Z-1
230 SCROLL
240 PRINT K;".";N$(K)
250 NEXT K

A legfájóbb az a kényszerű rövidítés, hogy itt csak 25 db, 6 karakternyi szó írható be, ezek közül is legalább a 25.-nek nullának kell lennie. A memória zsúfoltságára jellemző, hogy a 240-es sorban a pont után szóközt is hagyunk, a program néhány szóval a 24. előtt 4-es üzenettel leáll. (Próbáljuk ki!) A programok lelke a 160...180-as sorokból álló szakasz. A rendezési feladatokat megoldó programokban szinte mindig találkozunk hasonló sorokkal. (Érdemes végiggondolni a működését.) A 200-as sortól kezdve a rendezett szavak kiíratása folyik.
A rendezési feladatok elvégzése után a program szalagra menthető ki, onnan visszajátszva és GOTO 210-zel, ill. GOTO 200-zal indulva, kiírathatók az előző sorok.

A 16 K-s változat már kissé más elvek szerint készült, kihasználva a nagyobb memória adta lehetőségeket. Kifejezetten alkalmas arra, hogy az előző rendezés adatait megőrizze, ill. arra, hogy a beírt szavakat időnként rendezve folytassuk a szavak beírását. A programlistát mindenképpen érdemes tanulmányozni, mert tartalmaz érdekes megoldásokat:

5 REM * ABC-REND *
10 CLS
12 SLOW
13 PRINT TAB 8;"* LEHETOSEGEK *"
15 PRINT AT 2,3;"R - A REGI SZAVAK KIIRASA";AT 4,3;"T - TORLES, UJ SZAVAK BEIRASA";AT 6,3;"F - FELVETEL MAGNORA"
20 PRINT AT 8,0;"A BEIRAS KOZBEN:";AT 10,3;"*   - VISSZA A LEHETOSEGEKHEZ"; 12,0;"NEW LINE - A RENDEZES KEZDETE"
30 PRINT AT 2,3;" ";AT 4,3;" ";AT 6,3;" "
35 PRINT AT 10,3;" ";AT 12,0;"       "
40 IF INKEY$="R" OR INKEY$="T" OR INKEY$="F" THEN GOTO 50
45 GOTO 15
50 IF INKEY$="T" THEN GOTO 65
55 IF INKEY$="F" THEN GOTO 920
60 GOTO 140
65 LET D=300
70 LET H=20
75 DIM A$(D,H)
80 PRINT AT 17,0;"> UJ ADAG < ";D;" DARAB, ";H;" HOSSZU"
85 FOR I=1 TO D
90 INPUT A$(I)
95 SCROLL
100 PRINT I;". ";A$(I)
105 IF CODE A$(I)=23 THEN FAST
110 IF CODE A$(I)=23 THEN GOTO 10
120 IF CODE A$(I)=0 THEN GOSUB 140
125 NEXT I
130 GOSUB 155
140 LET N=I-1
145 SCROLL
150 GOSUB 700
155 SCROLL
160 PRINT "* ABC-RENDBEN *"
165 SCROLL
170 GOSUB 210
180 LET I=I-1
185 SCROLL
190 PRINT "* FOLYTATAS *"
195 SCROLL
200 GOTO 125
210 FOR J=N TO 1 STEP -1
215 SCROLL
220 PRINT N-J+1;". ";A$(J)
230 NEXT J
240 SCROLL
250 RETURN
700 LET A$=INT (LN N/LN 2)
710 LET F=2**A-1
720 LET F=INT (F/2)
730 IF F=0 THEN RETURN
740 LET D=N-F
750 LET B=1
760 LET A=B
770 LET E=A+F
780 IF A$(A)<A$(E) THEN GOTO 820
790 LET B=B+1
800 IF B>D THEN GOTO 720
810 GOTO 760
820 LET X$=A$(A)
830 LET A$(A)=A$(E)
840 LET A$(E)=X$
850 LET A=A-F
860 IF A<1 THEN GOTO 790
870 GOTO 770
880 RETURN
890 CLS
895 FOR N=1 TO 60
900 PRINT AT 11,10;"MAGNO ALLJ"
905 PRINT AT 11,10;"          "
910 NEXT N
915 GOTO 10
920 CLS
925 PRINT ,,,,"A FELVETEL CIME?"
930 INPUT F$
935 PRINT AT 2,17;F$;AT 4,0;"INDULJON A MAGNO, MAJD           NYOMJON MEG BARMIT"
940 IF INKEY$="" THEN GOTO 940
945 SAVE F$
950 GOTO 890

A lista beírása után indulhatunk GOTO 1-gyel, de utána írjunk be szavakat. A gép ugyanis "végigírja" a 20 betűhelyet, akkor is, ha nincs ott semmi. Erre kell várnunk. A "*" beírása után is kb. 15 s-t kell várnunk a lehetőségekre. A 30-as, 35-ös és 905-ös sorba beírhatjuk az előző sorok betűit inverzben. Ezeket GRAPHICS üzemmódban (G) tehetjük meg. A program kissé lassú: a szóhossz (H) csökkentésével gyorsíthatjuk.
A lehetőségektől R, T vagy F betűvel indulva tartsuk egy ideig ujjunkat a betűn. A túl rövid ideig tartó megnyomás hatástalan! TIMEX típusú gépeknél a NEW LINE helyett természetesen ENTER írandó. (A program működése szempontjából lényegtelen.)

Ötletek

Számrendezés (1 K, 2 K)
A program tetszés szerinti valós számok nagyság szerinti rendezésére alkalmas. Az egyszerűség kedvéért csak a 2 K-s változatot közöljük: az előzők alapján (ábécérend) egészen egyszerű lesz 1 K-ra átalakítani. Ha a képernyő nyugtalan, a 10-es sor elhagyható!

5 REM * SZAMREND *
10 FAST
20 DIM N(100)
30 PRINT AT 20,0;"A SZAMOK:"
40 LET Z=0
50 LET Z=Z+1
60 INPUT N(Z)
70 SCROLL
80 PRINT N(Z)
90 IF N(Z)=0 THEN GOTO 110
100 GOTO 50
110 LET C=0
120 FOR J=1 TO Z-2
130 IF N(J)<=N(J+1) THEN GOTO 180
140 LET Y=N(J)
150 LET N(J)=N(J+1)
160 LET N(J+1)=Y
170 LET C=1
180 NEXT J
185 IF C=1 THEN GOTO 110
190 CLS
195 SLOW
200 PRINT AT 20,0;"A SZAMOK NOVEKVO SORRENDBEN: "
220 FOR K=1 TO Z-1
230 SCROLL
240 PRINT K;". ",N(K)
250 NEXT K
260 STOP

Ötletek

Szótár (16 K)
A program alkalmas idegen-magyar szópárok beírására, páronkénti ismétlésére, visszakérdezésére, módosítására és magnófelvételére.

5 REM * SZOTAR *
10 GOTO 2000
20 LET Z=100
25 LET H=15
30 DIM M$(Z,H)
35 DIM A$(Z,H)
40 LET X=0
50 CLS
55 PRINT "* UJ SZAVAK BEIRASA *"
60 PRINT AT 3,1;"IDEGEN SZO, MAJD A JELENTESE"
65 PRINT AT 5,1;"0-VAL VISSZA A LEHETOSEGEKHEZ"
68 PAUSE 250
70 FOR I=X+1 TO Z
80 CLS
90 PRINT AT 20,0;I;" SZOPAR:"
100 INPUT A$(I)
110 IF CODE A$(I)=28 THEN GOTO 700
120 PRINT A$(I),
130 INPUT M$(I)
140 IF CODE M$(I)=28 THEN GOTO 700
150 PRINT M$(I)
190 IF I=Z THEN GOTO 2900
195 LET X=I
200 NEXT I
500 CLS
510 PRINT AT 1,4;"* VISSZAKERDEZES *"
520 PRINT AT 3,0;"AZ IDEGEN SZO MEGJELENESE UTAN       IRJA BE A JELENTESET"
525 PRINT ,,"     HELYTELEN VALASZ UTAN       ISMETELHET (I), VAGY NEM (N)     0-VAL VISSZA A LEHETOSEGEKHEZ"
528 PAUSE 400
530 LET J=1
540 SCROLL
541 SLOW
542 PRINT
543 SCROLL
545 IF J>X THEN PRINT "NINCS TOBB SZOPAR"
550 IF J>X THEN PAUSE 80
555 IF J>X THEN GOTO 700
557 SCROLL
560 PRINT AT 20,0;A$(J)
565 SCROLL
567 DIM V$(H)
570 INPUT V$
575 IF CODE V$(J)=28 THEN GOTO 700
580 IF M$(J)=V$ THEN GOTO 650
585 PRINT
590 PRINT AT 20,3;"ROSSZ. HELYESEN: ";M$(J)
595 SCROLL
600 PRINT AT 20,3;"I, N VAGY 0 ?"
603 SCROLL
605 PRINT
610 IF INKEY$<>"I" AND INKEY$<>"N" AND INKEY$<>"0" THEN GOTO 610
615 FAST
620 IF INKEY$="N" THEN LET J=J+1
630 IF INKEY$="N" OR INKEY$="I" THEN GOTO 540
640 IF INKEY$="0" THEN GOTO 700
650 PRINT
655 SLOW
657 SCROLL
660 PRINT "    >HELYES<"
670 PRINT
675 SCROLL
680 LET J=J+1
690 GOTO 540
700 FAST
710 GOTO 2000
800 CLS
805 PRINT AT 0,4;"* FELVETEL MAGNORA *"
810 PRINT AT 3,1;"NI LEGYEN A FELVETEL CIME?"
820 INPUT W$
830 PRINT AT 6,2;"A FELVETEL CIME: ";W$
840 PRINT AT 8,0;"INDULJON A MAGNO, MAJD NL(ENT)"
845 IF INKEY$="" THEN GOTO 845
848 IF CODE INKEY$<>118 THEN GOTO 848
850 IF CODE INKEY$<>118 THEN GOTO 850
860 SAVE W$
870 GOTO 2000
1000 CLS
1005 PRINT AT 2,7;"* ATTEKINTES *"
1010 PRINT AT 4,1;"HANYADIK SZOPARTOL HANYADIKIG?"
1020 INPUT E
1025 IF E>X THEN LET E=X
1030 INPUT U
1040 IF U>X THEN LET U=X
1050 PRINT " SZOPAROK ";E;"-TOL ";U;"-IG:"
1060 PASUE 250
1110 FOR K=R TO U
1115 CLS
1120 PRINT AT 3,3;K;". SZOPAR:"
1130 PRINT AT 11,0;A$(K),M$(K)
1140 PAUSE 350
1150 NEXT K
1165 PRINT AT 20,3;"LEHETOSEGEKHEZ BARMI"
1170 IF INKEY$="" THEN GOTO 1170
1190 IF INKEY$<>"" THEN GOTO 2000
1200 GOTO 2000
1300 CLS
1310 PRINT AT 1,7;"* MODOSITAS *"
1320 PRINT AT 4,2;"HANYADIK SZOPART MODOSITSUK?"
1330 INPUT K
1340 PRINT AT 6,0;K;". SZOPAR:"
1350 PRINT ,,A$(K),M$(K)
1360 PRINT AT 10,0;"IRJA BE AZ UJ SZOPART"
1370 INPUT A$(K)
1380 PRINT AT 12,0;A$(K),
1390 INPUT M$(K)
1400 PRINT M$(K)
1420 PRINT AT 18,3;"LEHETOSEGEKHEZ BARMI"
1450 IF INKEY$="" THEN GOTO 1450
2000 CLS
2100 SLOW
2110 PRINT AT 0,7;"* LEHETOSEGEK *"
2115 PRINT AT 3,0;"- UJ SZAVAK BEIRASA (B)"
2120 PRINT ,,"  (MEG ";Z-X;" DB ";M;" BETUHELY         TERJEDELMU SZO IRHATO BE)"
2125 PRINT ,,"- A SZAVAK ATTEKINTESE (A)"
2130 PRINT ,,"- VISSZAKERDEZES (V)"
2140 PRINT ,,"- MODOSITAS (M)"
2150 PRINT ,,"- FELVETEL MAGNORA (F)"
2160 IF INKEY$="" THEN GOTO 2160
2210 IF INKEY$="B" THEN GOTO 50
2220 IF INKEY$="V" THEN GOTO 500
2230 IF INKEY$="M" THEN GOTO 1300
2240 IF INKEY$="F" THEN GOTO 800
2250 IF INKEY$="A" THEN GOTO 1000
2260 GOTO 2160
2900 CLS
2910 PRINT AT 10,1;" TOBB SZOPAR NEM IRHATO BE"
2920 PAUSE 200
3000 GOTO 2000

A program beírása nem jár nehézségekkel: az eddigiekhez képest nincs benne újdonság. A programban található megoldások azonban igen tanulságosak lehetnek: a mikrogépekre jellemző kommunikációs megoldásokkal találkozhatunk.
A beírás után induljunk GOTO 20-szal. (Ezt sokszor iniciálásnak is nevezik - így törölhetjük a már beírt szókészletet.) A megjelenő szövegnek megfelelően beírhatjuk a szópárokat. Ha nullát írunk be, megjelennek a lehetőségek, ill. az, hogy még hány szó írható be. Innen A betűvel áttekinthetjük az eddig beírt szavakat. Ha már szavakat tartalmazó programot töltünk be magnóról, ezzel az üzemmóddal kiírathatjuk a készletet. A programnak ezt a működését tanulási (vagy tanítási) üzemmódnak is tekinthetjük, mivel egy-egy szópár meghatározott ideig látható, tanulható. A tanítás intenzitását az 1140-es sorban található PAUSE utáni számmal befolyásolhatjuk.
A lehetőségektől V-vel indulva, a gép visszakérdezi a szavakat. (A megjelenő szöveg tájékoztat a működésről.) A megjelenő idegen szó után írjuk be a vélt helyes megfelelőt. Ha a válasz helyes, ez a felirat jelenik meg, majd a következő idegen szó látható. Helytelen válasz után a gép kiírja a helyes választ is, és lehetőséget ad a választásra: I-vel ismételhetjük a szópárt. Ha N-et írunk be, a gép nem ismétel, hanem a következő idegen szót jeleníti meg. A lehetőségekhez nulla beírásával térhetünk vissza. A visszatérés előtt - különösen, ha már sok szópárt írtunk be - a gép kissé sokáig "gondolkodik". Legyünk türelmesek!
Az M betűvel juthatunk a módosítási lehetőséghez. Ekkor a beírt sorszámú szópárt felülírhatjuk, majd bármelyik betű megnyomásával ismét visszajuthatunk a lehetőségekhez.
Innen az F betű útján kezdhetjük meg a magnófelvételt. Ez a lehetőség különösen azért előnyös, mert a programot szavakkal feltöltve "elraktározhatjuk", majd a programot megállítva és GOTO 20-szal kiürítve, újabb szókészletet írhatunk bele. Ezt folytatva igen sok szópárt tehetünk tanulásra-visszakérdezésre alkalmassá. Később bármelyiket elővéve, ellenőrizhetjük tudásunkat.

Ötletek

Függvényábrázolás (1 K, 2 K)
A programok a legkülönbözőbb függvények (hatvány-, exponenciális, trigonometrikus stb. függvények) ábrázolására alkalmas.
Először nézzük az 1 K-s változatot:

5 REM * FUGGVENYEK *
10 PRINT "  F(X)=";
15 INPUT F$
20 PRINT F$
25 FOR X=0 TO 63
35 PLOT 0,(X AND X<44)
40 PLOT X,22
45 NEXT X
50 FOR X=0 TO 2*PI STEP .1
55 LET Y=ABS (VAL F$+22)
60 PLOT X*10,Y
65 NEXT X

       

A közölt 1 K-s és 2 K-s változat között alapvető különbség az, hogy míg az utóbbi egyszerre három függvényt képes ábrázolni, az 1 K-s változat csak egyet.
A 2 K-s változat:

5 REM * FUGGVENYEK *
10 PRINT " F(X)=";
20 INPUT F$
30 IF F$="" THEN GOTO 20
40 PRINT F$;TAB 1;"G(X)=";
50 INPUT G$
60 IF G$="" THEN GOTO 50
70 PRINT G$;TAB 1;"H(X)=";
80 INPUT H$
90 IF H$="" THEN GOTO 80
100 PRINT H$;AT 21,2;"LEPES=";
110 INPUT L
120 PRINT L
130 SLOW
140 FOR X=0 TO 63
150 PLOT 0,(X AND X<44)
160 PLOT X,22
170 NEXT X
180 FOR X=0 TO 2*PI STEP L
190 LET Y=ABS (VAL F$+22)
200 PLOT X*10,Y
210 LET Y=ABS (VAL G$+22)
220 PLOT X*10,Y
230 LET Y=ABS (VAL H$+22)
240 PLOT X*10,Y
260 NEXT X
270 STOP

A rajzolási utasításon kívül a programra jellemző a VAL függvény (F üzemmódban J betű) alkalmazása. Ez a függvény a ZX81 és a vele rokon gépek (pl. Spectrum) jellemzője. Segítségével a gép kiszámolja a VAL után álló, "szóként" bevihető függvény értékeit. Ez a lehetőség igen sok programfeladat megvalósításánál hasznosítható. A VAL függvény igen értékes tulajdonsága kis gépünknek, sokkal drágább gépeken sem találhatjuk meg.
Mindkét programváltozat beírása egyszerű. Szemnek kellemes függvényképek kialakítása azonban néha hosszabb, izgalmas játékot jelent. A próbálkozások során azonban jól megismerhetjük a függvények tulajdonságait és a gép igényeit rajzoltatáskor. Nem nehéz kitalálni, hogy példáinkon látható függvényekben szereplő szorzások csak az arányos kép kialakítása érdekében kerültek a függvényekbe. Ahhoz, hogy a gép megfelelően hajtsa végre a PLOT utasítást, valamilyen formában meg kell adnunk neki, milyen lépésekben számítsa ki a megrajzolandó függvény értékeit. Ez a lépés az 1 K-s változatnál az 50-es sorban a STEP után álló szám. (A 2 K-s változatban a gép megkérdezi, milyen lépést választunk.) Ha tehát ez a lépés 0,1, akkor a gép a következő értékeknél számol, ill. később rajzol: 0, 0,1, 0,2, 0,3, ... egészen a PI értékének kétszereséig. (Ez a felső határ a trigonometrikus függvényeknél indokolt: más függvényekhez célszerű más határt választani.)
Ha a görbepontokat túl ritkán rajzolta a gép, finomabb osztásra, azaz kisebb lépésekre van szükségünk. Nem kell feltétlenül a program elejéről indulnunk, hanem a STEP utáni számot kisebbre javítva elindulhatunk pl. GOTO 20-szal. (A 2 K-s változatnál pl. GOTO 100-zal). Így nem kell az esetleg igen bonyolult függvény képletét ismét beírnunk. Ha - a gyorsabb működés kedvéért - megelégszünk 1 nagyságú lépéssel, a STEP-et is elhagyhatjuk, a gép automatikusan 1-es lépésközzel számol.
A programmal oly sokféle függvény rajzolható, hogy a játéklehetőség szinte végtelen.

Ötletek

Bioritmus (16 K)
A program alkalmas arra, hogy harmincnapos időtartamra kiszámolja és megrajzolja a szellemi (S), fizikai (F) és érzelmi (E) képességek változását képviselő görbéket. A bioritmus létezésének és számítási módszereinek elemzése, értékelése nem lehet könyvünk feladata. Ilyen témájú program azért került mégis bele a könyvbe, mert a biortimus-készítés - érdemi tartalmától függetlenül - külföldön és hazánkban egyaránt meglehetősen népszerű. A program készítésekor a legelterjedtebbnek tűnő számítási alapelvekből indultunk ki, ezeket tekintjük alapfeltételeknek:

Az így készült görbék egyébként "kézi" számítással is ellenőrizhetők: a számítás elve viszonylag egyszerű. Az elkészült bioritmusképek értékeléséről - érdemi állásfoglalás helyett - annyit érdemes megjegyezni, hogy az "óvatosabb iskolák" csak a tengelyen való metszéspontoknak tulajdonítanak jelentőséget; ezek közül is csak a kettős, ill. hármas metszéspontoknak. Az ilyen pontok kedvezőtlen időszakokat jelentenének.

5 REM * BIORITMUS *
10 GOTO 180
45 DIM H$(12,5)
50 DIM D(12)
55 DIM K(12)
60 PRINT "ALLANDO ADATOK"
70 PRINT ,,TAB 1;"H$"; 12;"D";TAB 21;"K"
75 FOR I=1 TO 12
85 PRINT AT 20,0;"H$="
90 INPUT H$(I)
95 PRINT AT I+3,1;H$(I);AT 20,0;"D= "
100 INPUT D(I)
105 PRINT AT I+3,12;D(I);AT 20,0;"K= "
110 INPUT K(I)
115 PRINT AT I+3,21;K(I);AT 20,0;"    "
120 NEXT I
180 CLS
190 LET A=2
195 LET M=15
200 LET B=2
210 PRINT "A SZULETES DATUMA:"
220 PRINT AT 2,3;"EV:     "
222 INPUT ES
224 PRINT AT 2,7;ES
230 PRINT AT 3,3;"HONAP: "
232 INPUT HS
234 PRINT AT 3,10;HS
240 PRINT AT 4,3;"NAP:   "
242 INPUT NS
244 PRINT AT 4,8;NS
250 PRINT AT 6,0;"A MEGRAJZOLT IDOSZAK ELSO NAPJA:"
270 PRINT AT 8,3;"EV:     "
272 INPUT EK
274 PRINT AT 8,7;EK
280 PRINT AT 9,3;"HONAP: "
282 INPUT HK
284 PRINT AT 9,10;HK
290 PRINT AT 10,3;"NAP:   "
292 INPUT NK
294 PRINT AT 10,8;NK
300 LET I=(EK-ES)*365.25+(K(HK)-K(HS))+(NK-NS)
310 LET FK=2*PI*(I/23-INT (I/23))
320 LET RK=2*PI*(I/28-INT (I/28))
330 LET SK=2*PI*(I/33-INT (I/33))
340 LET FF=2*PI/23
350 LET RF=2*PI/28
360 LET SF=2*PI/33
370 REM - ALAPSKALA -
380 CLS
390 SLOW
400 PRINT AT 0,12;"BIORITMUS"
420 PRINT AT 2,0;"SZULETESI DATUM: ";ES;" ";H$(HS);NS
440 LET N=NK
450 LET X=2
460 FOR C=0 TO 30 STEP 3
470 PRINT AT 19,C;N
480 LET N=N+3
500 IF N<=D(HK) THEN GOTO 520
510 LET N=N-D(HK)
520 PLOT X,6
530 LET X=X+6
540 NEXT C
550 PRINT AT 21,4;"KEZDET: ";EK;" ";H$(HK);NK
580 REM - GORBEK RAJZOLASA -
590 FOR X=0 TO 30 STEP .5
595 PLOT 2+X*2,21
600 LET FG=INT (M*SIN (FF*X+FK))
610 LET G=2+X*2
620 PLOT G,FG+22
630 LET EG=INT (M*SIN (RF*X+RK)+.5)
640 PLOT G,EG+22
650 LET SG=INT (M*SIN (SF*X+SK))
660 PLOT G,SG+22
670 IF X=0 THEN GOSUB 790
680 NEXT X
690 IF E=1 THEN GOTO 730
695 REM - A GORBEK JELEI -
700 LET EP=INT ((EG-22)/A+.5)
710 PRINT AT EP,31;"E"
730 IF L=2 THEN GOTO 770
740 LET IP=INT ((SG-22)/A+.5)
760 PRINT AT IP,31;;"S"
770 GOTO 930
790 LET PP=INT ((FG-22)/A+.5)
800 PRINT AT PP,0;"F"
810 LET EP=INT ((EG-22)/A+.5)
820 IF EP=PP THEN LET E=5
830 IF EP=PP THEN GOTO 870
850 IF EP<>PP THEN LET E=1
860 PRINT AT EP,0;"*"
870 LET IP=INT ((SG-22)/A+.5)
880 IF IP=PP OR IP=EP THEN LET L=7
885 IF IP=PP OR IP=EP THEN GOTO 920
890 IF IP<>PP OR IP<>EP THEN LET L=2
900 PRINT AT IP,0;"S"
920 RETURN
930 STOP

A program beírása nem jelent sok problémát. A REM-ek elhagyhatók, csak azért vannak a listában, hogy könnyebben követhessük a program működését. Hasonló célja van a legtöbb változó jelölésének is. A program azonban még akkor sem működőképes, ha a teljes listát beírtuk. Olyan adatokat kell ugyanis a memóriába juttatnunk, amelyeket a gép minden számítás során felhasznál. Ennek érdekében induljunk pl. GOTO 20-szal (nem baj, hogy ilyen sor nincs, a gép megtalálja a következőt). Ettől kezdve a gép kérdéseire válaszolva a programlista utáni képet kell megvalósítanunk a képernyőn, tehát a képernyő alján megjelenő változónak (H$, D, ill. K) megfelelő állandó adatként szereplő számokat kell beírnunk. (Ügyeljünk a hibátlan munkára!)

Ezek után gépünk már képes a számolásra, de az indítás előtt ismételten ellenőrizhetjük a bevitt adatok helyességét. Ennek érdekében töröljük a 90-es, 100-as és 110-es sort, és írjunk be ideiglenesen egy új sort:

130 STOP

Ezután GOTO 60-nal indulva viszontláthatjuk a beírt állandó adatokat, ill. a képernyő bal alsó sarkában a soron következő változót. Az ideiglenes STOP-ra csak azért van szükség, hogy a gép még ne kezdje meg a bioritmus számítását. Ha a 60-as sort megelőző sorszámok valamelyikével indulunk, kezdhetjük elölről az adatbevitelt. Ezért a biztonság kedvéért - ha az adatok hibátlanok - töröljük ki azokat is. (Célszerű már most szalagra venni a programot.)
Az állandó adatokat másképp is bevihetjük. Már a program beírásakor elhagyhatjuk a 45...120-as sorokat. Ezután parancsként - tehát sorszám nélkül - írjuk be a 45-ös, 50-es, 55-ös sor utasításait (mindegyik után 0/0 üzenetet kapunk). A reklámprogramnál leírtakhoz hasonlóan egyenként írjuk be:

LET H$ (1) = "JAN"  és NEW LINE (ENTER),
LET H$ (2) = "FEBR" és NEW LINE (ENTER) stb.

Hasonlóan

LET D(1) = 31 ... stb.,

valamint ugyanígy járjunk el a K(1) ... stb. változóval is. Bevihetjük tehát az adatokat, de ha a 45...120-as sorokat elhagyjuk, az ellenőrzés nehézkes, mivel egyenként kell kiíratnunk az adatokat:

PRINT H$ (1) és NEW LINE (ENTER)

stb., a másik két változónál is.
Ha bármelyik módszerrel bevitt adatok közül hibásat találunk, egyszerűen javíthatunk. Például ha a

PRINT K(10) és NEW LINE (ENTER)

parancsra nem 273-at kapunk, akkor írjuk be:

LET K(10) = 273 és NEW LINE (ENTER)

Ismételt kiíratásra már helyes értéket kapunk.
Ezeket a módszereket mindenképpen érdemes megtanulnunk, mert a ZX81 (TIMEX) típusú gépeknél nem alkalmazhatjuk adatbevitelre pl. a DATA-READ utasításokat, tehát más BASIC nyelvű programok adaptálásánál kénytelenek leszünk az előbbi technikát alkalmazni. Mint ezt más programoknál már láthattuk, az így bevitt programok is nehézség nélkül rögzíthetők kazettán. Rögzítés után azonban hamar kideríthetjük, mi az ilyen adatok nagy ellensége: a RUN és a CLEAR, valamint az adott változóra vonatkoztatott DIM. (Próbáljuk ki hatásukat!)
Mindehhez képest a bioritmus-készítés már szinte magától megy. A gép kérdésére adjuk meg a kért adatokat: a hónap nevét is számmal írjuk be. A gép az alapskála (háromnaponkénti jelzésekkel) és az időpontok megjelenítése után megrajzolja a görbéket, ill. neveik kezdőbetűjével látja el őket, amelyek alapján azonosíthatjuk. Ha ezek a betűk kedvezőtlenül helyezkednek el, a gép a görbék jobb oldalán helyezi el valamelyiket. Ennek megvalósítása a program egyik legérdekesebb része.
A hibátlan programot célszerű véglegesen úgy rögzíteni, hogy a programba két kiegészítő sort írunk, pl.

940 SAVE "BIORITMUS"
950 GOTO 180

Így a felvételt GOTO 940, majd NEW LINE (ENTER) művelettel indíthatjuk. A felvétel után a program automatikusan indul. Ha az így felvett programot visszatöltjük, a program szintén azonnal indul. (Helyes működésre csak akkor számíthatunk, ha már bevittük az állandó adatokat.)

Ötletek

Versenyek (1 K, 2 K, 16 K)
A program a grafikai jelekből kialakított figurák versenyszerű mozgását jeleníti meg a képernyőn. A 2 K-s és 16 K-s programokban fogadni is lehet a "befutóra". Az 1 K-s változatnál már a beíráskor is tapasztalhatjuk, hogy a memória ugyancsak tele van. Ha a gép beírás vagy listázás közben 4-es hibát jelez, a CLEAR paranccsal (K kurzorral X betu, majd NEW LINE) segíthetünk a bajon. Egészen megtelt memóriánál így sem tudjuk a listázott programmal teleírni a képernyőt.

1 RAND
2 CLS
3 LET C=0
4 LET X=0
5 LET V=0
6 LET B=0
8 PRINT "NYERJEN: ";
10 INPUT H
11 PRINT H
14 GOSUB (20+3*INT (RND*4))
15 IF X<27 AND C<27 AND V<27 AND B<27 THEN GOTO 14
16 PRINT AT 5,0;X;AT 8,0;C;AT 11,0;V;AT 14,0;B
17 IF (X=7 AND H=1) OR (C=27 AND H=2) OR (V=27 AND H=3) OR (B=27 AND H=4) THEN PRINT AT 17,10;"NYERT"
18 IF INKEY$="" THEN GOTO 18
19 RUN
20 PRINT AT 5,X;""""
21 LET X=X+1
22 RETURN
23 PRINT AT 8,C;""""
24 LET C=C+1
25 RETURN
26 PRINT AT 11,V;""""
27 LET V=V+1
28 RETURN
29 PRINT AT 14,B;""""
30 LET B=B+1
31 RETURN

Az INT, RND, AT és INKEY$ függvényeket F kurzorral (egyszerre SHIFT és NEW LINE), valamint az R, T, C és B betűkkel vihetjük be. A feltételekhez tartozó AND, OR és THEN szavakat (mivel pirosak!) a piros SHIFT-tel és a 2, W, ill. a 3 együttes lenyomásával írhatjuk be. A 20-as, 23-as, 26-os és 29-es sorokban az idézőjel beírása után térjünk át GRAPHICS üzemmódba (G kurzor: SHIFT és 9-es), majd SHIFT és Q, 1, SHIFT és W használatával beírhatjuk a csiga "testét". Vigyázat! Az ezután következő két idézőjelet úgy írhatjuk be, hogy normál üzemmódba visszatérve (G kurzornál SHIFT és egyszerre 9) L kurzorral a SHIFT-et és Q-t egyszerre nyomjuk meg. (Próbáljuk az idézőjeleket külön-külön beírni!) Ez az idézőjel helyettesíti a csiga szarvait...
A programban - rövidsége ellenére - számos jellegzetes megoldást találhatunk. A lottószám-előállító programban is szereplő RND által generált véletlenszámok 20-szal, 23-mal, 26-tal vagy 29-cel lesznek egyenlők és így a GOSUB utasításnak megfelelően e sorok (szubrutinok) valamelyikében folytatódik a program, majd a legelső rá következő RETURN hatására a 15-ös sorba jut. A program tehát a 14-es sorban keletkező véletlenszámok segítségével "lökdösi" előre a csigákat.
A programban viszonylag sok a feltétel:

A 2 K-s változat lehetővé teszi, hogy a kedvenc csigára fogadjunk is: 50 egységet (pl. zsetont) kapunk, amelyből tetszés szerinti adagokban költekezhetünk. Ha a fogadott csiga fut be, a tét ötszörösét nyerjük, amelyet a gép a maradékhoz ad, és a következő futamban ebből fogadhatunk. További különbség az előző programhoz képest, hogy a csigák induláskor (fogadáskor) már a startnál állnak (60-as sor). A program - kis szünet után - mindaddig újraindul, amíg a zsetonok el nem fogynak, ekkor a gép 9/145 jelzéssel leáll (RUN-nal újraindítható).

5 REM * CSIGAVERSENY *
10 RAND
15 LET S=50
20 LET C=0
30 LET V=0
40 LET B=0
50 LET X=0
60 PRINT AT 3,0;"""";AT 6,0;"""";AT 9,0;"""";AT 12,0;""""
70 PRINT AT 15,2;"MENNYI A TET ";S;" ZSETONBOL?"
75 INPUT A
77 IF A>3 THEN GOTO 75
80 PRINT AT 0,4;"MELYIKRE TESZ?"
85 INPUT H
90 PRINT AT 15,2;"A TET ";A;" A ";H;". CSIGARA.    "
100 PRINT AT 0,4;"A VERSENY ELINDULT"
110 GOSUB (200+10*INT (RND*4))
120 IF X<27 AND C<27 AND V<27 AND B<27 THEN GOTO 110
125 LET S=S-A
130 IF (X=27 AND H=1) OR (C=27 AND H=2) OR (V=27 AND H=3) OR (B=27 AND H=4) THEN GOSUB 300
135 PAUSE 400
140 CLS
145 IF S<=0 THEN STOP
150 GOTO 20
200 PRINT AT 3,X;""""
205 LET X=X+1
207 RETURN
210 PRINT AT 6,C;""""
212 LET C=C+1
215 RETURN
220 PRINT AT 9,V;""""
222 LET V=V+1
225 RETURN
230 PRINT AT 12,B;""""
232 LET B=B+1
235 RETURN
300 PRINT AT 0,4"     * NYERT *         "
305 LET S=S+5*A
310 PAUSE 200
350 RETURN

A 16 K-s változat még többet nyújt. A memóriába az is könnyen belefér, hogy a csigák hátramaradó hosszú nyúlványát letöröljük (202-es, 211-es, 221-es és 231-es sor). Így szarv nélküli, különböző hosszúságú figurákkal dolgozunk: legyenek ezek hernyók. Így a figurák valamivel hosszabb utat futnak be a képernyőn. A gép ebben a változatban külön jelzi, ha minden zseton elfogyott, de a program újra indul. A programokat BREAK-kel vagy adatkérés közben STOP-pal állíthatjuk meg (D üzenet).

1 REM * HERNYOVERSENY *
5 RAND
10 LET S=50
15 LET A=0
20 LET C=0
30 LET V=0
40 LET B=0
50 LET X=0
60 PRINT AT 3,0;"";AT 6,0;"";AT 9,0;"";AT 12,0;""
65 PRINT AT 15,2;"AZ OSSZES ZSETON: ";S;AT 17,0;"MI A TET?   "
70 INPUT A
72 PRINT AT 17,0;"A TET:     ",A
75 IF A>S THEN GOTO 65
78 LET S=S-A
80 PRINT AT 19,0;"MELYIK HERNYORA FOGAD?"
83 INPUT H
84 IF H<1 OR H>4 THEN GOTO 80
85 PRINT AT 19,0;"A VALASZTOTT HERNYO RAJTSZAMA:  ";H
87 PRINT AT 15,2;"                               "
90 PRINT AT 1,8;"INTITAS S-EL"
95 IF INKEY$<>"S" THEN GOTO 95
100 PRINT AT 1,4;"A VERSENY ELINDULT"
110 GOSUB (200+10*INT (RND*4))
120 IF X<30 AND C<30 AND V<30 AND B<30 THEN GOTO 110
125 IF X=30 OR C=30 OR B=30 OR V=30 THEN GOSUB 400
130 IF (X=30 AND H=1) OR (C=30 AND H=2) OR (V=30 AND H=3) OR (B=30 AND H=4) THEN GOSUB 450
140 CLS
145 IF S<=0 THEN PRINT "   MINDEN ZSETONT ELVESZTETT,      DE UJABB LEHETOSEGET KAP."
150 PAUSE 300
155 CLS
165 IF S<=0 THEN GOTO 10
170 GOTO 20
200 PRINT AT 3,X;""
202 IF X>=4 THEN PRINT AT 3,X-4;" "
205 LET X=X+1
207 RETURN
210 PRINT AT 6,C;""
211 IF X>=3 THEN PRINT AT 6,C-3;" "
212 LET C=C+1
215 RETURN
220 PRINT AT 9,V;""
221 IF V>=2 THEN PRINT AT 9,V-2;" "
222 LET V=V+1
225 RETURN
230 PRINT AT 12,B;""
231 IF B>=5 THEN PRINT AT 12,B-5;" "
232 LET B=B+1
235 RETURN
400 IF X=30 THEN PRINT AT 21,2;"* BEERKEZETT AZ 1. HERNYO"
410 IF C=30 THEN PRINT AT 21,2;"* BEERKEZETT A 2. HERNYO"
420 IF V=30 THEN PRINT AT 21,2;"* BEERKEZETT AZ 3. HERNYO"
430 IF B=30 THEN PRINT AT 21,2;"* BEERKEZETT A 4. HERNYO"
440 PAUSE 200
445 RETURN
450 PRINT AT 1,2;"* A TET OTSZOROSET NYERTE *"
470 LET S=S+5*A
490 PAUSE 150
500 RETURN

Ötletek

Öröknaptár
A program segítségével kiszámolható, hogy valamely dátum a hét melyik napjára esett vagy fog esni.

1 PRINT "* OROKNAPTAR *"
5 GOTO 60
10 DIM N$(7,9)
20 FOR I=1 TO 7
30 INPUT N$(I)
40 PRINT N$(I)
50 NEXT I
60 INPUT E
70 INPUT H
80 INPUT N
90 PRINT ,,E;TAB 5;H; TAB 8;N;
100 LET Q=N
110 LET Q=Q+31*(H-1)
120 LET Q=Q+365*E
130 IF H>2 THEN LET Q=Q-INT (.4*H+2.3)
140 IF H>2 THEN GOTO 160
150 LET E=E-1
160 LET Q=Q+INT (E/4)
170 LET R=INT (E/100)+1
180 LET Q=Q-INT (.75*R)
190 LET Q=Q-(INT (Q/7)*7)
200 PRINT TAB 11;N$(Q+1)
210 GOTO 60
220 SAVE "OROKNAPTAR"
230 GOTO 1

SZOMBAT
VASARNAP
HETFO
KEDD
SZERDA
CSUTORTOK
PENTEK

A programlista beírásánál nem lesz nehézségünk: az INT és TAB függvények F kurzorral (a SHIFT-tel egyszerre NEW LINE) írhatók be az R és P betűvel. A 220-as sor utolsó betűje (R) a sikeres magnófelvétel után jelenik inverzen jelenik meg..
A beírás után induljunk GOTO 10-zel és a gép kérdésére írjuk be a hét napjait a programlista alatt látható sorrendben. A 7. nap után rögtön beírhatjuk az első dátum évszámát, hónapját (számmal) és napját. Legfeljebb három dátumot sikerül így beírnunk, ezután a gép nem fogad be több adatot. A beírt - de be nem fogadott - számokat SHIFT és a nulla mező együttes lenyomásával töröljük ki, majd írjuk be a STOP-ot (SHIFT és A betű) és NEW LINE (ENTER). A program D/60 üzenettel leáll. Induljunk GOTO 1-gyel. Ismét írhatunk be dátumokat - legfeljebb azonban négyet. Ezután a leírt jelenség játszódik le: járjunk el az előbbi módon. A program viszonylag gyors leállása nem lehet zavaró, mert egy alkalommal aligha szükséges több dátum vizsgálata.
Hasonlóan a bioritmus-rajzoló programhoz, az állandó adatok bevitelére szolgáló sorokat (10...50-es) használatuk után elhagyhatjuk, törölhetjük. Ekkor természetesen az 5-ös sor is feleslegessé válik. Ha először csak a 30-as sort töröljük, GOTO 20-szal indulva kiírathatjuk a hét napjait (ezután a gép ismét dátumbeírást vár).
A jól működő programot célszerű úgy magnóra venni, hogy GOTO 220-at írunk be, majd elindítva a magnófelvételt, NEW LINE (ENTER). A felvétel befejeztekor a program automatikusan GOTO 1-gyel indul. Ugyanez történik akkor is, ha magnóról töltjük vissza a programot. Ez az utolsó két sor természetesen elhagyható, de akkor az automatikus indulás lehetősége elvész.

Bár a gép bármilyen dátumhoz kiszámolja a hét valamelyik napját, ne hagyjuk figyelmen kívül, hogy a mainak megfelelő időszámítási rendszert csak kb. a XVIII. század óta használják. Ilyen típusú öröknaptárakkal (vagy hasonló célú táblázatokkal) tehát nem sok értelme van az ilyen kérdések megválaszolásának: Milyen napra esett i.e. 44. március 15? XIII. Gergely pápa (XVI. század) reformja után a különböző országok ui. egészen eltérő időpontokban módosították a saját időszámításukat. Sőt, volt amikor kettős időszámítás volt...

A program alapfeladatán kívül arra is igen alkalmas, hogy tanulmányozzuk rajta, hogyan végezhető a géppel valamilyen több lépésből álló számítás.

Ötletek

Függvények közelítése egyenessel (lineáris regresszió) (1 K)
Sokszor találkozhatunk olyan függvényekkel, amelyeknek pontosan leírt matematikai alakját nem ismerjük, de a független és a függő változó összetartozó értékpárjait ismerjük. Ilyen értékpárokhoz legkézenfekvőbb módon mérések útján jutunk: mérjük valamilyen fizikai mennyiség nagyságát, miközben egy másik jellemzőt változtatunk (pl. a kályhától távolodva helyenként megmérjük a levegő hőmérsékletét). A méréseket elvégezve természetes az igény, hogy megállapítsuk, milyen összefüggés ad kapcsolatot a kétféle érték között (pl. a hőmérséklet és a távolság között).
A probléma annyira általános, hogy a tudomány - elsősorban a matematika - igen sok módszert dolgozott ki a mérési pontokkal jellemzett függvény többé-kevésbé pontos leírására. Ha a sokszor bonyolult számításokat elvégeztük, a fizikai mennyiségek értékeit olyan tartományokban is jól meg tudjuk becsülni, amelyekben nincs - és talán nem is lehet! - mérési adatunk. A közelítés pontosságával szembeni követelményeket mindig az a feladat szabja meg, amelyben a közelítésként kiszámított függvényt felhasználjuk majd. Például kevéssé igényes, becslés jellegű feladatokhoz nem érdemes tökéletességre törekedni, hiszen a közelítő függvény kiszámítására fordított munka aránytalanul nagy lenne. Minél nagyobb pontossággal akarjuk megközelíteni az ismeretlen függvényt, annál bonyolultabb, időigényesebb számításokat kell végeznünk.
A számítógépek megjelenése ugrásszerű fejlődéssel járt ezen a területen, mivel különösen alkalmasak az ilyen jellegű számítások elvégzésére. A közelítés pontosságának esetünkben a kis memória szab határt. Megalkudván a lehetőségekkel, ilyen programot láthatunk:

2 LET U=0
3 LET W=0
4 LET T=0
5 LET Z=0
6 LET R=0
7 PRINT "X","Y"
8 INPUT X
9 PRINT X,
10 IF X=999 THEN GOTO 25
11 INPUT Y
12 PRINT Y
15 IF Y=999 THEN GOTO 25
17 LET R=R+1
18 LET T=T+X
19 LET Z=Z+Y
20 LET W=W+X*Y
21 LET U=U+X*X
22 GOTO 8
25 LET A=(R*W-T*Z)/(R*U-T*T)
26 LET B=(Z-A*T)/R
28 IF B<0 THEN GOTO 31
29 PRINT TAB 2,,"Y= ";A;"*X +";B
30 STOP
31 PRINT TAB 2,,"Y= ";A;"*X ";B

A gépbe értékpárokat írhatunk (mindegyik pár megfelel pl. egy mérési pontnak), majd 999 beírása után a gép kiírja annak az egyenesnek az egyenletét, amely a legjobban közelíti a pontokat ideálisan leíró függvényt. Eredményként tehát egy y = ax + b alakú egyenletet kapunk. A mérési pontok "szórásától" függően a közelítés igen pontatlan is lehet. Ha a pontok egy egyenesre esnek, a kapott egyenlet tökéletes közelítést jelent. Az ábrán látható, hogy pontot közelítettünk egyenessel, amely meglehetősen pontatlan megoldást ad. Ha az így kapott egyenletet további számításokra használjuk, érdemes a számokat kerekíteni. Hogy a pontosság elegendő-e, mindig az adott esetre kell eldönteni.
Általában ötnél sokkal több pont vihető be, az adatok karakterszámától (a számok hosszától) függően. 1 K-nál nagyobb gép esetén a memória aligha jelent korlátot. A program beírása és működése egyébként egyszerű, viszonylag könnyen követhető.
A második változat az előznél korlátozottabb számítási képességű, viszont kitűnően alkalmas arra, hogy a probléma felvetését és megoldását vizuálisan jobban szemléltesse.

2 LET U=0
3 LET W=0
4 LET T=0
5 LET Z=0
6 LET R=0
7 INPUT X
8 IF X=99 THEN GOTO 20
9 INPUT Y
10 IF Y=99 THEN GOTO 20
12 PRINT AT 21-Y,X;"+"
13 LET R=R+1
14 LET T=T+X
15 LET Z=Z+Y
16 LET W=W+X*Y
17 LET U=U+X*X
18 GOTO 7
20 LET A=(R*W/T*Z)/(R*U-T*T)
21 LET B=(Z-A*T)/R
23 LET A$="A*X+B"
25 IF B<0 THEN PRINT AT 0,0;"Y= ";A;"*X ";B
26 PRINT AT 0,0;"Y= ";A;"*X +";B
30 FOR X=0 TO 31
32 PLOT 2*X,2*VAL A$
34 NEXT X

A mérési pontok koordinátájaként

0 <= X <=31 és 0 <= Y <= 21

írható be. Ez azért van, mert a gép számára a képernyő vízszintesen 32 oszlopra (0...31-es sorszámúak), függőlegesen 22 sorra (0...21-es sorszámúak) van osztva. A felosztások kiindulópontja a bal felső sarokban van. Ez a felosztás a PRINT utasítással kapcsolatban érvényes, így csak azok a pontok ábrázolhatók (12. programsor), amelyek belül vannak a megfelelő tartományon.
A helyzetet kellemesen bonyolíthatja az, hogy a rajzolás - PLOT utasítás - számára a képernyő vízszintesen 64, függőelegesen 44 képelemre (pixel) van osztva. Itt a koordináta-rendszer középpontja a bal alsó sarokban van. Tehát a PLOT utasítás (32-es programsor) is nagyon korlátozva van. A korlátokat egyébként a program futása (a rajzolás) során bőségesen tapasztalhatjuk. A program beírása az előzőhöz képest nem jelent sok nehézséget. Az indulás után az előzőekhez hasonlóan beírhatjuk az értékpárokat. Az így beírt "mérési pontokat" a megjelenő pluszjelek szemléltetik. Néhány pont bevitele után 99-cel indíthatjuk a számítást, ill. a rajzolást: a gép kiírja a közelítő egyenes egyenletét, majd meg is rajzolja. A rajz kis csalódást okoz, mert a várt egyenes helyett általában cikk-cakkot kapunk. Sajnos ez nem a program hibája, hanem a gép tulajdonsága: a ferde egyenesek közel sem folytonosak. A helyzet néha még akkor is rosszabbodik, ha a 30-as sorban a 31 után pl. STEP .5-öt írunk.
A program további hátránya, hogy mivel a memória nagyon tele van, a gép a B hibákon kívül gyakran 4-es hibával áll le. A program azonban nemcsak arra jó, hogy az egyenessel való közelítést bemutassa, hanem arra is, hogy a gép tulajdonságait szemléltesse. Jól követhető pl. a VAL függvény szerepe és használata (előnyéről a függvényábrázoló programnál is olvashatunk). Szemléletes ezenkívül a PRINT és a PLOT utasítások egymáshoz való viszonya is. A program használatával (és átírásával) begyakorolhatjuk a gép koordináta-rendszereit.

Ötletek

Memória-ellenorzés (1 K)
A memóriaellenőrző program példáján keresztül a gépi kódú rutinok alkalmazását mutatjuk be. Valóban, a gépikódú program a szokásos módon nem is írható a gépbe. Ha ilyen (assembly) listát akarunk előállítani, ahhoz különleges segédprogramok kellenek, amelyekkel e könyvben nem kívánunk foglalkozni. Az ún. gépi kódban való programozás olyan szintet jelent, amelyhez feltétlenül ismerni kell a gépben lejátszódó folyamatokat és a programozási lépések mélyebb összefüggéseit. (Kiváló szakirodalom ehhez a Bóc: BASIC és ASSEMBLER Programozási módszerek ZX81 személyi számítógépen, Műszaki Könyvkiadó, Budapest, 1985.) Ízelítőül mégis érdemes megpróbálkoznunk egy rövid gépi kódú program elemi módszerekkel való bevitelével és futtatásával. A következő program arra alkalmas, hogy segítségével tájékozódjunk, mennyi hely van még a memóriában. Használatát a gyakorlatban jobban elsajátíthatjuk, tehát írjuk először a gépbe a következő BASIC programlistát:

10 REM ...............
20 FOR I=16514 TO 16527
30 INPUT K
40 POKE I,K
50 PRINT I, PEEK I
60 NEXT I

A programok RUN-nal indítva, a gép inputkérésére írjuk be a következő táblázat jobb oldali oszlopának első számát. A gép erre kiírja a 16514-et és a 33-at. Az ismételt inputkérésekre beírhatjuk a jobb oldali számoszlopot. Ha nem hibáztunk, a gép 060 jelzéssel megáll. A listát "előhívva" meglepetéssel tapasztalhatjuk a 10-es sor átalakulását.

16514
16515
16516
16517
16518
16519
16520
16521
16522
16523
16524
16525
16526
16527

33
0
0
57
237
91
28
64
167
237
82
68
77
201

(Megjegyezzük, hogy az előbbi módszer a gépi kódú programok bevitelének egyik lehetséges, meglehetősen általános módszere.)
Ha a 10-es sorban megjelenő jeleket kikeressük a gépkönyv kódtáblázatából, visszakapjuk a gépbe írt számoszlop tagjait. Ha a 30-as és 40-es sorokat töröljük, a programot elindítva ismét megkaphatjuk a két számoszlopot. A 10-es sorban megmaradt utolsó jel - egy pont, - csak emlék: el is hagyhattuk volna, de akár több pontot is írhattunk volna ebbe a sorba. Ha a 30-as és 40-es sorokat kitöröljük, írjuk be parancsként:

PRINT USR 16514 és NEW LINE

A képernyőn (ZX81-nél memóriabővítő nélkül) 754 jelenik meg. Ha most a 10-es sorba még egy pontot írunk be, az előbbi szám eggyel csökken, ha még egy pontot, még eggyel csökken stb. A megjelenő szám a memóriában még szabad helyet jellemzi. A listából további sorokat törölhetünk, előbbi parancsot megismételve a kiírt szám egyre nagyobb. Ha már csak a 10-es sor marad, ezt akár felvehetjük magnóra is.

Ötletek

Jelkészlet (1 K)
A következő program a gépnek a számunkra csak olvasható memóriarészéből (ROM) kiolvassa a jelkészletet és felnagyítva a képernyőre "írja". Minden sor mellett megjelenik a memóriarekesz címe is.

A második változat a nyomtatóra viszi mindezt, sőt még a memóriarekeszben levő számértéket is kiírja.

Ötletek

  • Hasonlítsuk össze a megjelenő jeleket a gépkönyv karaktertáblázatával!
  • A 10-es sorban levő második számjegy helyett írjunk be nagyobbat! Milyen jeleket kapunk?
  • A két programot összehasonlítva készítsünk olyan programot, amely a képernyőre is kiírja a memóriarekeszek számértékét!

Óra (1 K)
A program digitális órát valósít meg a képernyő közepén. A program elindítása után az 0, P vagy M betűmező megnyomásával a program megáll: beírható a kívánt kiinduló óra, perc, ill. másodperc. Az óra kétségkívül nem igazán pontos, de a ciklusok (FOR-NEXT) és az INKEY$ függvény használatát jól szemlélteti. A 80-as sorban a TO után szereplő szám a ZX81-nél 55...60 között van. A pontos értéket minden esetben kísérleti úton célszerű meghatározni.

5 REM * ORA *
10 FOR O=0 TO 23
20 FOR P=0 TO 59
30 FOR M=0 TO 59 STEP 2
40 IF INKEY$="O" THEN INPUT O
50 IF INKEY$="P" THEN INPUT P
60 IF INKEY$="M" THEN INPUT M
70 PRINT AT 10,10;O;":";P;":";M;" "
80 FOR I=0 TO 55
90 NEXT I
100 NEXT M
110 NEXT P
120 NEXT O
130 GOTO 10

Ötletek

Holdraszállás (16 K)
A programban egy meglehetősen összetett lépésekből kialakított játékot írtunk le. A programlista beírása után S-sel indíthatjuk el a játékot.

A holdraszállást utánzó játékprogram listája

A bal felső sarokban megjelenő holdkompot a fel- és lefelé mutató nyilakkal (6-os és 7-es mezők) irányíthatjuk. A bosszankodás mellett hamar rájövünk, hogy a program igen jól imitálja a holdkompot mozgató rakétahajtóművek működését. A kezdetben lassan gyorsuló holdkomp később már az ellenkező irányú "rakétahajtóművel" is alig fékezhető, így nem is olyan könnyű a holdraszállás. Különösen sok bajunk lehet az anyaűrhajóhoz való visszatéréssel. A "poénok" elárulása helyett elégedjünk meg annyival, hogy a hibátlanul beírt programmal a visszatérés is lehetséges. A program futtatása során egyébként éppen azokkal a modellezett problémákkal kerülünk szembe, amelyekkel annak idején Amstrongék valóban találkoztak, de ok szerencsére megoldották azokat.
A beírásnál kicsit ügyeskednünk kell, de mivel már óriási gyakorlatunk van, nagy baj nem lehet... Talán nem látszik, de a 3068-as, a 6040-es és a 7030-as sorokban inverz (sötét hátterű) idézőjelek vannak. Ezek jelképezik az űrhajó ablakait. A program vége biztosítja a visszatöltés után az automatikus indítást.

Ötletek

Vissza