逆順に繰り返し

FOR〜TO〜STEP -1

例18

問題

入力されたnに対して、n, n-1, n-2,…3,2,1 と減らしながらn2を表示するプログラムをつくりなさい。

解説1 1〜10のプログラムから

繰り返しの最初にn=1,2,3,…10に対してn2を計算して表示するものがあります。これを元にします。

FOR n=1 TO 10
   PRINT n;n^2
NEXT n
END

n, n-1, n-2,…3,2,1 と減らしながらということなので、1と10を逆にします。STEP -1 が必要となります。

FOR n=10 TO 1 STEP -1
   PRINT n;n^2
NEXT n
END

次に、この10の代わりに好きな数を入力することができるようにします。INPUT n などとしてきましたが、n はもう使っているので、別の変数にします。一般的には、i などが多く使われます。10から1が i から1になるのです。

INPUT i
FOR n=i TO 1 STEP -1

i でなくてもいいのです。hajime という変数をつくって、hajime から1までとしてもいいのです。。

INPUT hajime
FOR n=hajime TO 1 STEP -1

これでうまくいくはずです。

解説2 INPUT n を生かして

INPUT n からはじめてしまった場合は、次のように考えます。n から 1 まで作業をします。だから、FOR i=n TO 1 にしよう。コンピュータは n から 1 までのどこをやっているのか覚えておかなければ、「1 まできたから終わり」と判断できません。そこでそのための変数が必要ですが、今の場合、それをi とします。これも i でなくてもいいのです。k を使いたければ FOR k=n TO 1 となります。ただし、NEXT のあとに同じ変数を書かなければなりません。(十進BASICでは省略するとLETと同様に自動的に入れてくれます)

INPUT n
FOR k=n TO 1 STEP -1
   PRINT n;n^2
NEXT k
END

PRINT n;n^2 の部分はこのままではいけません。kはnから1まで変わりますが、nはいつまでも入力されたときの値のままですから、同じ数字をn回書き続けてしまいます。

INPUT n
FOR k=n TO 1 STEP -1
   PRINT k;k^2
NEXT k
END

解説3 ちょっと意外

実は、以下のように n=n としてもうまくいきます。これは正しいプログラムの仕方です。しかし、どんなときにこれが出来るか理解していないと失敗します。知っていても混乱のもとになるかもしれませんので、違う変数を使う方がいいでしょう。でもなぜこれができるかを理解できるとプログラムはおもしろくなるでしょう。

INPUT n
FOR n=n TO 1 STEP -1
   PRINT n;n^2
NEXT n
END

聖愛高等学校
http://www.seiai.ed.jp/