2.プログラムの制御
(1)条件分岐(if文,switch文)
制御構造を持たないプログラムは,上から下ヘ,左から右へ向かって実行
される。しかし,定められた条件によって複数の選択肢から1つを選び,そ
れを実行する場合もある。このような処理を実行するために,if文,switch文
などがある。
(a) if文〜条件式が成立するか否か(即ち,”真”か”偽”か)を評価して,条件付き
の実行や分岐を行うフロー制御ステートメント。
if 条件式A
ステートメントブロック 1 →条件式Aが成立する場合(真の場合)に実行
elseif 条件式B
ステートメントブロック 2 →条件式Bが成立する場合(真の場合)に実行
elseif 条件式C
ステートメントブロック 3 →条件式Cが成立する場合(真の場合)に実行
else
ステートメントブロック 4 →上の条件のいずれにも該当しない場合に実行
end
ステートメントブロックは,1行以上の複数のステートメントから成る。
if文のバリエーション
バリエーション1(elseif文が省略された場合)
if 条件式A
ステートメントブロック 1
else
ステートメントブロック 2
end
バリエーション2(elseif文,else文が省略された場合)
if 条件式A
ステートメントブロック 1
end
バリエーション3(if文が二重にネストされた場合)
if 条件式A
ステートメントブロック 1
else
if 条件式B
ステートメントブロック 2
else
ステートメントブロック 3
end
end
上の例はネストしない形式でも記述できる。
例1) if x>xmax
xmax=x;
end
・・・もし,xがxmaxよりも大きいならば,xmaxにxの値を代入
例2) if x>=60
a='OK';
else
a='NG';
end
・・・もし,xが60以上ならば文字変数aにOK,そうでないならばNGを代入
関係演算子(数値や文字列の大小関係を比較)
関係演算子 意味
== 等しい
~= 等しくない
> より大きい
< より小さい
>= 以上
<= 以下
※ if文の等号(==)は論理的に等しいことを意味し,算術代入文のそれ
は変数に値を代入することを意味する。
論理演算子(複数の条件式を組み合わせて,複雑な条件式を作る場合に使用)
論理演算子 意味
&& 論理積(かつ)
| | 論理和(または)
(b) switch case文〜switch_exprの値に従って,複数のステートメント
ブロックを実行するフロー制御ステートメント
switch switch_expr switch_expr:switch_exprとしてスカラーまたは
case case_expr_1 文字列がくる。
ステートメントブロック 1
もし,case_expr_1がswitch_exprと一致するならば
ステートメントブロック 1を実行
case case_expr_2
ステートメントブロック 2
otherwise
ステートメントブロック 3
end
例) temp=input('temp=');
switch temp
case 0
disp('cold')
case 10
disp('cool')
case 20
dsip('warm')
case 30
disp('hot')
otherwise
disp('There is
an error in this input data')
end
<switch case文とif文の違い>
switch case文→ひとつのswitch_exprを評価した結果に従い,分岐する。
if文→1つ以上,複数の別々の式を評価して分岐出来る。
(なお,switch
case文はif文を用いても記述出来る。)
(2)繰り返し制御文(for〜end文,while〜end文)
繰り返しを行うためのループは,プログラムの一連のステートメントを必要な
回数だけ実行させるものである。ループは簡潔で分かりやすいプログラムを記述
するために極めて有効である。
この繰り返し制御と先の条件分岐は,プログラムの作成上最も重要な役割を果
たし,これらを自由自在に用いてはじめて有用なプログラムを記述出来る。
(a) for〜end文 :指定回数分,繰り返し計算を実行
for ループ変数 =初期値:[増分値]:最終値
繰り返される →ループ変数を初期値から増分値ずつ増し,
ステートメントブロック 最終値になるまで繰り返す。
end
増分値を省略した場合は,デフォルトの増分値は+1
と見做される。常にループの先頭でループ変数と最終
値を比較する。このため初期値の与え方によっては,
ループが全く実行されない場合もある。ループの外に
出たとき,ループ変数は最終値の値をとる。
例) t=0;
for ii=1:100 繰り返し計算が終了すると,変数
t=t+x(ii); t に x(1)〜x(100)の合計値
end が代入されている。
多重ループ〜ループは,次のように多重構造とすることが出来る。この場合,
ループ変数は内側のループから先にカウントされる。
例1) for ii=1:100
for jj=1:10
for k=1:50
ステートメントブロック
end %このループを終えたらkの値は50となっている
for m=1:20
ステートメントブロック
end
end
end
例2) 間違いの例(互いのループが交差するようなネストのさせ方はしない)
for ii=1:100
for jj=1:300
end %ii
end %jj
※ for〜end文からの抜け出し →ループ内でbreak文を実行する。
多重ループ内にbreak文がある場合には該当
ループのみを終了する。
例) s=0;
for ii=1:100
s=s+ii;
if s>100
break
end
end
sが100を越えたらforループから抜ける。
(b) while文〜不定回数の繰り返し
while 条件式
ステートメントブロック 条件式が成立している間(真である間),
end 繰り返し実行
プログラミングのトップページへ戻る