基本情報技術者過去問題 平成28年春期 午後問8 設問2 解説

問題文は他のサイトを別ウインドウで開いてご覧ください。

clearGarbage()

MemoMax: 5 DataMax: 25
MemoCnt: 3 DataLen: 23

0 1 2 3 4
Memo[ ]: 19 5 10

0 1 2 3 4 5 6 7 8 9 10
Data[ ]: 4 A o k i 4 I m a i 3
11 12 13 14 15 16 17 18 19 20 21 22 23 24
U n o 4 E n d o 3 A b e


最初に DataLen を 0 にします。
MemoCnt が 0 ならあとは何もせずに処理を終わります。

次のループは MemoCnt の回数繰り返します。
なぜでしょうか?
ここで、ガベージ(空き領域)をコレクション(集める)すると言いながら、実際には使用領域のほうをコレクションして上書きすることでガベージをなくすのだと気づけば、設問には回答できてしまいます。

ループの1回目

d に 19 をいれます。
Memo[0] に 0 をいれます。

temp[0] に Data[d + 0] をいれます。
DataLen を+1します。
temp[1] に Data[d + 1] をいれます。
DataLen を+1します。
temp[2] に Data[d + 2] をいれます。
DataLen を+1します。
temp[3] に Data[d + 3] をいれます。
DataLen を+1します。

0 1 2 3
temp
[ ]:
3 A b e

MemoMax: 5 DataMax: 25
MemoCnt: 3 DataLen: 4

0 1 2 3 4
Memo[ ]: 0 5 10

ループの2回目

d に 5 をいれます。
Memo[1] に 4 をいれます。

temp[4] に Data[d + 0] をいれます。
DataLen を+1します。
temp[5] に Data[d + 1] をいれます。
DataLen を+1します。
temp[6] に Data[d + 2] をいれます。
DataLen を+1します。
temp[7] に Data[d + 3] をいれます。
DataLen を+1します。
temp[8] に Data[d + 4] をいれます。
DataLen を+1します。

0 1 2 3 4 5 6 7 8
temp
[ ]:
3 A b e 4 I m a i

MemoMax: 5 DataMax: 25
MemoCnt: 3 DataLen: 9

0 1 2 3 4
Memo[ ]: 0 4 10


ループの3回目

d に 10 をいれます。
Memo[2] に 9 をいれます。

temp[9] に Data[d + 0] をいれます。
DataLen を+1します。
temp[10] に Data[d + 1] をいれます。
DataLen を+1します。
temp[11] に Data[d + 2] をいれます。
DataLen を+1します。
temp[12] に Data[d + 3] をいれます。
DataLen を+1します。

0 1 2 3 4 5 6 7 8 9 10 11 12
temp
[ ]:
3 A b e 4 I m a i 3 U n o

MemoMax: 5 DataMax: 25
MemoCnt: 3 DataLen: 13

0 1 2 3 4
Memo[ ]: 0 4 9


最後のループ

Data[ ] に temp[ ] をコピーします。

0 1 2 3 4 5 6 7 8 9 10
Data[ ]: 3 A b e 4 I m a i 3 U
11 12 13 14 15 16 17 18 19 20 21 22 23 24
n o o 4 E n d o 3 A b e

ホームに戻るボタン↓