令和6年度 科目B 問1
アルゴリズム
擬似言語に関する問題
次のプログラム中の[ ]に入れる正しい答えを,解答群の中から選べ。
関数maximumは,異なる三つの整数を引数で受け取り,そのうちの最大値を返す。
〔プログラム〕
○整数型: maximum(整数型: x, 整数型: y, 整数型: z)
if ([ ])
return x
elseif (y > z)
return y
else
return z
endif- アx > y
- イx > y and x > z
- ウx > y and y > z
- エx > z
- オx > z and z > y
- カz > y
答えと解説を見る
✓ これが正解イx > y and x > z
解説
xが残り二つのどちらよりも大きいときだけxを返す条件です。
関数maximumは、最初のifでxを返し、そこを通らなければyとzだけを比べて大きい方を返す作りです。軸になるのは、xを返してよいのはどんなときか、という一点です。xが最大値であるとは、xがyより大きく、しかもzより大きいことなので、二つの比較をandでつないだ x > y and x > z が空欄に入ります。
具体的な値で確かめます。(x, y, z)=(3, 1, 2) なら、3 > 1 も 3 > 2 も成り立つので3を返します。(1, 3, 2) なら条件は偽になり、elseif の y > z が真なので3を返します。(2, 1, 3) なら条件は偽、y > z も偽なので else に進み、zの3を返します。三つの値は互いに異なるので、どの並びでも最大の値が返ります。
逆に、xが最大なのに条件が偽になると、後ろの分岐はyとzしか見ないので、xを返す道がなくなります。xが最大でないのに条件が真になると、より大きい値を見落とします。つまり空欄の条件は、xが最大であるときにちょうど真になる必要があり、それを表すのが二つの比較の論理積(and)です。この形の選択処理では、先に書いた条件ほど厳しく絞る必要があります。
見分け方は、xを返すにはxが残り二つのどちらにも勝っていることが必要なので、xを主語にした比較が二つそろっている条件を探すことです。
ほかの選択肢はなぜ違うのか
- アx > y:x > y だけを条件にすると、zとの比較がありません。(x, y, z)=(2, 1, 3) では 2 > 1 が真なのでxの2を返してしまい、最大の3を取りこぼします。
- ウx > y and y > z:x > y and y > z は、x、y、zの順に大きい並びのときだけ真になります。(3, 1, 2) ではyがzより小さいので偽となり、else に進んでzの2を返すため、最大の3を返せません。
- エx > z:x > z だけではyとの比較が抜けています。(2, 3, 1) では 2 > 1 が真なのでxの2を返しますが、本当の最大はyの3です。
- オx > z and z > y:x > z and z > y は、x、z、yの順に大きいときだけ真です。(3, 2, 1) ではzがyより小さいため偽になり、elseif でyの2を返してしまい、最大の3は返りません。
- カz > y:z > y はxを一度も比べていないので、xを返してよいかの判定になりません。(1, 2, 3) では 3 > 2 が真となりxの1を返しますが、最大はzの3です。
出典:令和6年度 基本情報技術者試験 科目B 問1
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)