最近流行の基数変換、小数点まで入れてやらせるポケコンのBASICのプログラム
10 DIM ST$(0)*32
20 PO=-32768:NU=0
30 INPUT "IN BASE>";B
40 INPUT "IN >";ST$(0)
50 FOR I=1 TO LEN ST$(0)
60 T= ASC MID$ (ST$(0),I,1)
70 IF T=46 THEN PO=0:GOTO 130
80 NU=NU*B
90 PO=PO+1
100 IF T<=58 THEN NU=NU+T-48:GOTO 130
110 IF T<=90 THEN NU=NU+T-55:GOTO 130
120 IF T<=122 THEN NU=NU+T-87:GOTO 130
130 NEXT I
140 IF PO>0 THEN PO=B^PO ELSE PO=1
150 N1=NU\PO
160 N0=(NU-N1*PO)/PO
170 INPUT "OUT BASE>";B
180 ST$(0)=""
190 T=N1 MOD B
200 N1=N1\B
210 IF T<10 THEN ST$(0)= CHR$ (T+48)+ST$(0) ELSE ST$(0)= CHR$ (T+55)+ST$(0)
220 IF N1<>0 THEN 190
230 PRINT ST$(0);".";
240 IF N0=0 THEN END
250 N0=N0*B
260 T= FIX N0
270 N0=N0-T
280 IF T<10 THEN PRINT CHR$ (T+48); ELSE PRINT CHR$ (T+55);
290 GOTO 240
正直、小数点まで扱えるのはすごい強みだったりする。なかなかない。
小数点のあるやつの基数変換ってうっとうしいからね。
検算とかにつかえそうだからいいね。
まぁIN BASEで元の方の基数を入れて、OUT BASEにほしい基数を入れてと、
なかなかいい出来ですよ。
そもそもCで作ってたプログラムをBASICに移植して完成させたもの。
Cでは整数の範囲で任意の基数変換と、小数入れば任意のから10進までしかできなかったから。
これを完成させたのはBASICにしてから。
Cではどういうわけか型がねぇ…double型とlong型を行き来させるとなんかおかしくなるんでね。
まぁちょっとBASICのほうが優れているところがあるしね。
ポケコンのCはあんまり性能よくないんよね。
まぁというわけでガリガリBASICで書いて完成と。
問題点は有効数字がポケコンゆえにさほど高くないということ。
それでなんか端数が発生してしまうこともある。
まぁその辺はわかる人が適当に判断すればいいよと。
まぁそういう意味でも検算程度にはすごく有効に違いないな。だがそれ以上はどうだか。
精度の問題があるからこれ以上は努力でどうこうできることじゃない。
循環小数になるときはBREAKしてくれ。という風にしてあるのも事実だ。
まぁこれするのにCだとつらいな。故障の原因にならないかな?まぁ大丈夫だと思うけど。
インタプリンタのBASICだとその点は強いね。
しかし、基数変換の問題はうっとうしいよ。
今日の授業でもずいぶん格闘したからなぁ。