BASICのはじめ方!繰り返し処理(FOR…NEXT, WHILE…WEND, DO…LOOP)

BASIC

プログラミングをしていると、同じような処理を何度も繰り返したい場面がたくさんあります。BASICには、そんなときに便利な「繰り返し処理」の命令が用意されています。 ここでは、代表的な3つの繰り返し構文、FOR...NEXTWHILE...WENDDO...LOOP を見ていきましょう!🚀

1. FOR…NEXT ループ

FOR...NEXT ループは、決まった回数だけ処理を繰り返したいときによく使われます。 例えば、「1から10まで数える」とか「配列の要素を順番に処理する」といった場合に便利です。

基本的な構文

FOR カウンタ変数 = 初期値 TO 終了値 [STEP 増減値]
    ' ここに繰り返したい処理を書く
NEXT [カウンタ変数]
  • カウンタ変数: ループの回数を数えるための変数です(例: I, J)。
  • 初期値: カウンタ変数が最初に持つ値です。
  • 終了値: カウンタ変数がこの値を超える(またはSTEPが負の場合は下回る)とループが終了します。
  • STEP 増減値 (オプション): ループが1回終わるごとにカウンタ変数に加算(または減算)される値です。省略すると、自動的に 1 になります。
  • NEXT [カウンタ変数]: ループの終わりを示します。カウンタ変数は省略可能な場合もありますが、書いた方が分かりやすいでしょう。

使用例 ✨

1から5まで順番に数を表示するプログラムです。

PRINT "FOR...NEXT ループ開始!"
FOR I = 1 TO 5
    PRINT "現在のカウント: "; I
NEXT I
PRINT "ループ終了!"

実行すると、次のように表示されます。

FOR...NEXT ループ開始!
現在のカウント: 1
現在のカウント: 2
現在のカウント: 3
現在のカウント: 4
現在のカウント: 5
ループ終了!

STEP を使うと、カウントの増え方を変えられます。例えば、2ずつ増やす場合はこう書きます。

PRINT "偶数を表示します:"
FOR COUNT = 2 TO 10 STEP 2
    PRINT COUNT; " ";  ' PRINT文の最後に ; をつけると改行しません
NEXT COUNT
PRINT

実行結果:

偶数を表示します:
2  4  6  8  10 

STEP に負の値を指定すれば、カウントダウンもできます。

PRINT "カウントダウン!"
FOR N = 3 TO 1 STEP -1
    PRINT N
NEXT N
PRINT "スタート!"

実行結果:

カウントダウン!
3
2
1
スタート!
ポイント: FOR...NEXT ループは、ループに入る前に回数が決まっている処理に適しています。

2. WHILE…WEND ループ

WHILE...WEND ループは、特定の条件が満たされている間、処理を繰り返したいときに使います。 FOR...NEXT と違い、繰り返しの回数が事前に決まっていなくても大丈夫です。

基本的な構文

WHILE 条件式
    ' 条件式が真 (True) の間、繰り返したい処理を書く
WEND
  • WHILE 条件式: ここに書かれた条件式を評価し、その結果が真 (True、0以外) である限り、ループ内の処理を実行します。
  • WEND: ループの終わりを示します。ここまで来ると、WHILE に戻って再び条件式を評価します。

注意点: ループに入る前にまず条件式が評価されます。もし最初から条件が偽 (False、0) であれば、ループ内の処理は一度も実行されません。

使用例 🤔

変数 X の値が 10 未満の間、その値を表示し続けるプログラムです。

X = 1
PRINT "WHILE...WEND ループ開始!"
WHILE X < 10
    PRINT "X の値: "; X
    X = X + 2  ' Xの値を2増やす
WEND
PRINT "ループ終了! X は "; X; " になりました。"

実行結果:

WHILE...WEND ループ開始!
X の値: 1
X の値: 3
X の値: 5
X の値: 7
X の値: 9
ループ終了! X は 11 になりました。

この例では、X が 11 になった時点で WHILE の条件 X < 10 が偽になるため、ループが終了します。

注意!無限ループ: WHILE の条件がずっと真のままだと、ループが永遠に終わらない「無限ループ」になってしまいます。ループの中で条件が変わるように、変数の値を変更する処理などを忘れないようにしましょう。
補足: WHILE...WEND は古い形式のBASICからある構文ですが、より新しいBASIC(FreeBASICなど)では、次に説明する DO...LOOP の方がより柔軟で推奨されることが多いです。ただし、互換性のために WHILE...WEND も使えるようになっています。

3. DO…LOOP ループ

DO...LOOP ループは、WHILE...WEND よりも柔軟な条件指定ができる繰り返し構文です。 条件をループの最初にチェックするか、最後にチェックするかを選べたり、「~の間繰り返す(WHILE)」だけでなく「~になるまで繰り返す(UNTIL)」という指定もできます。

主な構文パターン

DO...LOOP にはいくつかの書き方があります。

  1. 最初に条件をチェック (WHILE): WHILE...WEND と似ています。条件が真の間、繰り返します。
    DO WHILE 条件式
        ' 条件式が真の間、繰り返す処理
    LOOP
  2. 最初に条件をチェック (UNTIL): 条件が偽の間、繰り返します(条件が真になったらループを抜けます)。
    DO UNTIL 条件式
        ' 条件式が真になるまで繰り返す処理
    LOOP
  3. 最後に条件をチェック (WHILE): ループ内の処理を最低1回は実行してから、条件をチェックします。条件が真の間、繰り返します。
    DO
        ' 繰り返す処理 (最低1回は実行される)
    LOOP WHILE 条件式
  4. 最後に条件をチェック (UNTIL): ループ内の処理を最低1回は実行してから、条件をチェックします。条件が偽の間、繰り返します(条件が真になったらループを抜けます)。
    DO
        ' 繰り返す処理 (最低1回は実行される)
    LOOP UNTIL 条件式
  5. 無限ループ (意図的に作る場合): 条件を書かずに DO...LOOP だけを書くと、無限ループになります。ループの中から EXIT DO 命令などで脱出する必要があります。
    DO
        ' 繰り返す処理
        IF 何かの条件 THEN EXIT DO ' ループを抜ける
    LOOP

使用例 👍

例1: 最後に条件をチェック (UNTIL) – ユーザーが “yes” と入力するまで質問を繰り返します。

INPUT "処理を続けますか? (yes/no)"; answer$
DO
    PRINT "「yes」と入力してください!"
    INPUT "続けますか? (yes/no)"; answer$
LOOP UNTIL UCASE$(answer$) = "YES"  ' UCASE$で大文字小文字を区別しないようにする

PRINT "はい、処理を続けます。"

この例では、INPUT 命令などでユーザーからの入力を受け付け、それが “YES” (大文字小文字問わず) になるまでループが続きます。最初に INPUT がループの外にあるのは、もし最初から “yes” と入力された場合にループに入らないようにするためですが、DO...LOOP UNTIL は最低1回は実行されるため、ループの中で尋ねるだけでも良い場合が多いです。

例2: 最初に条件をチェック (WHILE)WHILE...WEND と同じような動きです。

Counter = 0
PRINT "DO WHILE...LOOP 開始!"
DO WHILE Counter < 3
    PRINT "Counter: "; Counter
    Counter = Counter + 1
LOOP
PRINT "ループ終了!"

実行結果:

DO WHILE...LOOP 開始!
Counter: 0
Counter: 1
Counter: 2
ループ終了!
ポイント: DO...LOOP は非常に柔軟性が高いループです。条件をチェックするタイミング (DO の後か LOOP の後か) や、条件の種類 (WHILEUNTIL か) を使い分けることで、様々な状況に対応できます。

まとめ: どのループを使う? 🤔

ループ構文 主な用途 特徴
FOR...NEXT 決まった回数繰り返す カウンタ変数で回数を制御。STEPで増減値を指定可能。
WHILE...WEND 条件が真の間繰り返す 最初に条件をチェック。条件を満たさないと一度も実行されない。 (古い形式)
DO...LOOP 条件に基づいて繰り返す (柔軟)
  • 条件チェックのタイミングを選べる (最初/最後)。
  • 条件の種類を選べる (WHILE/UNTIL)。
  • 最低1回の実行を保証する書き方ができる。

基本的には、

  • 繰り返す回数が決まっているなら FOR...NEXT
  • 回数は決まっていないが、何らかの条件で繰り返したいなら DO...LOOP (または互換性のために WHILE...WEND)

を選ぶと良いでしょう。DO...LOOP は非常に多機能なので、慣れてくると多くの場面で活用できますよ! 🎉

これで繰り返し処理の基本はバッチリです!色々なパターンを試して、ループ処理をマスターしましょう!

コメント

タイトルとURLをコピーしました