BMETER.BAS

10 PRINT "Signalizujte každý úder mezerníkem, jinak stiskněte F6 pro nové měření a F8 pro spočtení tempa."
20 L=-1: A=0: N=0: REM Inicializuj proměnné.
21 REM L = poslední čas úderu, A = průměrný interval mezi údery, N = čítač zaznamenaných úderů
100 X=0: REM Inicializuj čítače nečinnosti.
110 K$=KEY$: IF K$="" THEN X=X+1 ELSE 130
111 REM Sejmi vstup z klávesnice. Pokud vstup není, zvyš čítač nečinnosti, jinak jdi k jeho vyhodnocení.
120 IF X>3000 THEN 10 ELSE 110
121 REM Pokud čítač nečinnosti dosáhl 3000, jdi k úvodní nápovědě, jinak se vrať ke snímání vstupu.
130 K=ASC(K$): REM Převeď znak na vstupu na jeho číselnou reprezentaci.
140 IF K=8 THEN PRINT "Nové měření.": GOTO 20
141 REM Pokud je na vstupu Backspace (F6), oznam nové měření a jdi k inicializaci.
150 IF K=13 THEN GOSUB 300: REM Pokud je na vstupu Enter (F8), odskoč k oznámení tempa.
160 IF K=32 THEn GOSUB 200: REM Pokud je na vstupu mezera, odskoč k zaznamenání úderu.
170 GOTO 110: REM Jdi zpět na snímání vstupu.
200 T=INP(144)/100+INP(145)*3600+INP(146)*60+INP(147)
201 REM Načti data ze systémových hodin, vypočti a poznamenej si aktuální denní čas.
202 REM Nejdříve je nutno číst setiny vteřiny, aby se data na portech obnovila.
210 IF L<0 THEN L=T: RETURN
211 REM Pokud jde o první úder, zaznamenej ho do posledního času úderu a vrať se.
220 if T<L THEN T=T+86400
221 REM Pokud čas posledního úderu byl před půlnocí, přičti k aktuálnímu času celý den.
222 REM Toto je nutné, aby bylo možné vypočíst interval.
230 A=(A*N+T-L)/(N+1): REM Zpřesni průměrnou délku intervalu mezi údery podle posledního intervalu.
240 N=N+1: L=T: RETURN: REM Zvyš čítač úderů, zaznamenej poslední čas úderu a vrať se.
300 IF N<2 THEN PRINT "Musí být zaznamenány alespoň dva údery.": RETURN
301 REM Pokud nejsou zaznamenány alespoň dva údery, oznam to a vrať se.
310 B=60/A: C=INT(B): REM Vypočítej tempo a poznamenej si celočíselnou část.
320 IF (B-C)>=0.5 THEN C=C+1
321 REM Pokud desetinná část je větší než 0,5, tak zvyš celočíselnou část o 1, tedy zaokrouhli.
330 PRINT C;" BPM": END: REM Oznam vypočtené tempo v úderech za minutu a skonči.