基礎文法その3

FE科目B演習問題3の解答、解説ページです。

問題文

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

関数 makeNewArray は,要素数 2 以上の整数型の配列を引数にとり,
整数型の配列を返す関数である。関数 makeNewArray を makeNewArray({3, 2, 1, 6, 5, 4})として呼び出したとき,戻り値の配列の要素番号 5 の値は 〔空欄〕 となる。

〔プログラム〕
○整数型の配列: makeNewArray(整数型の配列: in)
    整数型の配列: out ← {} // 要素数0の配列
    整数型: i, tail
    outの末尾 に in[1]の値 を追加する
    for (i を 2 から inの要素数 まで 1 ずつ増やす)
        tail ← out[outの要素数]
        outの末尾 に (tail + in[i]) の結果を追加する
    endfor
    return out
解答群
選択肢答え
5
6
9
11
12
17
21

解答

選択肢答え
17

解説

関数、配列、繰り返しといったプログラミングの基礎についての理解を問う問題です。
また、本解説では黄マーカーはセットされた値に、青マーカーは確認している値に引いています。

このプログラムでは、上図のように、配列を受け取ってプログラムが動き始めます。
○整数型の配列: makeNewArray(整数型の配列: in)
この関数の定義部分でinという名前で配列を受け取っています。

○整数型の配列: makeNewArray(整数型の配列: in)
    整数型の配列: out ← {} // 要素数0の配列
    整数型: i, tail

ここまで実行された時点で各変数は下記のような状態になっています。

inoutitail
{3, 2, 1, 6, 5, 4}{}不定不定

次の行が実行されたとき、変数の値は下記のようになります。

outの末尾 に in[1]の値 を追加する
inoutitail
{3, 2, 1, 6, 5, 4}{3}不定不定

次にfor文によって行われる部分の各変数値の変化を確認します。

for (i を 2 から inの要素数 まで 1 ずつ増やす)
    tail ← out[outの要素数]
    outの末尾 に (tail + in[i]) の結果を追加する
endfor
inoutitail備考
{3, 2, 1, 6, 5, 4}{3}2不定1回目のfor (i を 2 から inの要素数 まで 1 ずつ増やす)
{3, 2, 1, 6, 5, 4}{3}231回目のtail ← out[outの要素数]
{3, 2, 1, 6, 5, 4}{3, 5}231回目のoutの末尾 に (tail + in[i]) の結果を追加する
{3, 2, 1, 6, 5, 4}{3, 5}332回目のfor (i を 2 から inの要素数 まで 1 ずつ増やす)
{3, 2, 1, 6, 5, 4}{3, 5}352回目のtail ← out[outの要素数]
{3, 2, 1, 6, 5, 4}{3, 5, 6}352回目のoutの末尾 に (tail + in[i]) の結果を追加する
{3, 2, 1, 6, 5, 4}{3, 5, 6}453回目のfor (i を 2 から inの要素数 まで 1 ずつ増やす)
{3, 2, 1, 6, 5, 4}{3, 5, 6}463回目のtail ← out[outの要素数]
{3, 2, 1, 6, 5, 4}{3, 5, 6, 12}463回目のoutの末尾 に (tail + in[i]) の結果を追加する
{3, 2, 1, 6, 5, 4}{3, 5, 6, 12}564回目のfor (i を 2 から inの要素数 まで 1 ずつ増やす)
{3, 2, 1, 6, 5, 4}{3, 5, 6, 12}5124回目のtail ← out[outの要素数]
{3, 2, 1, 6, 5, 4}{3, 5, 6, 12, 17}5124回目のoutの末尾 に (tail + in[i]) の結果を追加する
{3, 2, 1, 6, 5, 4}{3, 5, 6, 12, 17}6125回目のfor (i を 2 から inの要素数 まで 1 ずつ増やす)
{3, 2, 1, 6, 5, 4}{3, 5, 6, 12, 17}6175回目のtail ← out[outの要素数]
{3, 2, 1, 6, 5, 4}{3, 5, 6, 12, 17, 21}6175回目のoutの末尾 に (tail + in[i]) の結果を追加する

各変数値は繰り返しの中でこのように変化していきます。

今回の場合、最後に返却されるのはreturn outとある通り配列outですので、
{3, 5, 6, 12, 17, 21}が返却されます。
したがってこの配列の要素番号5の値を確認し、正解は「カ」となります。

一言コメント ※初学者向け

常に変化していく配列や変数を頭の中だけで追いかけるのはそれなりの年数プログラミングをしていないと難しいです。科目Bは面倒くさがらずに最初から丁寧にトレース表を書いていくことが一番の近道です。
問題を解くときはノート等を用意してトレース表を書きましょう。

また、今回の問題では「配列の要素番号は1 から始まる。」とありましたが、要素番号が0から始まる問題も出題される可能性がありますので、注意しましょう。


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です