問題文は他のサイトを別ウインドウで開いてご覧ください。
ホームに戻るボタン↓
問題文の表にある数値を引数として、トレースします。
最初のループは20回繰り返します。
ループを開くと以下になります。
相対(A2, 1, 0) ← null
相対(A2, 2, 0) ← null
相対(A2, 3, 0) ← null
相対(A2, 4, 0) ← null
相対(A2, 5, 0) ← null
相対(A2, 6, 0) ← null
相対(A2, 7, 0) ← null
相対(A2, 8, 0) ← null
相対(A2, 9, 0) ← null
相対(A2, 10, 0) ← null
相対(A2, 11, 0) ← null
相対(A2, 12, 0) ← null
相対(A2, 13, 0) ← null
相対(A2, 14, 0) ← null
相対(A2, 15, 0) ← null
相対(A2, 16, 0) ← null
相対(A2, 17, 0) ← null
相対(A2, 18, 0) ← null
相対(A2, 19, 0) ← null
相対(A2, 20, 0) ← null
表の値を書き換えます。
これは繰り返し使ったときに前の値が残らないように、初期化しているだけです。
相対(I2, F3, 0) < 9999 なら状態遷移列が存在するので、以下の行を実行します。
相対(I2, F3, 0) は 相対(I2, 13, 0) すなわち セルI15(値は47)です。
なお列Iの値は、本問には記述されていない CalculateMinimum という、このマクロとは別のマクロにより自動入力されているので、気にする必要はありません。
初期値を設定します。
NumWork ← 0
Current ← 13
ループするたびに NumWork をプラス1してループ回数を数えることにより、作業数 NumWork を算出します。
現状態ID から 前状態IDを順に辿っていくことによって数えますので、空欄eはアとなります。
Current が開始状態IDになった時点でループを抜けますので、ループ条件は「Currentが開始状態IDではない限りループし続ける」となりますので、空欄dはカです。
具体的に追ってみます。
状態ID 13 の前状態IDは 11 です。
状態ID 11 の前状態IDは、、、
省略されて書いてないんです。
トレースさせてもらえません。
結構イジワルですよね。
しかし、列Aを見れば 自動入力する行数は 8 であることがわかります。
そして、IDの遷移は 13,11,10,9,8,6,4,3であることも推測できます。
以上から NumWork が 7 であることがわかります。
初期値を設定します。
Current ← 13
空欄 f ですが、I の初期値は NumWork となります。
このために前の工程で算出したのですから。
相対(A3, 7, 0) ← 13 をいれます。
Current ← 11 をいれます。
表の値を書き換えます。
これを8回繰り返します。
相対(A3, 6, 0) ← 11 をいれます。
Current ← 10 をいれます。
相対(A3, 5, 0) ← 10 をいれます。
Current ← 9 をいれます。
相対(A3, 4, 0) ← 9 をいれます。
Current ← 8 をいれます。
相対(A3, 3, 0) ← 8 をいれます。
Current ← 6 をいれます。
相対(A3, 2, 0) ← 6 をいれます。
Current ← 4 をいれます。
相対(A3, 1, 0) ← 4 をいれます。
Current ← 3 をいれます。
相対(A3, 0, 0) ← 3 をいれます。
Current ← 0 をいれます。
表の値を書き換えます。
空欄 f の選択肢のうち、
エは7回、
オは7回、
カは8回繰り返します。
よって空欄 f はカです。
最初のループ
最初のループは20回繰り返します。
ループを開くと以下になります。
相対(A2, 1, 0) ← null
相対(A2, 2, 0) ← null
相対(A2, 3, 0) ← null
相対(A2, 4, 0) ← null
相対(A2, 5, 0) ← null
相対(A2, 6, 0) ← null
相対(A2, 7, 0) ← null
相対(A2, 8, 0) ← null
相対(A2, 9, 0) ← null
相対(A2, 10, 0) ← null
相対(A2, 11, 0) ← null
相対(A2, 12, 0) ← null
相対(A2, 13, 0) ← null
相対(A2, 14, 0) ← null
相対(A2, 15, 0) ← null
相対(A2, 16, 0) ← null
相対(A2, 17, 0) ← null
相対(A2, 18, 0) ← null
相対(A2, 19, 0) ← null
相対(A2, 20, 0) ← null
表の値を書き換えます。
A | |
---|---|
3 | null |
4 | null |
5 | null |
6 | null |
7 | null |
8 | null |
9 | null |
10 | null |
11 | null |
12 | null |
13 | null |
14 | null |
15 | null |
16 | null |
17 | null |
18 | null |
19 | null |
20 | null |
21 | null |
22 | null |
これは繰り返し使ったときに前の値が残らないように、初期化しているだけです。
準備
相対(I2, F3, 0) < 9999 なら状態遷移列が存在するので、以下の行を実行します。
相対(I2, F3, 0) は 相対(I2, 13, 0) すなわち セルI15(値は47)です。
なお列Iの値は、本問には記述されていない CalculateMinimum という、このマクロとは別のマクロにより自動入力されているので、気にする必要はありません。
初期値を設定します。
NumWork ← 0
Current ← 13
作業数 NumWork を算出する
ループするたびに NumWork をプラス1してループ回数を数えることにより、作業数 NumWork を算出します。
現状態ID から 前状態IDを順に辿っていくことによって数えますので、空欄eはアとなります。
Current が開始状態IDになった時点でループを抜けますので、ループ条件は「Currentが開始状態IDではない限りループし続ける」となりますので、空欄dはカです。
トレースさせてもらえない
具体的に追ってみます。
状態ID 13 の前状態IDは 11 です。
状態ID 11 の前状態IDは、、、
省略されて書いてないんです。
トレースさせてもらえません。
結構イジワルですよね。
しかし、列Aを見れば 自動入力する行数は 8 であることがわかります。
そして、IDの遷移は 13,11,10,9,8,6,4,3であることも推測できます。
以上から NumWork が 7 であることがわかります。
状態遷移列を格納する
初期値を設定します。
Current ← 13
空欄 f ですが、I の初期値は NumWork となります。
このために前の工程で算出したのですから。
相対(A3, 7, 0) ← 13 をいれます。
Current ← 11 をいれます。
表の値を書き換えます。
A | |
---|---|
3 | null |
4 | null |
5 | null |
6 | null |
7 | null |
8 | null |
9 | null |
10 | 13 |
これを8回繰り返します。
相対(A3, 6, 0) ← 11 をいれます。
Current ← 10 をいれます。
相対(A3, 5, 0) ← 10 をいれます。
Current ← 9 をいれます。
相対(A3, 4, 0) ← 9 をいれます。
Current ← 8 をいれます。
相対(A3, 3, 0) ← 8 をいれます。
Current ← 6 をいれます。
相対(A3, 2, 0) ← 6 をいれます。
Current ← 4 をいれます。
相対(A3, 1, 0) ← 4 をいれます。
Current ← 3 をいれます。
相対(A3, 0, 0) ← 3 をいれます。
Current ← 0 をいれます。
表の値を書き換えます。
A | |
---|---|
3 | 3 |
4 | 4 |
5 | 6 |
6 | 8 |
7 | 9 |
8 | 10 |
9 | 11 |
10 | 13 |
空欄 f の選択肢のうち、
エは7回、
オは7回、
カは8回繰り返します。
よって空欄 f はカです。
ホームに戻るボタン↓