|
計算式で、例えば割り算をしたい場合を考えます。
10 INPUT "A:";A
20 INPUT "B:";B
30 C = A / B
40 PRINT "A÷B=";C |
というような場合、Bに「0」を入力すると「ゼロで割り算しました!」というエラーが表示され、プログラムはそこで中断してしまいます。プログラムを自分で中断したい時に[STOP]キーを押して強制的に止めてしまう事は出来ますが、思いもしない所で中断されてしまうと大変です。
例えば「0」を入力した時に音を鳴らして終了したいとします。こういう場合は、
10 INPUT "A:";A
20 INPUT "B:";B
25 IF B=0 THEN BEEP:END
30 C = A / B
40 PRINT "A÷B=";C |
のようにします。
条件式が成立する場合(真の場合)、THEN以下の実行文を実行しましょう、というものです。
上記の場合は、「B=0」となっていますが、これは「Bが0に等しい場合」を意味します。条件式では、
= | 等しい |
<>、>< | 等しくない |
< | 小さい |
> | 大きい |
<=、=< | 小さいか等しい |
>=、=> | 大きいか等しい |
のような関係演算子が使えます。「A<>B」は「AはBと等しくない」、「A>B」は「AはBよりも大きい」を示します。「A+B>0」「A<(B+C)*D」のように書く事も出来ます。
条件が2つ以上ある場合、例えば、「Aは0と等しく、Bも0と等しい場合」や「Aは1と等しいか、又は、Bは1と等しい場合」のような場合には、「AND」や「OR」を使って表現出来ます。「A=0 AND B=0」や「A=1 OR B=1」のように書きます。XOR、IMP、EQVを使う事は余り無いかもしれません。NOT(否定)は、「NOT(A=0)」のように書き、これは「『Aは0に等しい』ことは無い」つまり、「Aは0に等しくない」を意味します。
AND | 論理積 |
OR | 論理和 |
NOT | 否定 |
XOR | 排他的論理和 |
IMP | 包含 |
EQV | 同値 |
上記の例で、「0」を入力したら「入力し直し」をする場合には下記のようにします。
10 INPUT "A:";A
20 INPUT "B:";B
25 IF B=0 THEN 20
30 C = A / B
40 PRINT "A÷B=";C |
25行目で、Bが0に等しい場合は、20行目に行け、という意味になります。これは「IF B=0 GOTO 20」とも書けますがこういう書き方をする人は余り居ないでしょう。
また、25行目から40行目をまとめて書きたい場合には以下のようになります。
10 INPUT "A:";A
20 INPUT "B:";B
30 IF B=0 THEN 20 ELSE C=A/B:PRINT "A÷B=";C |
ELSE以下は、条件式が成立しなかった場合に実行されます。ELSEつまり「その他の場合」を意味します。
IF 条件式 THEN 実行文1 ELSE 実行文2 |
余り1行に詰め込み過ぎるとややこしくなる場合もありますので、注意して下さい。C言語やPascal言語等のように、何行にもまたいで書く事は出来ませんので、プログラムが見難くなってしまいます。
分岐(ジャンプ)
IF文で行番号を指定すると「その行に行け」と指定出来ますが、IF文関係無くとも「ある行に行け」と指定する事が出来ます。「GOTO」文です。
例えば上記のプログラムは、1回計算すると終了しますが、何度も何度も実行したい場合には、
10 INPUT "A:";A
20 INPUT "B:";B
30 C = A / B
40 PRINT "A÷B=";C
50 GOTO 10 |
という風に書くと、50行目で「10行目に行け」となりますので、このプログラムは何度も何度も実行され、プログラムは終了しなくなります。これを「無限ループ」と呼びます。BASICインタプリタでは[STOP]キーを押すとプログラムを中断出来ますが、もし、コンパイラ型BASICでEXEプログラムにして実行すると、プログラムを終了させる事が出来ず、PCをリセットする以外に無い状況に成り得ます。Windowsでの場合は「強制終了」ですね。もっとも、Bに0を入力して、エラーが表示され中断される可能性もありますが、実際にどうなるかは分かりません。こういう無限ループを作ってはいけません。何らかの「終了条件」を入れるのが通例です。例えば、
10 INPUT "A:";A
20 INPUT "B:";B
25 IF A=0 OR B=0 THEN END
30 C = A / B
40 PRINT "A÷B=";C
50 GOTO 10 |
のようにして、25行目で、A又はBに「0」を入力したらプログラムを終了(END)させるようにします。
IF〜THENとGOTOを使って複雑なプログラムを綺麗に書く事も出来ます。(最後にENDがありますが、無くても構いません。プログラムの終わりまで行くと終了されます。)
10 INPUT "A:";A
20 INPUT "B:";B
25 IF B=0 THEN 70
30 C = A / B
40 PRINT "A÷B=";C
50 GOTO 10
60 ' --- END ---
70 BEEP
80 PRINT "プログラムを終了します。"
90 END |
ラベル
無味乾燥な行番号の代わりに「ラベル」を使う事が出来ます。ラベルは、「*START」「*EXIT」のように、自由な名前(予約語を除く)を付ける事が出来ます。名前の先頭には必ず「*」が付きます。半角英数字と小数点(.)が使えます。
5 *START
10 INPUT "A:";A
20 INPUT "B:";B
25 IF B=0 THEN *EXIT
30 C = A / B
40 PRINT "A÷B=";C
50 GOTO *START
60 ' --- END ---
65 *EXIT
70 BEEP
80 PRINT "プログラムを終了します。"
90 END |
|
|
バッチファイル
BASIC
1 2 3 4 5
6 7 8 9 A
B C D E F
G H I J
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
シェアウェア
Script!World
データベース
|