過去問解きまくり研究所 ホーム

令和6年度 科目B 問1

アルゴリズム

擬似言語に関する問題

次のプログラム中の[ ]に入れる正しい答えを,解答群の中から選べ。

関数maximumは,異なる三つの整数を引数で受け取り,そのうちの最大値を返す。

〔プログラム〕

○整数型: maximum(整数型: x, 整数型: y, 整数型: z)
  if ([ ])
    return x
  elseif (y > z)
    return y
  else
    return z
  endif
答えと解説を見る

✓ これが正解イ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を主語にした比較が二つそろっている条件を探すことです。

ほかの選択肢はなぜ違うのか

出典:令和6年度 基本情報技術者試験 科目B 問1

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)