1.2.5.1. Základné funkcie
Ako prvú uvedieme funkciu LEN, ktorá dĺžku reťazca. Jej argumentom je reťazec, ktorého dĺžku chcete zistiť.
Napr. zadajte:
PRINT LEN "Skalica"
a počítač napíše 7, čo je počet písmen reťazca (na získanie LEN, ako u väčšiny funkčných mien, musíte použiť rozšírený mód klávesnice a potom stlačte kláves K). Pokiaľ spojíte funkcie pomocou operátorov do jedného výrazu, potom budú funkcie spracované pred operáciami. Toto pravidlo môžete samozrejme meniť použitím zátvoriek. Napr. sú tu dva výrazy, ktoré sa rozlišujú len v zátvorkách a operácie sa v každom prípade vykonávajú v inom poradí (hoci sú výsledky rovnaké):
LEN "Jano" + LEN "Sevcik" LEN ("Jano"+"Sevcik")
4+LEN "Sevcik" LEN ("JanoSevcik")
4+6 LEN "JanoSevcik"
1. 10
Ďalšou funkciou je funkcia STR$, ktorá konvertuje (prevádza) čísla na reťazce; argumentom je číslo a výsledkom je reťazec.
Skúste napísať:
LET a$= STR$ 1e2
čo má ten istý význam ako
LET
a$="100"
Ak zadáte
PRINT LEN STR$ 100.0000
a dostanete odpoveď 3, lebo STR$ 100.0000 ="100"
Funkcia VAL má opačný význam ako STR$, mení reťazec na číslo.
Napr.
VAL "3.5"=3.5
Funkcia VAL je obrátená k funkcií STR$, pretože ak máte nejaké číslo, aplikujete naň STR$ a potom ešte VAL, výsledkom je pôvodné číslo. Pokiaľ sa však vezme reťazec a v ňom sa aplikuje VAL a potom STR$, nie vždy dostaneme pôvodný reťazec. VAL je veľmi mocná funkcia, pretože reťazec, ktorý je argumentom, nie je obmedzený len na číslo, ale môže byť i aritmetický výraz.
Napr.:
VAL "2*3"=6 alebo dokonca
VAL ("2"+"*3")=6
Tu sú spojené dve dôležité veci.
Po prvé argument VAL je spracovaný ako reťazec. Reťazcové vyjadrenie "2" + "*3" je najprv spojené do reťazca "2*3". Potom je z reťazca zostavený výraz, ako keby nebolo úvodzoviek, je vynásobené 2*3 s výsledkom 6.
Teraz sa Vás pokúsime zmiasť:
PRINT VAL "VAL""VAL""""2"""""""
(Pamätajte, že vnútorné úvodzovky v reťazci musia byť písané dvojito). Čo bude výsledkom tohto príkazu?
Existuje podobná funkcia ako VAL, ale asi menej používaná, nazýva sa VAL$. Jej argumentom je stále reťazec, ale výsledok je takisto reťazec. Táto funkcia funguje ako VAL v dvoch krokoch: najprv je argument chápaný ako reťazec, potom sú odstránené úvodzovky a všetko je chápané ako číslo. VAL$ funguje rovnako, ale výsledok je považovaný opäť za reťazec. Preto:
VAL$ """dva""" = "dva"
Teraz zadajte:
LET a$ = "99"
a vypíšte hodnoty nasledovných výrazov:
VAL a$, VAL "a$", VAL """a$""",
VAL$ a$, VAL$"a$", VAL$"""a$"""
Niektoré z týchto príkladov budú pracovať, niektoré nie. Skúste nájsť odpoveď, prečo.
Funkcia INKEY$ (nemá argument) číta klávesnicu. Pokiaľ stlačíte 1 kláves (alebo SHIFT a jeden kláves), potom výsledok je znak, ktorý dostanete stlačením tohto klávesu v L-móde. Ak nie je stlačený žiadny kláves, výsledkom je prázdny reťazec.
Nasledujúci program pracuje ako písací stroj.
10 IF INKEY$ <> "" THEN GO TO 10
20
IF INKEY$ = "" THEN GO TO 20
30 PRINT INKEY$ ;
40
GO TO 10
Na riadku 10 sa čaká, až dáte prst preč z klávesnice a na riadku 20 sa čaká, až stlačíte nový kláves. Pamätajte, že na rozdiel od príkazu INPUT funkcia INKEY$ nevyžaduje potvrdenie klávesom ENTER.
Porozmýšľajte čo sa stane, ak vypustíte riadok 10 v poslednom programe!
Ďalší spôsob použitia INKEY$ je využitie s PAUSE:
10 PAUSE 0
20 PRINT INKEY$ ;
30
GO TO 10
A do tretice:
10
IF INKEY$ ="" THEN GO TO 10
20
PRINT AT 11,14;"jaj !"
30
IF INKEY$ <> "" THEN GO TO 30
40 PRINT AT 11,14;" "
50 GO TO 10
Písmená, číslice a ďalšie symboly, ktoré sme používali v reťazcoch, sa nazývajú znaky a tvoria abecedu alebo systém znakov, ktoré používa počítač. Väčšina týchto znakov sú jednoduché symboly, ale tiež symboly, ktoré reprezentujú kľúčové slová jazyka BASIC (PRINT, STOP, ...). Existuje celkom 256 znakov, ktoré majú kód od 0 do 255 (kód je číslo, pod ktorým je znak vnútorne uložený v počítači). Ich úplný zoznam je uvedený v prílohe. Prevod medzi znakmi a ich kódmi umožňujú funkcie CODE a CHR$. Majú tvar
CODE reťazec
CHR$ číslo
Funkcia CODE je aplikovaná na reťazec, jej výsledkom je kód prvého znaku v reťazci alebo 0, pokiaľ ide o prázdny reťazec. Funkcia CHR$ je aplikovaná na číslo a pre čísla 32 až 255 je jej výsledkom znak, ktorého kód je daný argumentom funkcie:
CODE "ABC"=65, lebo kód "A" je 65
CODE "B" =66, lebo kód "B" je 66
CHR$ 65
="A"
CHR$(3*22)="B"
Nasledujúci program tlačí na obrazovku všetky znaky s kódom 32 až 255:
10 FOR a=32 TO 255: PRINT CHR$ a;: NEXT a
Výpis možno rozdeliť na dve časti. Prvá časť sú znaky s kódom po hodnotu 127. Všetky tieto znaky (okrem dvoch) sú z kódu známeho ako ASCII (tento kód sa používa u väčšiny mikropočítačov).
Zvyšok znakov nie je časťou kódu ASCII a je použitý v počítačoch typu ZX Spectrum. Prvý medzi nimi je medzera a 15 čiernobielych vzorov. Sú to grafické symboly a používajú sa na kreslenie obrázkov. Môžete ich vkladať z klávesnice použitím grafického módu. Keď stlačíte GRAPHICS (CAPS SHIFT + 9), kurzor sa zmení na G. Teraz stlačte číslice 1 - 8 a budú sa objavovať grafické symboly, ktoré sú zobrazené na klávesoch, so stlačením SHIFT dávajú invertovaný symbol, tj. čierne sa stáva bielym a naopak. V grafickom móde, bez ohľadu na iné klávesy, kláves 9 nastavuje späť L-mód a kláves 0 funguje ako DELETE.
Po grafických symboloch potom uvidíte kópie abecedy od A do U. Tieto znaky môžete modifikovať sami. Keď je počítač prvý raz zapnutý, sú k dispozícii len znaky základné. Sú to takzvané znaky užívateľsky definovanej grafiky (udg), ktoré sa vkladajú z klávesnice v grafickom móde G použitím písmen od A do U. Postup definovania užívateľských znakov bude uvedený neskôr.
Po užívateľských znakoch nasledujú kľúčové slová jazyka BASIC.
Mohli ste si všimnúť, že sme netlačili prvých 32 znakov s kódmi 0 až 31. Sú to riadiace znaky. Nevytvárajú nič, čo sa dá tlačiť, ale majú vplyv pri výpise na obrazovku alebo sú využité na riadenie iných vecí. Obrazovka používa 3 znaky s kódmi 6, 8 a 13.
CHR$ 6 nastavuje ukazovateľ pre výpis začiatok ďalšej zóny, má ten istý význam ako čiarka vo význame oddeľovača v príkaze PRINT.
Porovnajte výsledok týchto dvoch príkazov:
PRINT 1; CHR$ 6;2
PRINT 1,2
Výhodné je využitie, ak tento znak vložíte priamo do reťazca:
LET
a$="1"+CHR$ 6+"2"
PRINT a$
CHR$ 8 posúva tlačovú pozíciu o 1 späť. Skúste napísať:
PRINT "1234"; CHR$ 8;"5"
Výsledkom je výpis 1235, lebo najprv sa vypíše 1245, potom sa ukazovateľ pre výpis nastaví späť a znak 4 sa prepíše znakom 5.
CHR$ 13 posúva ukazovateľ výpisu na začiatok ďalšieho riadku.
Využitie ďalších riadiacich znakov bude uvedené neskôr.
Použitím kódov a funkcie CHR$ môžete vytvoriť reťazce s ľubovoľnými znakmi, nielen s písmenami. Počet všetkých znakov je 256.
Tu sa dostávame k pojmom porovnanie reťazcov, usporiadanie reťazcov. Nasledujúce reťazce sú usporiadané vzostupne:
CHR$ 3 + "ZOOLOGICKA ZAHRADA"
CHR$
8 + "ABECEDA"
" AAAARGH!"
"(okruhle
zatvorky)"
"100"
"129.95"
"AAAARGH!"
"PRINT"
"Zoo"
"aaaargh!"
"zoo"
"zoologicka"
Všimnite si, že veľké písmená sú pred malými.
Reťazce sú usporiadané podľa nasledujúcich pravidiel:
Znaky sa berú postupne od začiatku a porovnávajú sa ich kódy.
Najprv sa porovnajú prvé znaky. Pokiaľ sú rozdielne, potom jeden má kód menší než druhý a reťazec, ktorého znak má nižší kód je menší. Keď sú prvé znaky rovnaké, porovnávajú sa rovnakým spôsobom znaky ďalšie a reťazce sú zhodné, keď sú si všetky znaky rovné.
Relácie =, <, >, <=, >=, <> sú použiteľné pre reťazce i pre čísla. Pre reťazce < znamená "je pred" a > znamená "je za".
Nasledujúce výrazy sú pravdivé:
"AA man" < "AAAA"
" AAAA" <
"AA man"
< = a > = pracuje podobne ako s číslami
"Rovnaky retazec" <= "Rovnaky retazec" je pravdivé
"Rovnaky retazec" < "Rovnaky retazec" je nepravdivé
Odštartujte tento program:
10
INPUT a
20 PRINT CHR$ a;
30
GO TO 10
Pokiaľ budete experimentovať, zistíte, že ak nie je zadané číslo v rozsahu 0 až 255, program sa zastaví s hlásením
B Integer out of range
Niekomu je čudné, prečo je rozsah práve 0 až 255. Tieto hodnoty sú dané technickými prostriedkami počítača. Podrobnejší popis bude uvedený v časti pre náročných. Zatiaľ si povieme to, že pamäť počítača sa skladá z "buniek", táto bunka sa nazýva byte (čítaj bajt) a zmestí sa do nej celé číslo od 0 do 255. Každý znak je uložený v jednom byte, preto kód znaku je od 0 do 255.
Každý byte má svoju adresu, čo môže byť celé číslo od 0 do 65535. Každý byte sa skladá z 8 menších častí, táto časť sa nazýva bit (bit je skratka anglického binary digit a znamená dvojková číslica). Jeden bit môže mať hodnotu 0 alebo 1.
Kto sa vyzná v dvojkovej sústave, využije možnosť zadávať čísla v tejto sústave pomocou funkcie BIN, ktorá má tvar:
BIN dčíslo
kde dčíslo je dvojkové číslo (teda číslo v dvojkovej sústave) o maximálnej dĺžke 16 bitov, takže hodnota tejto funkcie bude od 0 do 65535. Presvedčíte sa, že
BIN 101 = 5
BIN 11111111 = 255
BIN 11111111 11111111 = 65535
Z toho by malo byť jasné, že adresa je daná hodnotou 16 bitov.
Keďže vieme adresovať každý byte pamäti a vieme, čo môže obsahovať, popíšeme si teraz, ako môžete s pamäťou pracovať.
Hodnotu jedného bytu v pamäti je možné nastaviť príkazom POKE, ktorý má tvar:
POKE adresa,hodnota
kde adresa a hodnota majú známy význam.
Pre načítanie hodnoty bytu z pamäti sa používa funkcia PEEK v tvare:
PEEK adresa
ktorá udáva hodnotu bytu so zadanou adresou.
Príkazom
POKE 30000,5 alebo POKE 30000,BIN 101
nastavíme hodnotu bytu s adresou 30000 na hodnotu 5. Čí je to skutočne pravda zistíme príkazom
PRINT PEEK 30000
Príkaz POKE umožňuje meniť takzvané systémové premenné, čo podstatne ovplyvňuje "chovanie" počítača. Podrobnejšie sa o tom dozviete v kapitole o systémových premenných.