基本情報技術者試験の科目Bのサンプル問題を題材に,2つの並びがどの程度一致しているかを表す一致率を求める処理について学習します。この問題では,同じ要素番号の要素を順番に比較し,一致した要素の割合から一致率を求める処理を確認します。
(令和4年度12月公開) 基本情報技術者試験 サンプル問題 科目B 問12
問 次のプログラム中の に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。
関数 simRatio は,引数として与えられた要素数1以上の二つの文字列の配列 s1 と s2 を比較し,要素数が等しい場合は,配列の並びがどの程度似ているかの指標として,(要素番号が同じ要素の文字同士が一致する要素の組みの個数 ÷ s1の要素数)を実数型で返す。例えば,配列の全ての要素が一致する場合の戻り値は1,いずれの要素も一致しない場合の戻り値は0である。
なお,二つの配列の要素数が等しくない場合は,-1を返す。
関数 simRatio に与える s1,s2 及び戻り値の例を表に示す。プログラムでは,配列の領域外を参照してはならないものとする。
〔プログラム〕
○実数型: simRatio(文字型の配列: s1,文字型の配列: s2)
整数型: i,cnt ← 0
if (s1の要素数 ≠ s2の要素数)
return -1
endif
for (i を 1 から s1の要素数 まで 1 ずつ増やす)
if ( )
cnt ← cnt + 1
endif
endfor
return cnt ÷ s1の要素数 /* 実数として計算する */
解答群
| ア s1[i] ≠ s2[cnt] | イ s1[i] ≠ s2[i] |
| ウ s1[i] = s2[cnt] | エ s1[i] = s2[i] |
【解答】エ
【解説】
simRatio は,2つの配列について,同じ要素番号の要素がどの程度一致しているかを調べ,一致率を求める処理である。for文では,変数 i を1から s1の要素数まで1ずつ増やしながら,s1[i] と s2[i] を比較している。このとき,2つの配列の同じ要素番号の要素が一致した場合に cnt を1増やすので,空欄には s1[i] = s2[i] が入る。
例えば,s1 と s2 の5個の要素のうち,同じ要素番号の要素が2個一致した場合,cnt は2となる。その後,cntをs1の要素数である5で割ることで,一致率は 2 ÷ 5 = 0.4 となる。
この問題のポイント
この問題から学べることは,
- 2つの並びを比較して一致率を求める方法
- 同じ要素番号の要素が一致した個数を数える方法
- 一致した個数から一致率を計算する方法
- 条件に該当しない場合に,特定の値を返す処理
です。特に,同じ要素番号の要素を順番に比較し,一致した場合だけ cnt を1増やすことで,一致した要素の割合を求める処理を理解しておきましょう。
基本情報技術者試験の学習におすすめの参考書
基本情報技術者試験の合格を目指す方におすすめの参考書です。
学習のお役に立ちましたら
この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。
よろしければ、このサイトを応援いただけますと嬉しいです。
※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。


