科目B

基本情報技術者試験 科目B サンプル問題(2022年4月公表) 問5

次のプログラム中の に入れる正しい答えを,解答群の中から選べ。 任意の異なる 2 文字を c1,c2 とするとき,英単語群に含まれる英単語において,c1 の次に c2 が出現する割合を求めるプログラムである。英単語は,英小文字だけから成る。英単語の末尾の文字が c1 である場合,その箇所は割合の計算に含めない。例えば,図に示す 4 語の英単語“importance”,“inflation”,“information”,“innovation”から成る英単語群において,c1 を“n”,c2 を“f”とする。英単語の末尾の文字以外に“n”は五つあり,そのうち次の文字が“f”であるものは二つである。したがって,求める割合は,2 ÷ 5 = 0.4 である。c1 と c2 の並びが一度も出現しない場合,c1 の出現回数によらず割合を 0 と定義する。 〔図〕 4 語から成る英単語群の例 4 語を縦に並べ,各単語中の“n”を枠で囲んで注記した図。 ・importance:7 文字目の n に「次の文字は“c”」 ・inflation:2 文字目の n に「次の文字は“f”」,末尾の n は枠で囲まれ線でつながる ・information:2 文字目の n に「次の文字は“f”」,末尾の n は枠で囲まれ線でつながる ・innovation:2 文字目の n に「次の文字は“n”」,3 文字目の n に「次の文字は“o”」,末尾の n は枠で囲まれ線でつながる ・3 語の末尾の n をつなぐ線に「割合の計算に含めない」 プログラムにおいて,英単語群は Words 型の大域変数 words に格納されている。クラス Words のメソッドの説明を,表に示す。本問において,文字列に対する演算子“+”は,文字列の連結を表す。また,整数に対する演算子“÷”は,実数として計算する。 表 クラス Words のメソッドの説明
メソッド戻り値説明
freq(文字列型: str)整数型英単語群中の文字列 str の出現回数を返す。
freqE(文字列型: str)整数型英単語群の中で,文字列 str で終わる英単語の数を返す。
〔プログラム〕
大域: Words: words  /* 英単語群が格納されている */

/* c1の次にc2が出現する割合を返す */
○実数型: prob(文字型: c1, 文字型: c2)
  文字列型: s1 ← c1の1文字だけから成る文字列
  文字列型: s2 ← c2の1文字だけから成る文字列
  if (words.freq(s1 + s2) が 0 より大きい)
    return  
  else
    return 0
  endif
答えを選ぶ

出典:基本情報技術者試験 科目B サンプル問題(2022年4月公表) 問5(問題文は IPA の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)

科目Bの解き方と全問の一覧

解説に誤りを見つけたら、解説の誤りを報告してください。

答えと解説を見る

正解:ウ

覚える知識

出現割合の計算(分母から末尾の出現を除く)

「A のうち B である割合」は B の件数 ÷ A の件数で求める。分母には、数えない箇所(ここでは単語末尾の c1)を除いた件数を使う。

この問題で必要なこと

求める割合は「c1 の次に c2 が来た回数 ÷ 末尾以外にある c1 の回数」。分子は freq(s1+s2)。分母は c1 の全出現回数 freq(s1) から、c1 で終わる単語の数 freqE(s1) を引いたもの。例では 2 ÷ (8−3) = 0.4 となり問題文と一致するので、正解はウ。

ひっかけ

ア・イは分子と分母が逆。イ・エは分母を c2 の出現回数にしており、どの文字を基準に割合をとるかを取り違えている。