基本情報技術者試験の科目Bの公開問題を題材に,理論度数を求める処理について学習します。この問題では,二次元配列の行と列の合計を利用して,理論度数を求める処理を確認します。
令和7年度 基本情報技術者試験 公開問題 科目B 問5
問 次の記述中の 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
解答群
a | b | |
| ア | 44 | 33 |
| イ | 58 | 8 |
| ウ | 70 | 7 |
| エ | 75 | 2 |
| オ | 80 | 6 |
| カ | 80 | 8 |
| キ | 82 | 6 |
【解答】オ
【解説】
このプログラムは,集計結果から理論度数を計算する。理論度数は,病気Xにかかるかどうかと予防接種の有無に関係がないと仮定した場合に,各区分に何人いると考えられるかを表す値である。理論度数は,「行の合計 × 列の合計 ÷ 全体の合計」で求める。プログラムでは,dataの行番号rの要素の和と列番号cの要素の和を掛け,t(dataの全体の合計)で割った値を result[r,c] に格納している。data = {{82,6},{58,8}} の場合,tは全体の合計なので,
t = 82 + 6 + 58 + 8 = 154
となり,各要素について「行の合計 × 列の合計 ÷ 全体の合計」を計算すると,
result[1,1] = (82+6) × (82+58) ÷ 154 = 80
result[1,2] = (82+6) × (6+8) ÷ 154 = 8
result[2,1] = (58+8) × (82+58) ÷ 154 = 60
result[2,2] = (58+8) × (6+8) ÷ 154 = 6
となる。よって,resultは {{80,8},{60,6}} となるので,aは80,bは6である。
この問題のポイント
この問題から学べることは,
- 二次元配列の行の要素の和を求める方法
- 二次元配列の列の要素の和を求める方法
- 「行の合計 × 列の合計 ÷ 全体の合計」で理論度数を求める方法
- 二重のfor文で二次元配列の各要素を順番に計算する方法
です。特に,二次元配列の各要素について「行の合計 × 列の合計 ÷ 全体の合計」を計算し,resultに格納する処理を理解しておきましょう。
基本情報技術者試験の学習におすすめの参考書
基本情報技術者試験の合格を目指す方におすすめの参考書です。
学習のお役に立ちましたら
この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。
よろしければ、このサイトを応援いただけますと嬉しいです。
※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。


