プログラミング超初心者のための講座
 第3回 BASIC編「まわるまわるループ」


さて第3回が始まりましたよ。 忘れ物はないですか?

準備

前回つくったプログラムをLOADしてください。

10 PRINT "HELLO WORLD";
20 PRINT "THANK YOU"

さていつまでもハローじゃ飽きますから適当に変えますか、、、
こんな風にしてみましょうか

10 PRINT "ENJOY";
20 PRINT "BASIC"
30 END

はじめがあれば終わりがある

あれ?気づきましたか?1行増えてますね。
30行にENDというのがあります。

これはここでプログラムは終わりですよ。ここにきたら終了するんですよという合図です。
つまりENDの後に何が書いてあっても終わるんです。
たとえば以下のプログラムをRUNさせてみてください。

10 PRINT "ENJOY";
20 PRINT "BASIC"
30 END
40 PRINT "OH MY GOD!"

実行結果
RUN
ENJOYBASIC
OK

いかがですか?40行のPRINT分が実行されていませんね。

つまりENDは文字通りENDなんです。

しかし前回までENDと打ってないのに終了していましたね
あれは行末に来たらプログラム終了というルールがあるからです。
本来なら入れておいた方がよいのですが、問題がないので省略したのでした。
 

不要な行を消す

では今の40行はいりませんから、消してしまいましょう。

40(リターン)

これで消えます
意味的には「40行はなんにもなしですよ」というので上書きするので
結果40行が消えてしまうんです。

行の内容を書き換える

仮に20 PRINT "PC9821"(リターン)とすると
今打った内容で20行が上書きされるので

LISTとすると
10 PRINT "ENJOY";
20 PRINT "PC9821"
30 END

となるんですね。

RUNすると
ENJOYPC9821
となります。

まわるまわるループ

ここからが今回の本題です。
次のように変えてみましょう。

10 PRINT "ENJOY";
20 PRINT "BASIC"
30 GOTO 10

これはプログラムの流れを制御する命令です。
通常プログラムは何もなければ上から下へ順番に実行されます。

ところが30行を見てください。GOTO10とあります。
これは「10行にいけ」という命令です。
つまりPRINT "ENJOY";を実行してPRINT "BASIC"を実行した後
「10行にいけ」なのでまたPRINT "ENJOY"を実行します。
そして20行を実行して、またGOTO10なので10行へ戻って、、、、、
という流れになります。

これではいつまでたっても終わりませんよね。
そうなんです。終わらないんです。
これを永久ループといいます。

プログラムの流れ

スタート
 |
 V
10 PRINT "ENJOY";  <----+
 |                         |
 V                         |
20 PRINT "BASIC"       |
 |                         |
 V                         |
30 GOTO 10            |
 |                         |
 +------------->-----------+

これをRUNさせるとどうなるでしょうか?
ENJOYBASIC
ENJOYBASIC
ENJOYBASIC
ENJOYBASIC
ENJOYBASIC
ENJOYBASIC
ENJOYBASIC
ENJOYBASIC
ENJOYBASIC
ENJOYBASIC
ENJOYBASIC
ENJOYBASIC
ENJOYBASIC
ENJOYBASIC




と、永遠に表示し続けています。

機械は正直ですから人間がやれと言ったことはどんなことでもします。
たとえそれが自己破壊になることでもやります。
こうなったら、もうどうすることもできません。

これを止めるには強制終了させるしかありません
PC98シリーズをお使いの方は1番左上に[STOP]とかかれたキーがあります。
これを押してください。(DOS/Vの方はありませんので[Ctrl}+[Z]で代用できます。)

処理が止まったでしょう。

プログラムを無理矢理終わらせたわけです。

永久ループの怪

よくバグったって言いますよね。どんな状態でしょうか?
色々ありますが、こんあことはありませんか?
何を押してもきかなくなった。固まってしまったように無反応な状態。
ウインドウズではよくフリーズしたりしますよね。
ファミコンでもそうです。画面がめちゃくちゃになって止まってしまった。
などなど、、、、、一概にいえませんが永久ループも原因の1つです。

つまり普段は正常に動いているプログラムが何かの拍子に
飛んではいけないところへ飛んでしまって、最悪永久ループに入ってしまったわけです。

こうなると強制終了しかありませんが、プログラムによれば強制終了のキー入力も受け付けなくすることもできます。
正常に動いている場合、勝手に強制終了させられては逆に危険だからです。それが裏目に出て永久ループに入ったら
あとは本体をリセットするしかありません。ですから永久ループは怖いものです。

ところが、

意図的に永久ループを作ることは実は非常に多いのです。
これはプログラムのテクニックとして当たり前に使います。
世の中のプログラムでループのないプログラムは皆無に等しいでしょう。

この辺はまた後で学習しましょう。

まとめ

END でプログラム終了
GOTO 行番号 で好きな場所へとばすことができる。
 

練習課題

試しにこうしたらどうなるかわかりますか?

10 PRINT "ENJOY";
20 PRINT "BASIC";
30 GOTO 10

20行にセミコロンを追加しました。
実際に試してみてください。
そしてなぜそうなるか必ず理解しておいてください
 
 

では次回の講義をお楽しみに
さいなら

もどる



このページはNetscapeNavigator or Netscape Communicator 4.6で
きれいに見えるように作られています。そちらをお使いください。