16. Matematika a náhoda: SIN, COS, ATN, DEG, RAD, EXP, LOG, CLOG, RND
Na čo to je
Funkcie pre všetko, čo nejde štyrmi základnými znamienkami: uhly (kreslenie kruhov, pohyb po oblúku), mocniny a logaritmy – a RND, bez ktorého by nebola žiadna hra, lebo dáva náhodné číslo.
Ako sa to píše
| Slovo | Čo robí |
|---|---|
SIN(x), COS(x) | sínus a kosínus uhla x |
ATN(x) | arkustangens: uhol, ktorého tangens je x |
DEG | príkaz: odteraz sú uhly v stupňoch (celý kruh je 360) |
RAD | príkaz: odteraz sú uhly v radiánoch (celý kruh je 2π); tak program začína |
EXP(x) | číslo e (2,718…) umocnené na x |
LOG(x) | prirodzený logaritmus – opak EXP |
CLOG(x) | desiatkový logaritmus: CLOG(1000) je 3 |
RND(0) | náhodné číslo od 0 (vrátane) po 1 (bez nej) |
Tangens BASIC nemá, je to SIN(X)/COS(X). Číslo π tiež nie – ulož si ho do premennej.
Celý program
Súbor examples/math.abas:
10 REM Mathematics and chance
20 DEG
30 PRINT "SIN(30) = ";SIN(30)
40 PRINT "COS(60) = ";COS(60)
50 PRINT "ATN(1) = ";ATN(1)
60 RAD
70 PI=3.14159265
80 PRINT "SIN(PI/2) = ";SIN(PI/2)
90 PRINT "EXP(1) = ";EXP(1)
100 PRINT "LOG(10) = ";LOG(10)
110 PRINT "CLOG(1000) = ";CLOG(1000)
120 PRINT "2^10 = ";2^10
130 REM Throwing a die: a whole number from 1 to 6
140 FOR I=1 TO 10
150 PRINT INT(RND(0)*6)+1;" ";
160 NEXT I
170 PRINTPreklad a spustenie
Basic26 math.abas --simČo uvidíš
SIN(30) = 0.499999999
COS(60) = 0.50000001
ATN(1) = 45.0000003
SIN(PI/2) = 1
EXP(1) = 2.71828179
LOG(10) = 2.30258509
CLOG(1000) = 3
2^10 = 1024
5 6 1 2 2 3 6 2 1 2 Ako to funguje
- Riadok 20:
DEGprepne na stupne. Platí, kým ho nezmeníRAD. - Riadky 30 až 50: sínus tridsiatich stupňov je presne jedna polovica, ale Atari vypíše
0.499999999. Nie je to chyba prekladača – takto počíta Atari BASIC a preložený program dáva do poslednej číslice to isté. Funkcie sa počítajú približne a posledné miesto býva o kúsok vedľa. Preto výsledky funkcií neporovnávaj znakom=(kapitola 8). - Riadok 70: π ako premenná. Na kreslenie v stupňoch ho nepotrebuješ.
- Riadok 150: najdôležitejší riadok kapitoly.
RND(0)dá číslo ako 0.7312…; vynásobené šiestimi je od 0 po 5,99…;INTz neho spraví celé číslo 0 až 5; plus jedna je 1 až 6. Všeobecne:
INT(RND(0)*N)+1je náhodné celé číslo od 1 do N. Na čísle v zátvorke RND nezáleží, zvykne sa písať nula.
Náhoda v simulátore a v emulátore
V simulátore dostaneš pri každom spustení tie isté „náhodné“ čísla – preto môže táto kapitola ukázať, čo program vypíše. Na Atari a v emulátore sú zakaždým iné.
Hádanka s náhodným číslom
Hra z kapitoly 9 potrebovala zmeniť jediný riadok:
20 SECRET=INT(RND(0)*100)+1:TRIES=0Časté chyby
| Čo sa stalo | Čo sa stane |
|---|---|
uhol v stupňoch bez DEG | SIN(30) vyjde -0.988…, lebo 30 sa berie ako radiány |
| logaritmus nuly alebo záporného čísla | ERROR- 3 AT LINE 10 |
EXP príliš veľkého čísla (EXP(300)) | ERROR- 3 – výsledok sa nezmestí |
RND(0)*6 bez INT | desatinné číslo, nie hod kockou |
INT(RND(0)*6) bez +1 | čísla 0 až 5 |
premenná PI bez priradenia | je nula, a s ňou všetky výsledky |
Vyskúšaj si
- Vypíš tabuľku sínusov pre uhly 0, 15, 30 … 90 stupňov.
- Hoď dvoma kockami stokrát a spočítaj, koľkokrát padol súčet 7. (Spusti v emulátore viackrát.)
- Vyber náhodné písmeno abecedy: náhodné číslo 0–25, pripočítaj 65 a daj do
CHR$.
Zhrnutie
SIN,COS,ATNpočítajú v radiánoch, poDEGv stupňoch.EXP,LOGaCLOGsú mocniny a logaritmy; umocňovať sa dá aj znakom^.RND(0)je náhodné číslo medzi 0 a 1;INT(RND(0)*N)+1je celé od 1 doN.- Výsledky funkcií sú približné – posledná číslica býva vedľa.
Späť: 15. Znaky a čísla · Ďalej: 17. Chyby za behu