ITの基礎知識|ITパスポート・基本情報

基本情報技術者 令和7年公開問題 科目B 問5

2026.06.05

科目Bに共通する注意事項(表記ルールなど)については、下記のリンク先を参照してください。

基本情報技術者 令和7年公開問題 科目Bの注意事項


問題

次の記述中の【  a  】と【  b  】に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。

予防接種の病気X に対する予防効果を調査するために集めたデータの集計結果を基に,病気X にかかるかどうかが,予防接種の有無に影響されないと仮定した場合の人数を計算する。この人数を理論度数という。表1 に集計結果の例を示し,表2 に表1を基に計算した理論度数を示す。

関数f は,引数data で受け取った集計結果を基に計算した理論度数を返す。引数と戻り値は二次元配列で,その行が表の行,その列が表の列に対応する。

[プログラム]

○実数型の二次元配列: f(実数型の二次元配列: data)
  実数型: t ← dataの要素の和
  整数型: row ← dataの行数
  整数型: col ← dataの列数
  実数型の二次元配列: result ← {row行col列の 未定義の値}
  整数型: r, c
  for (r を 1 から row まで 1 ずつ増やす)
    for (c を 1 から col まで 1 ずつ増やす)
      result[r, c] ← (dataの行番号rの要素の和) ×
                      (dataの列番号cの要素の和) ÷ t
    endfor
  endfor
  return result

 

解答群

Show answer

解答

解説

理論度数とは

2 つの要因(予防接種の有無・病気への罹患)が「互いに独立(無関係)」と仮定したとき,期待される人数のことです。カイ二乗検定で使われます。

計算式:

$ \text{理論度数}[r, c] = (\text{行}r \text{の合計} \times \text{列}c \text{の合計}) \div \text{総計} $

これは、プログラム上の以下の部分の処理を計算式に直したものとなる。

result[r, c] ← (dataの行番号rの要素の和) ×
                (dataの列番号cの要素の和) ÷ t

問のプログラムは、この計算を表の全セルに対して実行するような処理となっている。

各合計値を計算する

総計 t = 82 + 6 + 58 + 8 = 154

行の合計:
  • 行1(予防接種あり):82 + 6 = 88
  • 行2(予防接種なし):58 + 8 = 66
列の合計:
  • 列1(かからなかった):82 + 58 = 140
  • 列2(かかった):6 + 8 = 14
a と b の位置を確認

表2 で実際に表示されているセルは次の 2 か所です。

  • a:行1(予防接種あり)× 列1(かからなかった)= result[1, 1]
  • b:行2(予防接種なし)× 列2(かかった)= result[2, 2]

残りの 2 か所(result[1,2] と result[2,1])は「網掛け(表示なし)」です。

計算
  • $ a = \text{result}[1,1] = (88 \times 140) \div154 = 12320 \div 154 = 80 $
  • $ b = \text{result}[2,2] = (66 \times 14) \div 154 = 924 \div154 = 6 $

よって a = 80,b = 6,正解は オ です。