はじめに
基本情報技術者試験(FE)を受験する人にとって、アルゴリズムとプログラミングの理解は必須である。
今回は、令和6年公開問題の科目Bに出題された「3つの整数から最大値を求める関数」について考察していく。
問題の概要
問題文では、関数 maximum
の実装を問われている。
この関数は、3つの整数 x, y, z
を引数に受け取り、最大値を返す仕様となっている。
プログラムの構造は以下のようになっている。
○整数型: maximum(整数型: x, 整数型: y, 整数型: z)
if ( ) ← ここに適切な条件を入れる
return x
elseif (y > z)
return y
else
return z
endif
最初の if
文に適切な条件を入れることが求められている。
解答群の考察
与えられた選択肢は次の通り。
選択肢 | 条件式 |
---|---|
ア | x > y |
イ | x > y and x > z |
ウ | x > y and y > z |
エ | x > z |
オ | x > z and z > y |
カ | z > y |
では、それぞれの条件を分析し、どれが正しいのか検証していこう。
正解の条件
最大値を求めるためには、最初のif
文で x が最大値であることを確実に判定する必要がある。
つまり、x
が y
と z
の両方よりも大きい場合 に x
を返せばよい。
この条件を満たすのは x > y and x > z
だ。
したがって、選択肢 「イ」 が正解となる。
なぜ他の選択肢は誤りなのか?
それぞれの選択肢について、どこが問題なのか詳しく見ていこう。
ア: x > y
→ x
が y
より大きくても z
との比較をしていないため、z
が x
より大きい場合に誤動作する。
例: x = 3, y = 2, z = 4
の場合、x > y
だが z
の方が大きいため、x
を返してはいけない。
ウ: x > y and y > z
→ x > y
であり、かつ y > z
の場合にのみ成り立つが、y
が z
より小さい場合に x
が z
より大きくても判定が通らない。
例: x = 5, y = 3, z = 4
の場合、y > z
が成り立たないため、誤判定となる。
エ: x > z
→ x
が z
より大きくても y
との比較をしていないため、y
の方が x
より大きいケースを考慮していない。
例: x = 3, y = 4, z = 2
の場合、x > z
は成り立つが、y
の方が大きいため誤判定となる。
オ: x > z and z > y
→ x > z
かつ z > y
の場合に成立するが、z
の値に依存しているため、y
の方が x
より大きいケースを考慮できていない。
例: x = 5, y = 4, z = 3
の場合、z > y
が成り立たないため、誤判定となる。
カ: z > y
→ この条件は elseif
で y > z
を評価するための前提条件として適しているが、最初の if
文には適していない。
結論
この問題では 「x が最大値である条件」 を適切に記述する必要がある。
そのため、最適な選択肢は 「イ: x > y and x > z
」 である。
補足: コードでの検証
もし Python で実装すると、次のように最大値を求めることができる。
def maximum(x, y, z):
if x > y and x > z:
return x
elif y > z:
return y
else:
return z
テストケースを実行してみよう。
print(maximum(3, 2, 4)) # 期待値: 4
print(maximum(5, 3, 4)) # 期待値: 5
print(maximum(1, 6, 2)) # 期待値: 6
print(maximum(7, 7, 7)) # 期待値: 7
このように x > y and x > z
という条件を最初に判定することで、3つの値の中から最大値を適切に選択できる。
まとめ
基本情報技術者試験では、単なる文法理解だけでなく、条件分岐の適切な設計 が求められる。
この問題は、条件式の適切な組み立て方を学ぶ良い例だ。
要点の整理
– if
文では x
が最大値であることを判定するため 「x > y and x > z」 を指定する必要がある。
– 他の選択肢は、それぞれ不完全な条件のため不適切。
– Python のコードで考えると、実装の正しさがよく理解できる。
アルゴリズムの本質を押さえておけば、どんな問題でも冷静に分析できるはずだ。試験本番でも、焦らずしっかりと条件を確認していこう。
コメント