今回は、プログラムの基本要素である「条件分岐」、その中でも最も基本となる if文 を扱う。
if文の基本構文
擬似言語におけるif文の基本形は次の通りである。
if (条件式)
処理
endif条件式が真(true)のときだけ、インデントされた内側の処理が実行される。処理が終わったら endif で分岐の範囲を閉じる。
具体例として、「整数nが正の数かどうかを判定する」処理を見てみる。
○文字列型: hantei(整数型: n)
文字列型: kekka
kekka を "" とする
if (n が 0 より大きい)
kekka を "正の数" とする
endif
return kekkan が 0 より大きい という条件が真の場合のみ、kekka に "正の数" が代入される。条件が偽(falseとなる、つまりnが0以下)の場合は、kekka は初期値の ""(空文字列)のままreturnされる。
if〜else文
条件が偽の場合にも別の処理を行いたいときは、else を使う。
if (条件式)
処理A
else
処理B
endif条件式が真なら処理A、偽なら処理Bが実行される。両方が同時に実行されることはない。
○文字列型: hantei(整数型: n)
文字列型: kekka
if (n が 0 より大きい)
kekka を "正の数" とする
else
kekka を "0以下の数" とする
endif
return kekkaこの場合、nがどんな値であっても、kekka には必ずどちらかの文字列が代入される。「if文のみ」と「if〜else文」の違いは、すべてのケースをカバーしているかどうかという点にある。試験問題でも、else節の有無によって戻り値が変わるかどうかを問う設問が出ることがある。
条件式の書き方に慣れる
条件式には比較演算子(=、≠、<、>、≤、≥)に加え、論理演算子(and、or、not)を組み合わせることができる。
if ((n が 0 より大きい) and (n が 100 より小さい))
kekka を "1以上99以下" とする
endifand は両方の条件が真のときのみ全体が真になる。同様に or はどちらか一方でも真であれば全体が真になる。not は条件を反転させる。
if (not (n が 0 と等しい))
kekka を "0ではない" とする
endifこれは「nが0と等しくない場合」という条件と同じ意味になる。n ≠ 0 と書き換えても結果は同じであるため、試験問題では両方の表現が使われることを想定しておくとよい。
if文のネスト(入れ子)
if文の内側に、さらにif文を書くこともできる。これを「ネスト」と呼ぶ。
if (n が 0 より大きい)
if ((n mod 2) が 0 と等しい)
kekka を "正の偶数" とする
else
kekka を "正の奇数" とする
endif
else
kekka を "0以下の数" とする
endifネストが深くなると、どのif文とどのendifが対応しているのかを見失いやすくなる。試験本番では、インデントの深さを目印に、対応するif〜endifのペアを丁寧に確認することが重要である。次回扱う elseif を使うと、この手のネストをすっきり書き換えられる場合がある。
トレースの練習
hantei(-5) を実行した場合の流れを追ってみる。
n = -5 を受け取る
if (n が 0 より大きい) → -5 は 0 より大きくないので偽
else節を実行 → kekka を "0以下の数" とする
return "0以下の数"このように、条件式が真か偽かを一つずつ丁寧に確認しながら処理を追うことが、if文のトレース問題を解く基本姿勢になる。
学習のポイント
- if文だけの場合とif〜elseの場合の違いを意識する(elseがないと「何もしない」ケースが生まれる)
- 論理演算子(and, or, not)の組み合わせは、優先順位を意識しながら1つずつ分解して評価する
- ネストの対応関係は、インデントを頼りに丁寧に追う
まとめ
if文は「条件によって処理を分岐させる」という、プログラムの中でも特に基本的な構造である。今回学んだ基本形・else節・論理演算子の組み合わせ・ネストは、以降のelseif文や、より複雑な条件分岐を含む問題を読み解くための基礎になる。



コメント