【センター数学】今年もスパゲッティをおいしく頂きました【GOTO文】

年が明けてやっとの更新。正月の話とかもしたいのですが,その前に気になったこと。

今年のセンター数学Ⅱ・Bのプログラムの問題,汚い。
確かにセンターにプログラムのきれいさを求めるのは最初からあきらめるけど,それでも言わせてもらう。

とりあえずこれが出題された〔プログラム〕。
空所は埋めてあります。
何で「プログラム」を〔〕で囲うんだろう?

100 INPUT N
110 LET I=N
120 LET C=0
130 IF I=1 THEN GOTO 210
140 IF INT(I/2)*2=I THEN
150    LET I=I/2
160    GOTO 190
170 END IF
180 LET I=3*I+1
190 LET C=C+1
200 GOTO 130
210 PRINT "F(";N;")=";C
220 END

とりあえずGOTO文を使うなっ。
構造化すれば使わずに済むようになるはず。
たぶんELSE IF構文が使えないせいでこんなに汚くなっているのだろう。
あと200行目→130行目の部分はWHILEで書き変えたい。
そうするとこんな感じか

100 INPUT N
110 LET I=N
120 LET C=0
130 WHILE I!=1
140    IF I MOD 2 = 0 THEN
150       LET I=I/2
160    ELSE IF
170       LET I=3*I+1
180    END IF
190    LET C=C+1
200 WEND
210 PRINT "F(";N;")=";C
220 END

このくらいきれいにすればいいだろう。
まあ,構文を覚えていなくてもとけるようにするためにはしょうがないんだろうけど。

あ,間違いありましたら指摘どうぞ。