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

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

引数を作る

この問題には問題文にも設問にも引数に使える値がありません。
そういうときは自分でテストできる数値を作らなければなりません。
問題を見ると引数を作るのにちょうどいい図があります。

0 1 2 3 4 5 6 7 8 9

これを利用して「始点P」を「3」、「終点P」を「5」に設定したいと思います。

引数
始点P 終点P
3 5

またこの問題には引数の他に「大域整数型変数」を使いますのでそちらも同じ図から作ります。

大域整数型変数
始点[1] -∞ 終点[1] 0 N
始点[2] 3 終点[2] 5 3
始点[3] 9 終点[3] +∞


ケース1

最初に I に初期値を入れます。

表1
I L
1

次のループで I の値を設定します。
このループで何番目の空領域を使うかを決定しています。

表1
I L
1
2

次の選択処理で 始点P ~ 終点P の範囲がすべて空領域かどうかを判定しています。
Trueなので上の処理に進みます。
もしここでFalseなら下の処理に進み「一部又は全体が割り当て済み」と表示しプログラムは終了します。

始点[2] = 始点P and 終点P = 終点[2] なので最初の条件式に当てはまります。
L の 初期値は I+1 で L が N を越えるまで処理をループしますが、 L は 3、 N も 3 ですので、ループは1回しか実行しません。

表1
I L
1 3
2

始点[2] に 始点[3] をいれます。
終点[2] に 終点[3] をいれます。
N を N-1 します。

大域整数型変数
始点[1] -∞ 終点[1] 0 N
始点[2] 3 9 終点[2] 5 +∞ 3 2
始点[3] 9 終点[3] +∞

0 1 2 3 4 5 6 7 8 9

なぜこの処理がループになっているかというと、なくなってしまった空領域情報をひとつづつつめるためです。もっとたくさん空領域があった場合は何度もループを繰り返すことになります。

他の条件式には当てはまりませんのでこれで処理は終了です。

ケース2

これではすべての分岐を通りませんので引数を変更します。

引数
始点P 終点P
3 4

2番目の条件式に当てはまりますので空欄「c」を考えます。

この処理では大域整数型変数が以下のように変更されるはずなので、正しい式を選択肢の中から探します。

大域整数型変数
始点[1] -∞ 終点[1] 0 N
始点[2] 3 5 終点[2] 5 3
始点[3] 9 終点[3] +∞

0 1 2 3 4 5 6 7 8 9

よって空欄「c」は「イ」になります。

ケース3

引数を変更します。

引数
始点P 終点P
4 5

3番目の条件式に当てはまりますので空欄「d」を考えます。

この処理では大域整数型変数が以下のように変更されるはずなので、正しい式を選択肢の中から探します。

大域整数型変数
始点[1] -∞ 終点[1] 0 N
始点[2] 3 終点[2] 5 3 3
始点[3] 9 終点[3] +∞

0 1 2 3 4 5 6 7 8 9

よって空欄「d」は「ウ」になります。

ケース4

引数を変更します。

引数
始点P 終点P
4 4

4番目の条件式に当てはまるのでループにはいります。
今度は空領域情報が増えます。
中からデータをずらしてしまうとまだコピーしていない空領域情報を上書きして消してしまうので、さっきとは逆で一番下のデータからずらしていかなければなりません。
よって L の初期値は N になります。

表1
I L
1 3
2

空欄「e」の選択肢の中で「ウ」と「エ」が残りますが、「エ」ではループを1度も実行しませんので空欄「e」は「ウ」です。

始点[4] に 始点[3] をいれます。
終点[4] に 終点[3] をいれます。

大域整数型変数
始点[1] -∞ 終点[1] 0 N
始点[2] 3 終点[2] 5 3
始点[3] 9 終点[3] +∞
始点[4] 9 終点[4] +∞

始点[3] に 5 をいれます。
終点[3] に 終点[2] をいれます。
終点[2] に 3 をいれます。
N に 1 を足します。

大域整数型変数
始点[1] -∞ 終点[1] 0 N
始点[2] 3 終点[2] 5 3 3 4
始点[3] 9 5 終点[3] +∞ 5
始点[4] 9 終点[4] +∞

0 1 2 3 4 5 6 7 8 9

以上でプログラムは終了です。


ホームに戻るボタン↓