ここまでのプログラムは、上から下へ全部の行を実行していました。ここからは条件によって、通る行と通らない行ができます。
第1部 擬似言語の教科書 地図+20回
G1擬似言語の地図(入口)G2-1変数と宣言G2-2データ型G2-3代入「←」G3-1部品を呼ぶ/戻るG3-2引数G3-3戻り値・手続と関数G4-1配列と要素番号G4-2配列の読み書きG5選択処理 ifG6-1繰返し forG6-2配列を for で回すG7繰返し whileG8-1算術演算子と優先順位G8-2and / or / notG9-12次元配列G9-22重ループG10大域変数と局所変数G11未定義G12-1演算子 . の読み方G12-2クラスとはG12-3コンストラクタ
読むときに迷うのは、たいてい1点だけです。条件が2つとも当てはまるのに、なぜ片方しか動かないのか。そこが分かれば、この形は読めます。
分かれ道 ── 条件によって、通る道が変わる
選択処理は分かれ道だと思ってください。道の入口に立て札があり、そこに書かれた条件を満たすときだけ、その道に入れます。
この回は、点数からランクを決める1本で通します。まずいちばん短い形から。
整数型: ten ← 85 if (ten ≧ 80) "優" を出力する endif "おわり" を出力する
ten は 85 です。立て札には「80 以上」と書いてあるので、通れます。1行ずつ追うと、こうなります。
| 実行した行 | 何が起きるか | 出力 |
|---|---|---|
整数型: ten ← 85 |
ten に 85 が入る |
— |
if (ten ≧ 80) |
85 ≧ 80 を調べる → 真。中へ入る | — |
"優" を出力する |
中の行を実行する | 優 |
endif |
分かれ道が終わる | — |
"おわり" を出力する |
分かれ道の外なので、必ず実行される | おわり |
条件が偽だったら
ten が 50 だったとします。50 ≧ 80 は偽なので、この道には入れません。
"優" を出力する実行されない(飛ばされる)
"おわり" を出力する実行される(分かれ道の外)
出力は おわり だけ。endif より下は、条件に関係なく必ず通ります。どこまでが分かれ道の中なのかを、まず見てください。
次のプログラムは何を出力しますか。
整数型: kazu ← 3 if (kazu ≧ 10) "たくさん" を出力する endif "みかん" を出力する
else ── どの条件にも当てはまらなかったとき
さっきの形だと、80 未満のときは何も出ませんでした。「当てはまらなかったとき」の道を用意するのが else です。
整数型: ten ← 50 if (ten ≧ 80) "優" を出力する else "可" を出力する endif
50 ≧ 80 は偽なので、else の道に入ります。出力は 可。
else には立て札が無い
else の行に条件は書かれていません。「上の条件が全部偽だったとき」という条件が、書かれずにそこにあります。
だから else は必ずいちばん下で、1つしか書けません。「どれにも当てはまらなかった」は1通りしかないからです。
次のプログラムで、実行が else の道に来ました。この時点で a について確実に言えることはどれですか。
if (a > 5) "大" を出力する else "小" を出力する endif
elseif ── 3つ以上に分かれるとき
ランクを優・良・可の3つに分けたい。道を1本増やします。それが elseif です。
整数型: ten ← 75 if (ten ≧ 80) "優" を出力する elseif (ten ≧ 60) "良" を出力する else "可" を出力する endif
ten は 75。1つ目の立て札は通れません(75 ≧ 80 は偽)。次の立て札を見ると 75 ≧ 60 は真なので、そこに入ります。出力は 良。
上から順に見て、最初に通れる道へ。入ったら、残りは読みもしない
点数を変えると、通る道が変わります。1行ずつ動かして確かめてください。
点数を変えると、通る道が変わる
当サイトオリジナルの例題
ループ開始前
いま計算していること
変数の状態
出力
トレース表(進めると1行ずつ積み上がります)
ten が 60 のとき、次のプログラムは何を出力しますか。
if (ten ≧ 80) "優" を出力する elseif (ten ≧ 70) "良" を出力する else "可" を出力する endif
評価の順番 ── 最初に通れた道に入ったら、残りは読まない
ここがこの回のいちばん大事なところです。条件が2つとも当てはまっても、実行されるのは1つだけです。
さきほどのプログラムに ten ← 85 を入れてみます。
85 のとき、何が起きているか
if (ten ≧ 80)真。この道に入る → "優" を出力
elseif (ten ≧ 60)調べもしない(読みもせずに飛ばす)
else来ない
85 ≧ 60 も真になる条件です。それでも "良" は出ません。最初に通れた道に入ったら、残りの立て札は読みもしないからです。
IPAの決めごとにも、そのまま書かれています。
出典:IPA「擬似言語の記述形式」
-
if (条件式1) 処理1 elseif (条件式2) 処理2 elseif (条件式n) 処理n else 処理n+1 endif
- 選択処理を示す。
条件式を上から評価し,最初に真になった条件式に対応する処理を実行する。以降の条件式は評価せず,対応する処理も実行しない。どの条件式も真にならないときは,処理n+1を実行する。
各処理は,0 以上の文の集まりである。
elseif と処理の組みは,複数記述することがあり,省略することもある。
else と処理n+1の組みは一つだけ記述し,省略することもある。
「以降の条件式は評価せず」── 立て札を読みもしない、と書いてあります。
整数型: n ← 7 のとき、次のプログラムで一度も調べられない条件はどれですか。
if (n > 3) "A" を出力する elseif (n > 5) "B" を出力する elseif (n > 6) "C" を出力する endif
条件の書き方 ── 6つの比べ方と、境界
立て札に書けるのは、真か偽かが決まるものです。よく出るのは次の6つです。
| 書き方 | 読み方 | x が 5、y が 5 のとき |
|---|---|---|
x = y |
x と y は等しい | 真(等しい。代入ではありません) |
x ≠ y |
x と y は等しくない | 偽 |
x > y x < y |
より大きい/より小さい | どちらも偽(等しいので) |
x ≧ y x ≦ y |
以上/以下 | どちらも真(等しいときも含む) |
ten がちょうど 80 のとき、ten ≧ 80 なら真、ten > 80 なら偽です。この1点だけで、通る道が変わります。
出題は、この境界ちょうどの値を渡してきます。条件を読むときは、≧ なのか > なのかを必ず見てください。
(令和5年度 基本情報技術者試験 科目B 公開問題 問1)
if (divideFlag が true と等しい)
記号ではなく日本語で書かれることがあります。divideFlag は論理型の変数なので、「その中身が true かどうかを調べる」と読みます。書いてあるとおりに読めば、それが条件です。
整数型: x ← 5 のとき、次のプログラムは何を出力しますか。
if (x > 5) "A" を出力する else "B" を出力する endif
書き方のまとめ
いくつ書けるか、省略できるかを並べておきます。記述形式が定めているとおりです。
| 部品 | いくつ書けるか | 省略できるか |
|---|---|---|
if |
1つだけ(分かれ道の始まり) | できない |
elseif |
いくつでも | できる(0個でよい) |
else |
1つだけ。必ずいちばん下 | できる |
endif |
1つだけ(分かれ道の終わり) | できない |
つまずきポイントまとめ
| まちがえ方 | 正しい理解 |
|---|---|
| 条件に当てはまる枝を全部実行すると思う | 最初に真になった1つだけ。残りは調べもしない |
endif より下も分かれ道の中だと思う |
endif より下は条件に関係なく必ず通る |
else からは何も分からないと思う |
上の条件が全部偽だったことが確定している |
> を「以上」と読む |
以上は ≧。境界ちょうどで結果が逆になる |
= を代入だと思う |
代入は ←。= は等しいか調べるほう |
次に読む
この記事で引用した資料
- 擬似言語の記述形式 科目Bの公開問題・サンプル問題の各冊子に掲載。冊子上の名称は年度により「基本情報技術者試験用」と「基本情報技術者試験,応用情報技術者試験用」があるが、本文は同一
- 令和5年度 基本情報技術者試験 科目B 公開問題(2023年7月6日公開)
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。
点数からランクを決めるプログラムと、練習問題は当サイトのオリジナルです。実際の出題からは、条件式の1行だけを引用しています。

