センター試験の数学

EDU mk2用NicoBASICの最新バージョン(nicobas20081024b.zip)で
センター試験の数学に出てくるプログラムをNicoBASICで動くようにしてみました
(まだ完全に対応してませんが、、、)。

100 input "a=";A
110 input "b=";B
120 input "c=";C
130 U=C
140 V=C
150 for x=0 to 9
160 y=a*X*x*b*x+c
170 if y>=u then goto 190
180 u=y
190 if y<=v then goto 210
200 v=y
210 next x
220 print "最小値=";u
230 print "最大値=";v
240 end


平成14年センター試験数学1・Aの選択問題です。(引用の範囲内ということで載せさせて頂きました。試験問題にも著作権はあります。)
それにしても、GOTO使ってるのがマズすぎです。わざと分かりにくくしてるんでしょうか。


↑エディット画面です。上記のプログラムをテキスト化して読み込みました。
最新版では日本語を表示できるようにしました。半角は4x6pixelの自作フォント、全角(SJIS)は8x8のElisaフォントを表示させます。
全角を表示させるためには漢字ROM(Elisaフォントを書き込んだ外部EEPROM)が必要です。漢字ROMは電子辞書ソフトのEDU2DICで作れます。
http://d.hatena.ne.jp/nicotakuya/20080901/1220232389



↑実行仮面です。
INPUT文に対応させました。「?」と表示されている部分が入力部分です。
キーボードから打ち込んでenter。
上/下/Aキーで入力することもできます。



↑実行結果です。
問題なく動きました。

100 INPUT "A="; A
110 INPUT "B="; B
120 IF B<=0 THEN PRINT "B<=0です。終了します。":GOTO 240
130 X = 0
140 Y = A
150 IF A < 0 THEN GOTO 200
160 IF Y < B THEN GOTO 230
170 X = X + 1
180 Y = Y - B
190 GOTO 160
200 X = X - 1
210 Y = Y + B
220 IF Y < 0 THEN GOTO 200
230 PRINT "X は"; X; ",Y は"; Y; "です。"
240 END



平成16年センター試験数学IAの問題。
これも問題なく動きました。プログラムの内容は意味不明ですけど。



ここまでは、よかったのですが、動かないものも一杯あります。
以下はNicoBASICで動かない例です。

100 INPUT PROMPT "x=":X
110 INPUT PROMPT "y=":Y
120 IF X<Y THEN
130    LET Z=X
140    LET X=Y
150    LET Y=Z
160 END IF
165 LET T=X*Y
170 IF Y=0 THEN
180    PRINT T/X
190    GOTO 270
200 END IF
210 LET R=X
220 LET R=R-Y
230 IF R>=Y THEN GOTO 220
240 LET X=Y
250 LET Y=R
260 GOTO 170
270 END


平成20年センター試験数学IIBの問題。
2006年度から書式(JIS Full BASICと呼ぶらしい)が変わりました。
今度から変数の代入に「LET」を使ってます。

あと、今度からINPUT命令は
【INPUT〜"";(セミコロン)変数】
じゃなくて、
【INPUT〜 "":(コロン)変数】
なんですね。
さらに「PROMPT」っていう無駄な単語が混ざってて、すごい違和感です。当然N88-BASICでは動きません。


あと、GOTOの反省なのか、今度からIFがネストできるようになったみたいです。
でも「ENDIF」じゃなくて「END(スペース)IF」になってます。
これだと、「END」と混同しそうで見た目が悪いです。


あと、致命的なことにNicoBASICでは少数が使えません。
整数に一定のゲタをはかせて、「なんちゃって少数」だったらできるんですが、それでも処理スピードが落ちるかもしれません。

もし、「NicoBASICで動かしたい」という需要があるなら対応させたいです。


(追記)バグ修正版はこちら
http://d.hatena.ne.jp/nicotakuya/20081026/1225038289