基本情報【科目B】令和4年度サンプル問題問14(関数から関数):findRankの引数と戻り値を正確にトレースする

Uncategorized

基本情報技術者試験 科目Bの「令和4年度 サンプル問題 問14」(整列済み配列を要約する findRank・関数から関数の呼び出し)を、図解トレースで解説します。変数iが両方にあるので、区別がつく形でトレースしましょう。

動画で見たい方はこちら▼

問題(令和4年度 サンプル問題 問14)

次の記述中の〔 〕に入れる正しい答えを,解答群の中から選べ。
ここで,配列の要素番号は 1 から始まる。

要素数が 1 以上で,昇順に整列済みの配列を基に,配列を特徴づける五つの値を返すプログラムである。関数 summarize を summarize({0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1}) として呼び出すと,戻り値は〔 〕である。

○実数型: findRank(実数型の配列: sortedData, 実数型: p)
    整数型: i
    i ← (p × (sortedData の要素数 − 1)) の小数点以下を切り上げた値
    return sortedData[i + 1]

○実数型の配列: summarize(実数型の配列: sortedData)
    実数型の配列: rankData ← {}   /* 要素数0の配列 */
    実数型の配列: p ← {0, 0.25, 0.5, 0.75, 1}

    整数型: i
    for (i を 1 から p の要素数 まで 1 ずつ増やす)
        rankData の末尾に findRank(sortedData, p[i]) の戻り値を追加する
    endfor
    return rankData

解答群

ア {0.1, 0.3, 0.5, 0.7, 1}
イ {0.1, 0.3, 0.5, 0.8, 1}
ウ {0.1, 0.2, 0.3, 0.7, 1}
エ {0.1, 0.3, 0.4, 0.6, 1}
オ {0.1, 0.3, 0.4, 0.7, 1}
カ {0.1, 0.3, 0.4, 0.8, 1}
キ {0.1, 0.4, 0.6, 0.7, 1}
ク {0.1, 0.4, 0.6, 0.8, 1}

本番さながらの環境で解いてみたい方はこちら↓

解説

正解は ク {0.1, 0.4, 0.6, 0.8, 1} です。

①配列表の作成

sortedData

1 2 3 4 5 6 7 8 9 10
0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

p

1 2 3 4 5
0 0.25 0.5 0.75 1

②トレース表の作成

i i-f p

③1周目 i を 1 から p の要素数 まで 1 ずつ増やす

i (1〜5) i-f p
1

rankData の末尾に findRank(sortedData, p[i]) の戻り値を追加するfindRank(sortedData, p[i]) をトレースします。定義上は findRank(sortedData, p) なので、p に p[i] を代入します。

(なお、pも両方の関数にありますが、片方は配列なのでトレース表上にそのままpで問題ありません)

i (1〜5) i-f p
1 p[1]
0

(findRank)i ←(p ×(sortedData の要素数 − 1))の小数点以下を切り上げた値
i ←(0 ×(10 − 1))の小数点以下切り上げ
i ← 0

i (1〜5) i-f p
1 (0×(10−1))
0
p[1]
0

(findRank)return sortedData[i + 1]
(summarize)rankData の末尾に findRank(sortedData, p[i]) の戻り値を追加する
なので、

rankData

1
sortedData[0+1]
0.1

④2周目

i (1〜5) i-f p
1 (0×(10−1))
0
p[1]
0
2 (0.25×(10−1))
3
p[2]
0.25

(findRank)return sortedData[i + 1]
(summarize)rankData の末尾に findRank(sortedData, p[i]) の戻り値を追加する

1 2
sortedData[0+1]
0.1
sortedData[3+1]
0.4

⑤3〜4周目

i (1〜5) i-f p
1 (0×(10−1))
0
p[1]
0
2 (0.25×(10−1))
3
p[2]
0.25
3 (0.5×(10−1))
5
p[3]
0.5
4 (0.75×(10−1))
7
p[4]
0.75

rankData

1 2 3 4
sortedData[0+1]
0.1
sortedData[3+1]
0.4
sortedData[5+1]
0.6
sortedData[7+1]
0.8

最後に求めるのは rankData の値です。ここまでで合致するのは ク {0.1, 0.4, 0.6, 0.8, 1} のみです。

関連リンク

基本情報科目B-サンプル問題【全44問をがっつり解説】
※サンプル問題だけを解くのは,非効率です。詳細は以下の動画をご確認ください。 おすすめの学習順 サンプル問題(過去問・公開問題)だけを順に解くと、基礎を飛ばしがちになります。そこで、サンプル問題(★)を骨格にしつつ、合間に基礎固め(−)を挟...

関連動画

関数から関数を追う基礎が学べる、同じ章の動画です。

タイトルとURLをコピーしました