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

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

検索部

大域変数は問題文で既に表になっているのでそちらを参照します。

Kの初期値は2です。
Tの初期値は1です。

K が 0 よりも大きく、T が 3 以下の間ループします。

「購入[K]の品番」と「対象[T]の品番」が同じなら上の処理を、そうでなかったら下の処理を行います。

Falseなので下の処理を行います。
「購入[K]の品番」が「対象[T]の品番」より小さかったら上の処理を、そうでなかったら下の処理を行います。

Trueなので上の処理を行います。
購入情報の品番のほうが小さいので次の行に移動したいのですが、直接品番を参照するのでなく、次に大きい品番の行は ptr の値で管理していますので、空欄「a」は「ウ」になります。
K に「購入[2]のptr」をいれます。

K K品番 T T品番 処理
2 111 1 222
1 222

ループの頭に戻ります。
今度は「購入[K]の品番」と「対象[T]の品番」が同じなので上の処理を行います。

「対象[1]の数量」に「購入[1]の数量」をいれます。
K に「購入[1]のptr」をいれます。
「対象[1]」に対する処理は以上なので T も次の行に移します。
空欄「b」は「オ」になりますので T を +1 します。
K K品番 T T品番 処理
2 111 1 222
1 222 「対象[1]の数量」に5をいれる
4 224 2 223

ループの頭に戻ります。
今度は「購入[4]の品番」より「対象[2]の品番」のほうが小さいですから、下の下の処理を行います。
T を +1 します。

K K品番 T T品番 処理
2 111 1 222
1 222 対象[1]の数量に5をいれる
4 224 2 223
3 224

ループの頭に戻ります。
品番が同じなので上の処理をします。

K K品番 T T品番 処理
2 111 1 222
1 222 「対象[1]の数量」に5をいれる
4 224 2 223
3 224 「対象[3]の数量」に2をいれる
3 333 4 NULL

T が対象行数を越えたのでループを抜けて処理を終了します。


計算部

計算部では対象商品の数量を足して指定数量で割って特売の数量に代入します。

T W
1 0+5
2 5+0
3 5+2
7 ÷ 3 = 2.33 なので特売の数量は 2 になりました。


更新部

Kp に 0 をいれます。
K に 2 をいれます。

Kが 0 以上で「購入[K]の品番」が「特番の品番」より小さい間 K を ptr に応じて変化させていきますが、 そのさい K の値を Kp に一旦コピーしてから K を更新します。

Kp Kp品番 K K品番 特売品番
0 2 111 229
2 111 1 222
1 222 4 224
4 224 5 333

この処理は何をしているかと言うと、
Kp は Kprevious のことで、商品番号が小さい順に ptr を指定したいので、 「購入[Kp]」と「購入[K]」で「特売」をサンドイッチしているのです。

処理を見てみます。
購入行数を +1 して 6 にします。
「購入[Kp]」すなわち「購入[4]」の ptr に 6 を入れます。
「購入[6]」に「特売」のすべての情報を入力して ptr に 5 をいれます。
「購入[K]」はすなわち「購入[5]」ですのでちゃんと商品番号順に整列させることができています。

設問の答え
空欄「c」は「カ」です。
空欄「d」は「ア」です。

ホームに戻るボタン↓