HSP3 プログラミングの基礎T | |
(3) 制御文(条件判断)
プログラムは基本的に、上から下に向かって実行される。実行する順序を変える(制御する)命令を制御文という。
ここでは、変数の値や演算の結果など条件によって実行する部分を変える条件判断について学習する。
条件式が正しい(演算結果が0以外)ことを「真(しん)」、条件式が正しくない(演算結果が0)ことを「偽(ぎ)」という。
if 条件式 : 条件式が真のとき実行する命令
if 条件式 : 条件式が真のとき実行する命令 : else : 条件式が偽のとき実行する命令
C言語のように書くこともできる。{ から } までがひとつのグループとして処理される。
if 条件式 {
条件式が真のとき実行する命令 群
…
}else{
条件式が偽のとき実行する命令 群
}
条件式の結果 呼び方・表し方 条件式が正しい 真 1 true 条件式が正しくない 偽 0 fales
変数aの値が10かどうかを判定する。変数aは10とする。
a = 10 if a = 10 : mes "10です。" stop
「10です。」と表示される。
変数aを11に変更する。
a = 11 if a = 10 : mes "10です。" stop
何も表示されない。
変数aの値によって「10です。」、「10ではありません。」と表示するようにする。
a = 11 ;←値を変えて実行してみる。
if a = 10 : mes "10です。" : else : mes "10ではありません。"
stop
変数aの値によって「10です。」、「10ではありません。」と表示される。
変数aの値が10より小さいかどうかを判定する。「10より小さい。」、「10以上です。」と表示する。
a = 10 ;←値を変えて実行してみる。
if a < 10 : mes "10より小さい。" : else : mes "10以上です。"
stop
「10です。」と表示される。
条件式はいろいろな書き方ができる。
例 if a - 10 < 0 : mes "10より小さい。" : else : mes "10以上です。"
例 if a >= 10 : mes "10以上です。" : else : mes "10より小さい。"
例 if a < 11 : mes "10より小さい。" : else : mes "10以上です。" ←変数aが整数の場合だけ
変数aの値が10〜19の範囲内にあるかどうかを判定する。「範囲内です。」、「範囲外です。」と表示する。
a = 10 ;←値を変えて実行してみる。
if 10 <= a & a <= 19 :mes "範囲内です。" : else : mes "範囲外です。"
stop
「範囲内です。」と表示される。
10〜19は「10以上であり、かつ、19以下である。」ということである。「10以上であり」は「10 <= a」 、「19以下である。」は「a
<= 19」と条件式が書ける。「かつ」は論理積(and)なので 「&」または「and」 で表す。まとめると「10 <= a & a <= 19」となる。
書き方としては、「10 <= a」も「a >= 10」も同じであるのでいろいろな書き方が可能である。
比較演算子(<, >, <=, =>など)と論理演算子(and, orなど)は「(2)変数と計算」で示した通りである。比較演算の結果は「0(偽)」または「1(真)」になる。例えば、「条件式1 and 条件式2」 で、条件式1, 2ともに真の場合、「真 and 真」と表すことができ、さらに「1 and 1」と表せ、結果は1となる。
条件式の結果 条件式1 条件式2 結果 条件式の結果 条件式1 条件式2 結果 条件式1 and 条件式2
または
条件式1 & 条件式21 (真) 1 (真) 1 (真) 条件式1 or 条件式2
または
条件式1 | 条件式21 (真) 1 (真) 1 (真) 1 (真) 0 (偽) 0 (偽) 1 (真) 0 (偽) 1 (真) 0 (偽) 1 (真) 0 (偽) 0 (偽) 1 (真) 1 (真) 0 (偽) 0 (偽) 0 (偽) 0 (偽) 0 (偽) 0 (偽)
数学では10〜19は、10 ≦ a ≦ 19と書き表すので、「if 10 <= a <= 19 ・・・」と条件式を書きたいところだが、正しい結果は得られない。
条件式の演算子は<=だけなので左から順に処理される。例えば、変数aが12のときは、10 <= aの演算結果が1、次に、この演算結果1
<= 19の演算が処理され結果は1となる。したがって条件式全体の結果は1となり真と判定される。では、変数aが22のときは、10 <=
aの演算結果が1、次に、この演算結果1 <= 19の演算が処理され結果は1(真)となる。すなわち変数aの値にかかわらず真となる。
逆に、変数aの値が10〜19の範囲外にあるかどうかを判定する。
変数aが「10より小さい」、または「19より大きい」という判定になる。
a = 10 ;←値を変えて実行してみる。
if a < 10 | a > 19 :mes "範囲外です。" : else : mes "範囲内です。"
stop
変数aの値が正の場合、「正数です。」と表示し、10倍の値を計算して表示する。負数の場合、「負数です。」と表示し、-10倍の値を計算して表示する。
a = 10 ;←値を変えて実行してみる。
if a >= 0 {
mes "正数です。"
b = a * 10
mes b
}else{
mes "負数です。"
b = a * -10
mes b
}
stop
「正数です。」と表示され、計算結果の100が表示される。
これまで通り1行で書いても良いが、サンプルの方が見やすい。真のとき実行する部分と偽のとき実行する部分がはっきりしている。 if a >= 0: mes "正数です。": b = a * 10: mes b: else: mes "負数です。": b = a * -10: mes b |
2006, 2007 © Hiroshi Masuda |