逆順に繰り返し

FOR〜TO〜STEP -1

例17で、FOR i=1 TO n とするところを FOR i=n TO 1 とすると、うまくいかなかったはずです。このままでは n が 1 よりも小さい時には FOR〜NEXT 内部を実行しますが、n が 1 より大きいとBASICはなにもしません。

前回の例では FOR i=1 TO n にしても問題ないのですが、1,2,3,…10 でなく 10,9,8,…1 とやりたい場合もあるでしょう。その場合は、STEP -1 を書き加えます。

INPUT n
LET s=1
FOR i=n TO 1 STEP -1
   LET s = s * i
NEXT i
PRINT n;"! = ";s
END

例18

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

??

結果は、たとえば7を入力すると、

 7  49 
 6  36 
 5  25 
 4  16 
 3  9 
 2  4 
 1  1 

とびとびの繰り返し

STEP がない FOR 〜 NEXT では、STEP 1 が省略されているのです。

FOR n=1 TO 10 とあると NEXT n で、n の値を1増やして n=2 としますが、この1増やすというのは STEP 1 から来ています。NEXT n のところで n の値に STEP の値を加えて、TOの値と比較するという仕組みになっています。

次のようにすると奇数だけを書くことが出来ます。

FOR n=1 TO 20 STEP 2
   PRINT n
NEXT n
END

このようになります。n に2を足していって、20より大きくなった21に来ると終わるので、19まで表示されます。

 1 
 3 
 5 
 7 
 9 
 11 
 13 
 15 
 17 
 19 

次は2から始めて偶数だけを書くものですが、2つの方法を示します。。

偶数その1
FOR n=1 TO 20 STEP 2
   PRINT n+1
NEXT n
END
偶数その2
FOR n=2 TO 20 STEP 2
   PRINT n
NEXT n
END

どちらも20まで表示されます。

例19

7から始まって50より少ない7の倍数を表示するプログラムをつくりなさい。

結果は、

 7 
 14 
 21 
 28 
 35 
 42 
 49 

ちょっと難しい例20

自然数nをキーボードから入力するとn!の計算方法を表示するプログラムをつくりなさい。たとえば、7 と入力すると、

 7 ! =  7 × 6 × 5 × 4 × 3 × 2 × 1 

と表示します。FOR ????の部分だけ書き換えると出来るはずです。

INPUT n
PRINT n; "! = ";
FOR ????
   PRINT  i;"×";
NEXT i
PRINT i
END

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