1.2.10. Doplnenie príkazu PRINT a INPUT
Príkaz PRINT sme použili v doterajších príkladoch dosť často, takže iste už viete ako pracuje a ako sa používa. Výrazy, ktorých hodnoty sú tlačené, sa nazývajú položky príkazu PRINT a sú oddelené čiarkami alebo bodkočiarkami, ktoré sa nazývajú oddeľovače príkazu PRINT. V príkaze PRINT môžeme použiť špeciálne položky, ktoré nám uľahčujú prácu pri výpisoch.
Často chceme výpis na obrazovku umiestniť na presne stanovené miesto. Na to používame položku AT, ktorá ma tvar:
AT riadok,stĺpec
Týmto sa nastaví ukazovateľ pre výpis na špecifikované miesto obrazovky (riadok, stĺpec). Riadky sa číslujú od 0 (horný) po 21, stĺpce od 0 (vľavo) po 31. Príkazom
PRINT AT 12,16; "*"
vypíšeme znak "*" do stredu obrazovky. Pretože položky AT je chápaná ako položka v príkaze PRINT, musí byť od ostatných položiek oddelená povoleným oddeľovačom (v našom prípade bodkočiarka). Ukazovateľ pre výpis sa nastaví analogicky, ako sme uvádzali už na začiatku príručky.
Funkcia SCREEN$ je opačná k činnosti položky AT. Zisťuje, aký znak je v určitej pozícii na obrazovke zobrazený. Používa číslo riadku a stĺpca rovnako ako položka AT, ale sú uzatvorené v zátvorkách:
SCREEN$ (riadok,stĺpca)
Príkaze
PRINT SCREEN$ (12,16)
znovu vypíše hviezdičku, ktorá bola tlačená v predchádzajúcom príklade. Znaky sa berú normálne ako znaky, medzery sa vracajú ako medzery. Ak sú na zadanom mieste obrazovky užívateľské znaky, grafické symboly a grafy, funkcia má hodnotu nulového (prázdneho) reťazca.
Ďalšou položkou je TAB v tvare:
TAB (stĺpec)
Táto položka tlačí medzery na presun do špecifikovaného stĺpca riadku, riadok sa nemení. Pamätajte, že počítač redukuje číslo stĺpca modulo 32 (delí 32 a berie zvyšok), tak napr. TAB 33 znamená to isté ako TAB 1.
Skúste odštartovať program:
10 FOR n=0 TO 20
20 PRINT TAB 8*n;n;
30 NEXT n
Program ukazuje, že čísla pre TAB sú redukované modulo 32 (do úvahy sa berú zvyšky po delení číslom 32). Aby bol príklad elegantnejší, zmeňte 8 v riadku 20 na 6.
Niektoré dôležité poznámky:
1) Nastavenie pomocou AT je najlepšie ukončovať bodkočiarkou. Ak nie je na konci bodkočiarka, pozícia sa znovu zmení a potom je ju treba opäť nastaviť.
2) Nemôžete tlačiť na spodné dva riadky (22 a 23), pretože sú rezervované pre príkazy, vstupné dáta, správy atď. Odkazy na spodný riadok obvykle znamenajú riadok 21.
3) AT môžete použiť na to, aby PRINT bol vykonaný tam, kde je už niečo vypísané, starý výpis bude prepísaný.
Niekedy je vhodné, aby sa počítač nezastavil po výpise obrazovky a nečakal na stlačenie klávesu. Dá sa to urobiť pomocou príkazu
POKE 23692,255
Po tomto príkaze sa bude scrolling vykonávať 255x bez zastavenia s otázkou scroll?
Skúste tento príklad:
10 FOR n=0 TO 10000
20 PRINT n: POKE 23692,255
30 NEXT n
a pozorujte, čo sa bude diať na obrazovke.
Zoznam v príkaze PRINT môže obsahovať rôzne kombinácie čiarok, bodkočiarok, AT, TAB. Ich spracovanie prebieha zľava doprava a pre každú položku platia pravidlá, ktoré sme doteraz uviedli.
Ďalším príkazom, ktorý sa týka vstupu a výstupu dát, je príkaz INPUT, ktorý dokáže viac, než sme doteraz uviedli. Zatiaľ sme tento príkaz používali asi následovne:
INPUT "Kolko mas rokov"; vek
v ktorom tlačí počítač uvedené otázku v dolnej časti obrazovky a Vy potom zadáte svoj vek.
V skutočnosti je príkaz INPUT zostavený z položiek rovnako ako PRINT a tak text "Kolko mas rokov" a premenná vek sú obe položky príkazu INPUT. Všeobecne sú položky v príkazoch INPUT a PRINT rovnaké, ale sú tu veľmi dôležité rozdiely.
Obvyklý vstup INPUT je premenná, ktorej hodnota musí byť vložená, v našom príklade vek. Ak položka v INPUT začína znakom, musí to byť premenná, ktorej hodnotu potom vložíme. Ak sa očakáva reťazec, kurzor vo vstupnom riadku je zobrazený v úvodzovkách.
Ak chcete tlačiť hodnoty premenných ako časť záhlavia, urobíte to tak, že okolo premennej dáte zátvorky. Dokonca môžete do zátvoriek uzavrieť ľubovoľný výraz, ktorého hodnotu chcete tlačiť v príkaze INPUT.
Tu je názorný príklad ilustrujúci tento postup:
LET moj vek=INT(RND*100):INPUT("Ja mam ";moj vek;"
rokov,"); " ty kolko mas rokov
?",tvoj vek
Premenná moj vek je v zátvorke preto, lebo sa jej hodnota tlačí, tvoj vek nie je v zátvorke, preto musíte vložiť jej hodnotu. Všetko, čo je v príkaze INPUT, sa píše v dolnej časti obrazovky a chová sa nezávisle na hornej časti obrazovky.
Vo všetkých prípadoch sú tieto riadky vztiahnuté k hornému riadku spodnej časti, i keď vkladáte veľa údajov v príkaze INPUT.
Aby ste poznali, ako pracuje AT v príkaze INPUT, skúste zadať:
10 INPUT "To je riadok 1.", a$; AT 0,0;"To je riadok
0.",a$;AT 2,0; "To je riadok
2.",a$; AT 1,0;"To je stale
riadok 1.:,a$
Teraz skúste:
10 FOR n=0 TO 19: PRINT AT n,0;n:NEXT n
20 INPUT AT 0,0;a$; AT 1,0;a$;AT
2,0;a$; AT 3,0;a$;
AT 4,0;a$; AT 5,0;a$
Dolná časť obrazovky sa posúva smerom nahor, horná časť je neporušená. Keď má byť písané na ten istý riadok ako v PRINT, začne sa horná časť obrazovky rolovať.
Často sa stáva, že chcete prerušiť program počas zadávanie dát v príkaze INPUT. Stlačenie klávesu BREAK tu nepomôže. Ak sa očakáva vstup číselnej premennej, zadáte príkaz STOP (SYMBOL SHIFT + A) a stlačíte ENTER. Ak sa očakáva reťazec, presuniete kurzor pred úvodzovky, zadáte STOP a stlačíte ENTER. Ešte doplňme, že v prípade zadávanie reťazca sa môže zadať namiesto reťazcovej konštanty uzavretej v úvodzovkách i zložitejší reťazcový výraz (úvodzovky môžeme prípadne zmazať).
Ďalšou možnosťou v príkaze INPUT, ktorú ste doteraz nepoznali, je typ LINE vstup, kde ide o iný spôsob vkladanie hodnôt reťazcovým premenným. Pokiaľ napíšete LINE pred meno reťazcovej premennej (pri vstupe) napr.
INPUT LINE a$
potom počítač nevypíše reťazcové úvodzovky, ako je to pri vstupe reťazca obvyklé, ale očakáva vstup reťazca, ako keby tam úvodzovky boli. Tak keď napíšete "ano" ano vstup dát, dostane hodnotu ano. Pretože reťazcové úvodzovky nie je vypísané, nemôžete ich zrušiť a vkladať tak iný druh reťazcového vyjadrenia pre vstup dát. Pamätajte, že nemôžete použiť LINE vstup pre číselné premenné.
Riadiace znaky CHR$ 22 a CHR$ 23 majú účinok ako AT a TAB. Pretože ide o riadiace znaky, musia byť nasledované dvoma ďalšími znakmi, s ktorými sa počíta (presnejšie s ich kódmi ako s číslami na špecifikáciou stĺpca a riadku (pre AT) a pozície (pre TAB). Takmer vždy je ľahšie použiť AT a TAB v ich obvyklej forme, než použiť riadiace znaky, ale i tie sú niekedy užitočné. V riadiacom znaku po CHR$ 22 (pre AT) prvý znak špecifikuje číslo riadku a druhý číslo stĺpca. Preto
PRINT
CHR$ 22+CHR$ 1+CHR$ c;
má presne rovnaký účinok ako
PRINT AT 1,c;
Riadiaci znak pre TAB je CHR$ 23 a dva znaky za tým určujú číslo od 0 do 65535, špecifikujúce číslo v položke TAB.
PRINT CHR$
23+CHR$ a+CHR$ b;
má rovnaký účinok ako
PRINT TAB a+256*b;
Vyskúšajte si nasledujúci program pre deti, ktorý testuje, ako vedia násobiť:
10 LET m$=""
20 LET a=INT (RND*12)+1:LET b=INT (RND*12)+1
30 INPUT (m$) "kolko je
";(a);"*";(b);"?";c
100 IF c=a*b THEN LET
m$="Spravne.":GO TO 20
110
LET m$="Zle. Zadaj znova.":GO TO 30
Pokiaľ sú deti vnímavé,
mohli vy zistiť, že vlastne nemusia
vôbec nič počítať. Napr. keď sa ich počítač spýta, koľko je 2*3, môžu
namiesto správnej odpovede napísať 2*3. Cesta, ako tomu zabrániť, je čítať
vstupný reťazec namiesto čísla. Nahraďte c v riadku 30 c$, v riadku VAL c$ a vložte riadok
40 IF c$ <> STR$ VAL c$
THEN LET m$="piste spravne ako
cislo.":GO TO 30
To ich bude hnevať. Za niekoľko dní môžu objaviť, že možno vkladať reťazec STR$ (2*3). Aby sa tomu zabránilo, je treba nahradiť c$ v riadku 30 príkazom LINE c$.