5. Počítanie: + - * / ^, INT, ABS, SGN, SQR
Na čo to je
BASIC je aj kalkulačka. Všade, kde môže stáť číslo, môže stáť výraz – výpočet z čísel, premenných, znamienok a funkcií.
Ako sa to píše
| Znak | Význam | Príklad | Výsledok |
|---|---|---|---|
+ | sčítanie | 7+3 | 10 |
- | odčítanie | 7-3 | 4 |
* | násobenie | 7*3 | 21 |
/ | delenie | 7/3 | 2.33333333 |
^ | umocnenie | 7^2 | 49 |
( ) | zátvorky: to vnútri sa počíta najprv | (2+3)*4 | 20 |
Funkcia je hotový výpočet s menom. Číslo, s ktorým má počítať, sa píše za ňu do zátvoriek:
| Funkcia | Čo vráti | Príklad | Výsledok |
|---|---|---|---|
INT(x) | najbližšie celé číslo smerom nadol | INT(2.7) | 2 |
ABS(x) | číslo bez znamienka | ABS(-8) | 8 |
SGN(x) | znamienko: -1, 0 alebo 1 | SGN(-8) | -1 |
SQR(x) | druhú odmocninu | SQR(16) | 4 |
Celý program
Súbor examples/expr.abas:
10 REM Arithmetic
20 PRINT "7+3 = ";7+3
30 PRINT "7-3 = ";7-3
40 PRINT "7*3 = ";7*3
50 PRINT "7/3 = ";7/3
60 PRINT "7^2 = ";7^2
70 PRINT "2+3*4 = ";2+3*4
80 PRINT "(2+3)*4 = ";(2+3)*4
90 PRINT "INT(7/3) = ";INT(7/3)
100 PRINT "INT(-2.5) = ";INT(-2.5)
110 PRINT "ABS(-8) = ";ABS(-8)
120 PRINT "SGN(-8) = ";SGN(-8)
130 PRINT "SQR(16) = ";SQR(16)
140 REM The remainder after dividing 17 by 5
150 A=17:B=5
160 PRINT "17 = ";INT(A/B);"*5 + ";A-INT(A/B)*B
170 REM Rounding to two decimal places
180 X=3.14159
190 PRINT INT(X*100+0.5)/100Preklad a spustenie
Basic26 expr.abas --simČo uvidíš
7+3 = 10
7-3 = 4
7*3 = 21
7/3 = 2.33333333
7^2 = 49
2+3*4 = 14
(2+3)*4 = 20
INT(7/3) = 2
INT(-2.5) = -3
ABS(-8) = 8
SGN(-8) = -1
SQR(16) = 4
17 = 3*5 + 2
3.14Ako to funguje
Poradie počítania
Riadok 70 dá 14, nie 20: BASIC počíta ako v škole, násobenie a delenie pred sčítaním a odčítaním. Celé poradie:
- zátvorky,
- umocnenie
^, - násobenie a delenie
* /, - sčítanie a odčítanie
+ -.
Rovnako silné znamienka sa počítajú zľava doprava: 10/4*2 je (10/4)*2, teda 5. Keď si nie si istý, daj zátvorky – nič nestoja a program je čitateľnejší.
Delenie nie je celé
7/3 je 2.33333333. BASIC na Atari nemá zvláštne „celé čísla“, každé číslo môže mať desatinnú časť. Keď chceš celý podiel, odrež zvyšok funkciou INT.
INT ide nadol, nie k nule
INT(2.7) je 2, ale INT(-2.5) je -3: najbližšie celé číslo, ktoré je menšie. Pri kladných číslach je to to isté ako „odrezať desatinnú časť“, pri záporných nie.
Dva užitočné triky s INT
- Zvyšok po delení (riadok 160):
A-INT(A/B)*B. Sedemnásť delené piatimi je 3 a zvyšok 2. Zvyškom sa zisťuje, či je číslo párne (N-INT(N/2)*2je 0), a robí sa ním všetko, čo sa má „točiť dokola“. - Zaokrúhlenie (riadok 190):
INT(X+0.5)zaokrúhli na celé číslo. Na dve desatinné miesta sa číslo najprv vynásobí stomi, zaokrúhli a zasa vydelí.
Časté chyby
| Čo sa stalo | Čo sa stane |
|---|---|
| delenie nulou | program skončí s ERROR- 11 AT LINE 20 |
| odmocnina zo záporného čísla | ERROR- 3 AT LINE 20 |
| výsledok je väčší než 9.99999999E+97 | ERROR- 11 |
chýba zátvorka (PRINT (2+3) | error B26041: expected ')' |
výraz nie je dokončený (PRINT 5+) | error B26040: expected a value, found end of line |
násobenie bez hviezdičky (2(3+4)) | BASIC to neuhádne: vypíše 27 – dvojku a za ňou sedmičku |
-3^2 | je 9, nie -9: mínus pred číslom má v BASICu prednosť pred umocnením. Píš -(3^2) |
ERROR- s číslom je chyba za behu: program sa preložil, ale počas behu narazil na niečo, čo sa vypočítať nedá. Vypíše číslo chyby a riadok programu, na ktorom sa stala, a skončí. Čísla sú v prílohe C; kapitola 17 ukáže, ako chybu zachytiť.
Vyskúšaj si
- Vypočítaj, koľko sekúnd má deň a koľko rok.
- Obdĺžnik má strany
AaB. Vypíš jeho obvod, obsah a dĺžku uhlopriečky (SQR(A*A+B*B)). - Rozmeň 187 sekúnd na minúty a sekundy pomocou
INTa zvyšku.
Zhrnutie
+ - * / ^a zátvorky; násobenie a delenie majú prednosť pred sčítaním a odčítaním.- Delenie dáva desatinné číslo;
INTho oreže nadol. - Zvyšok po delení je
A-INT(A/B)*B, zaokrúhlenieINT(X+0.5). - Funkcia má svoje číslo v zátvorkách:
SQR(16),ABS(-8). - Čo sa vypočítať nedá, skončí chybou za behu:
ERROR-a číslo.
Späť: 4. Premenné a čísla · Ďalej: 6. Reťazce