8. Podmienka: IF, THEN, AND, OR, NOT

Na čo to je

Program, ktorý robí vždy to isté, je nudný. IF mu dáva možnosť rozhodnúť sa: niečo vykoná, len keď platí podmienka.

Ako sa to píše

Atari BASIC
IF podmienka THEN príkazy
IF podmienka THEN číslo riadka
SlovoVýznam
IF„ak“
podmienkaotázka, na ktorú sa dá odpovedať áno alebo nie: AGE<18
THEN„tak“
príkazyčo sa má vykonať, keď podmienka platí – všetko až do konca riadka
číslo riadkaskratka: THEN 100 je to isté ako THEN GOTO 100 (kapitola 9)

Keď podmienka neplatí, program pokračuje ďalším riadkom.

Porovnania:

ZnakVýznam
=rovná sa
<>nerovná sa
< >menšie, väčšie
<= >=menšie alebo rovné, väčšie alebo rovné

Podmienky sa dajú spájať:

SlovoPlatí, keď
A AND Bplatí A a zároveň B
A OR Bplatí aspoň jedno z nich
NOT AA neplatí

Celý program

Súbor examples/if.abas:

Atari BASIC
10 REM IF: deciding
20 DIM ANSWER$(10)
30 PRINT "How old are you";
40 INPUT AGE
50 IF AGE<0 THEN PRINT "That cannot be":END
60 IF AGE<18 THEN PRINT "You are a child"
70 IF AGE>=18 THEN PRINT "You are an adult"
80 IF AGE>=13 AND AGE<=19 THEN PRINT "You are a teenager"
90 IF AGE=7 OR AGE=77 THEN PRINT "A lucky number!"
100 IF NOT (AGE=100) THEN PRINT "Not a hundred yet"
110 PRINT "Do you like BASIC";
120 INPUT ANSWER$
130 IF ANSWER$="YES" THEN PRINT "So do I"
140 IF ANSWER$<>"YES" THEN PRINT "You will"
150 PRINT "13<18 is ";13<18;", 13>18 is ";13>18

Preklad a spustenie

V emulátore, s vlastnými odpoveďami:

Basic26 if.abas --run

V simulátore s odpoveďami zo súboru examples/if.in (15 a YES):

Basic26 if.abas --sim --sim-input if.in

Čo uvidíš

How old are you?15
You are a child
You are a teenager
Not a hundred yet
Do you like BASIC?YES
So do I
13<18 is 1, 13>18 is 0

Ako to funguje

Reťazce sa dajú porovnávať aj na menší a väčší; rozhoduje poradie znakov v tabuľke Atari, kde sú veľké písmená pred malými. "B"<"C" platí a "abc">"ABC" tiež.

Časté chyby

Čo sa staloČo sa stane
chýba THENerror B26043: expected THEN
porovnanie reťazca s číslom (IF A$=5)error B26042: cannot compare a string with a number
príkaz za dvojbodkou mal platiť vždynevykoná sa, keď podmienka neplatí – daj ho na ďalší riadok
NOT A=B bez zátvorkypočíta sa (NOT A)=B
IF A=1 OR 2platí vždy: číta sa „A je 1, alebo 2“ a dvojka je nenulová. Píš A=1 OR A=2
porovnanie vypočítaných čísel na rovnosť1/3*3 je 0.999999999, nie 1, takže IF X=1 neplatí; porovnávaj ABS(X-1)<0.0001

Vyskúšaj si

  1. Spýtaj sa na číslo a vypíš, či je kladné, záporné alebo nula.
  2. Spýtaj sa na číslo a vypíš, či je párne. (Zvyšok po delení dvoma je v kapitole 5.)
  3. Spýtaj sa na heslo a vypíš Welcome, len keď sedí.

Zhrnutie

Späť: 7. Vstup · Ďalej: 9. Skok