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

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

設問1はトレースして作るべき表が問題文に用意されているので、ただ問題を解くだけなら自分で作る必要はありませんが、 説明のために表を作成していきます。

addMemo

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

0 1 2 3 4
Memo[ ]: 0 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

0 1 2 3
textLen: 4 text[ ]: e n d o


Memo[3]にDataLenをいれます。

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


MemoCnt を+1します。

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


Data[14] に textLen をいれます。

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


DataLen を+1します。

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


ループ処理です。
Data[ 15 + 0 ] に text[0] をいれます。

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

textLen回行いますのであと3回くりかえします。

Data[ 15 + 1 ] に text[1] をいれます。
Data[ 15 + 2 ] に text[2] をいれます。
Data[ 15 + 3 ] に text[3] をいれます。

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


DataLen に textLen を加えます。

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


deleteMemo

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


deleteMemo(0) を実行します。
pos は 0 です。

Memo[0] の値を消すためには Memo[1] から Memo[最後] までの値をひとつづつずらして上書きしていけばいいので i には「pos + 1」(すなわち1)を入れればいいことがわかります。

ループ処理です。
Memo[1-1] に Memo[1] をいれます。

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


i が 3 になるまで繰り返します。

Memo[2-1]にMemo[2]をいれます。
Memo[3-1]にMemo[3]をいれます。

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


MemoCnt から 1 をひきます。

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


Memo[3]はデータは残っていますが MemoCnt(メモ数) が 3 なので参照されず、ないのと同じです。

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


changeMemo

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

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

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

pos textLen: 0 1 2
2 3 text[ ]: A b e


Memo[2] に 19 をいれます。
Data[19] に 3 をいれます。
DataLen に 1 を足します。

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

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

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


ループ処理をします。
Data[20 + 0] に text[0] をいれます。
Data[20 + 1] に text[1] をいれます。
Data[20 + 2] に text[2] をいれます。

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 に textLen を足します。

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


moveMemo

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

fromPos toPos
2 0


m に Memo[2] (すなわち19)をいれます。
これは次のループで上書きして消してしまうので一時的に記録しておくためです。
fromPos > toPos なので上のループにははいらず、下のループにはいります。

ループ処理をします。

Memo[2] に Memo[ 2-1 ] をいれます。
Memo[1] に Memo[ 1-1 ] をいれます。

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


Memo[0] に、さっき記録しておいた m をいれます。

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


ホームに戻るボタン↓