2.プログラムの制御
(1)条件分岐(IF文,SELECT CASE文)
制御構造を持たないプログラムは,上から下ヘ,左から右へ向かって実行
される。しかし,定められた条件によって複数の選択肢から1つを選び,そ
れを実行する場合もある。このような処理を実行するために,IF文,
SELECT…CASE文などがある。
(a) IF文〜条件式が”真”か”偽”かを評価した結果に基づいて,条件付き
の実行や分岐を行うフロー制御ステートメント。
(条件式は,計算結果として常に”真”の場合−1,”偽”の場合0を返す。論理式またはブール式とも呼ばれる。)
構文1:(ブロック形式)
IF 条件式A THEN
ステートメントブロック 1 →条件式Aが真の場合に実行
ELSEIF 条件式B THEN
ステートメントブロック 2 →条件式Bが真の場合に実行
ELSEIF 条件式C THEN
ステートメントブロック 3 →条件式Cが真の場合に実行
ELSE
ステートメントブロック 4 →上の条件のいずれにも該当しない場合に実行
END IF
ステートメントブロックは,1行以上の複数のステートメントから成る。
ブロック形式のIF文には,様々なバリエーションがある。
バリエーション1(ELSEIF文が省略された場合)
IF 条件式A THEN
ステートメントブロック 1
ELSE
ステートメントブロック 2
END IF
バリエーション2(ELSEIF文〜ELSE文が省略された場合)
IF 条件式A THEN
ステートメントブロック 1
END IF
バリエーション3(ブロック形式が二重にネストされた場合)
IF 条件式A THEN
ステートメントブロック 1
ELSE
IF 条件式B THEN
ステートメントブロック 2
ELSE
ステートメントブロック 3
END IF
END IF
上の例はネストしない形式でも記述できる。
構文2(1行形式)
IF 条件式 THEN 文1 ELSE 文2
条件式が真ならば,文1を実行。偽ならば,文2を実行。
例1) IF x>xmax THEN xmax=x
・・・もしxがxmaxよりも大きいならば,xmaxにxの値を代入
例2) IF x>=60.THEN a$=”OK” ELSE a$=”NG”
・・・もしxが60.以上ならば文字変数a$にOK,そうで
ないならばNGを代入
・関係演算子(数値や文字列の大小関係を比較)
関係演算子 意味
= 等しい
<> 等しくない
> より大きい
< より小さい
>= 以上
<= 以下
※ IF文の等号(=)は論理的に等しいことを意味し,算術代入文のそれ
は変数に値を代入することを意味する。
・論理演算子(複数の条件式を組み合わせて,複雑な条件式を作る場合に使用)
論理演算子 意味
AND 論理積(かつ)
OR 論理和(または)
NOT 否定(オペランドのビットを反転)
(b) SELECT CASE文〜テスト式の値に従って,複数のステートメント
ブロックを実行するフロー制御ステートメント
SELECT CASE テスト式 テスト式:テスト式として変数名,数式,文字式がくる。
CASE <式1> 式1:テスト式と同じデータ型の1つまたはそれ以上の数値,式で指定する。
ステートメントブロック 1
CASE <式2>
ステートメントブロック 2
CASE ELSE
ステートメントブロック 3
END SELECT
例) INPUT ”Temperature=”;temp
SELECT CASE temp
CASE IS <= 10
PRINT ”cold”
CASE 11 TO 16
PRINT ”cool”
CASE 17 TO 28
PRINT ”warm”
CASE IS >= 29
PRINT ”hot”
CASE ELSE
PRINT ”There
is an error in this input data”
END SELECT
※アンダーラインで示したCASE以下の<式>の表記は,大きく3通りある。
・CASE 式1[,式2,式3,・…] →テスト式の値が式1又は式2……
又は式nに等しいならば,すぐ下
のステートメントブロックを実行
・CASE 式1 TO 式n →テスト式の値が式1から式nまでの
値に等しいならばすぐ下のステート
メントブロックを実行
・CASE IS 関係演算子 式 →テスト式の値と式の大小関係を比較
して真ならばすぐ下のステートメント
ブロックを実行
<SELECT CASE文とブロック形式のIF文の違い〉
SELECT CASE文→1つの式を評価した結果に従い,分岐する。
ブロック形式のIF文→1つ以上,複数の別々の式を評価して分岐出来る。
(なお,SELECT CASE文はブロック形式のIF文
を用いても記述出来る。)
問題 QBアドバイザーを活用して,SELECT CASE文の関連項目 ON…GOSUB
,ON…GOTO文に関するヘルプ画面を印刷し,その使用方法を理解せよ。
なお,Quick Basic Handbook P20〜21にSELECT CASE文との比較が記されている。
(2)繰り返し制御文(FOR〜NEXT文,その他)
繰り返しを行うためのループは,プログラムの一連のステートメントを必要な
回数だけ実行させるものである。ループは簡潔で分かりやすいプログラムを記述
するために極めて有効である。
この繰り返し制御と先の条件分岐は,プログラムの作成上最も重要な役割を果
たし,これらを自由自在に用いてはじめて有用なプログラムを記述出来る。
(a) FOR〜NEXT文 :指定回数分,繰り返し計算を実行
FOR ループ変数 =初期値 TO 最終値 [STEP 増分値]
繰り返される →ループ変数を初期値から増分値ずつ増し,
ステートメントブロック 最終値になるまで繰り返す。
NEXT ループ変数
STEP以下を省略した場合は,デフォルトの増分値は1と見倣される。
常にループの先頭でループ変数と最終値を比較する。このため初期値
の与え方によっては,ループが全く実行されない場合もある。
例) t=0.
FOR i=1 TO 100 繰り返し計算が終了すると,変数
t=t+x(i) t に x(1)〜x(100)の合計値
NEXT i が代入されている。
多重ループ〜ループは,次のように多重構造とすることが出来る。この場合,
ループ変数は内側のループから先にカウントされる。
例1) FOR i=1 TO 100
FOR j=1 TO 10
FOR k=1 TO 50
NEXT k
FOR m=1 TO 20
NEXT m
NEXT j
NEXT i
例2) 間違いの例(理由:互いのループが交差している)
FOR i=1 TO 100
FOR j=1 TO 300
NEXT i
NEXT j
※ FOR〜NEXT文からの抜け出し →ループ内でEXIT FOR文を実行
する。抜けた後はNEXTの次の文に制御が移る。
例) IF s>100 THEN EXIT FOR
sが100を越えたらループから抜ける。
(b)その他の繰り返し制御文
@ WHILE〜WEND文
WHILE 条件式
ステートメントブロック 条件式が真である間,繰り返し実行
WEND
A DO WHILE〜LOOP文,DO〜LOOP WHILE文
DO WHILE 条件式
ステートメントブロック 条件式が真である間,繰り返し実行
LOOP 上のWHILE〜WEND文に同じ
DO
ステートメントブロック 条件式に拘らず最初の1回は実行,
LOOP WHILE 条件式 その後は上記に同じ
B DO UNTIL〜LOOP文,DO〜LOOP UNTIL文
DO UNTIL 条件式 条件式が真になるまで繰り返し実行
ステートメントブロック (条件式成立でループを抜ける)
LOOP
DO
ステートメントブロック 条件式に拘らず最初の1回は実行,
LOOP UNTIL 条件式 その後は上記に同じ
※ DO〜LOOPからの抜け出し→ループ内のEXIT DO文を実行
問題 その他の繰り返し制御文に掲げたヘルプ画面を印刷し,使用方法について理解せよ。
なお,Quick Basic Programming Guide P81〜88,Handbook P29〜33も参照せよ。
目次へ戻る