設問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 |
ホームに戻るボタン↓