基本情報技術者試験の過去問と解説
[TOP] [午前分野別] [午後分野別] [キーワード索引] [令和元年秋午前] [令和元年秋午後]

平成25年 春期 基本情報技術者 午後 問08
問08   必須問題

 次のプログラムの説明及びプログラムを読んで,設問1,2に答えよ。

 ある食料品店では,従来の特売方法に加えて,新たに選択型特売を始めることになった。 選択型特売とは,例えば3種類の商品中から合計3個(3商品を各1個,同一商品を3個など)を 選択して購入すれば値引きをするという特売方法である。

 このプログラムは,レジ用プログラムの一部として,選択型特売の値引き処理をする。 プログラムの実行は,顧客がレジに持ち込んだ商品のバーコードを全て読み込んで, 購入する商品が確定した時点で行うものとする。

〔プログラムの説明〕

(1) 顧客がレジに持ち込んだ商品の情報(以下,購入情報という)及び1種類の選択型特売に ついての商品の情報(以下,特売情報という)は,次のように宣言された大域の 変数及び配列で他のレジ用プログラムと受け渡す。配列の添字は,1から始まる。

(2) 購入情報の内容は,次のとおりである。図1は,購入情報のデータ例である。

@ 購入[] は,ptr 品番 品名 単価 数量 金額 のメンバから成る1レコードを 1要素とする構造型の配列である。

A 購入[] には,購入する商品の情報が,バーコードを読み込んだ順に添字1の 要素から格納されている。同一品番の商品の情報は,1レコードにまとめられており, 品番の重複はない。

B 購入[] 中の ptr は,レコードを品番の昇順にたどるポインタであり, 次に大きい品番をもつレコードが格納されている要素の添字が入っている。 最も大きい品番をもつレコードの ptr 値は0である。

C ptr 起点 は,最も小さい品番をもつレコードが格納されている 購入[] の 要素の添字を示す。

D 購入行数 は,購入[] 中に格納されたレコード件数を示す。

(3) 特売情報の内容は,次のとおりである。

@ 特売 は,品番 品名単価数量 の メンバから成る構造型の変数である。品番品名単価 には, 特売を一つの商品とみなして付けた品番,特売の名称, 値引き額が,それぞれ格納されている。

A 対象[] は,品番数量 のメンバから成る1レコードを1要素とする構造型の 配列である。品番 には,特売対象の商品の品番が格納されている。対象[] には, 要素が品番の昇順に添字1から格納されている。

B 対象行数 は,対象[] 中に格納されたレコード件数を示す。

C 指定数量 は,特売対象の商品を合計何個購入する必要があるかを示す。

D 対象[] 中及び 特売 中の 数量 には, 初期値0が格納されている。

E 図2には,特売情報のデータ例として,次の特売例を示してある。

 B社緑茶 500 ml(品番 222),B社ほうじ茶 500ml (品番 223),B社麦茶
  500 ml(品番 224)のどれでも,合わせて3本の買上げごとに 100 円引きとする。

      図1 購入情報のデータ例

      図2 特売情報のデータ例

(4) 処理は,検索部,計算部,更新部から成り,この順に実行する。

@ 検索部では,対象[] 中の各 品番 購入[] 中にあれば,購入[] 中の 該当するレコードの 数量 の値を,対象[] 中の 数量 に格納する。

A 計算部では,対象[] 中の各 数量 の値の合計を 指定数量 で割った商を, 特売 中の 数量 に格納する。

B 更新部では,特売 中の 数量 の値が1以上であれば,購入[] 特売 の レコードを追加し,購入情報を更新する。

(5) メンバの参照は,例えば,購入[3] 品番 を参照するときは,購入[3] .品番 と 記述する。

(6) 図1及び図2のデータ例を用いてプログラムを実行した結果は,図3及び図4のとおりである。 図3及び図4中の網掛け部分は,実行によって内容が変更された箇所であることを示す。

      図3 図1の購入情報のデータ例(実行後)

      図4 図2の特売情報のデータ例(実行後)

[プログラム]

設問1 プログラム中の に入れる正しい答えを, 解答群の中から選べ。

a,b に関する解答群

ア K ← K + 1       イ K ← ptr 起点

ウ K ← 購入[K].ptr     エ T ← 1

オ T ← T + 1

c,d に関する解答群

ア K              イ Kp

ウ 購入[K] .ptr        エ 購入[Kp].ptr

オ 購入[購入行数] .ptr     力 購入行数

解答 a ←クリックすると正解が表示されます

解答 b ←クリックすると正解が表示されます

解答 c ←クリックすると正解が表示されます

解答 d ←クリックすると正解が表示されます

基本情報技術者試験


設問2 次の記述中の に入れる正しい答えを, 解答群の中から選べ。

 商品のバーコードを読み込む段階で,その時点までに読み込んだ商品の金額の小計を, 値引きを反映した金額で表示したい。そこで,商品のバーコードを読み込んだときに 選択型特売に該当する商品ならば,都度このプログラムを実行するように修正したい。 また,読込み済み商品の購入の取消しにも対応したい。ここで,対象[] 中及び 特売 中の 数量 には,初期値0を格納してプログラムを呼び出す。

 この方法では,特売 のレコードを 購入[] に書き込むとき,既に 購入[] 中に その 特売 のレコードが存在していることがある。また,値引きが成立していた 特売 の レコード中の 数量 が0になったとき,その 特売 のレコードの削除が必要になることがある。

 特売 のレコードの取扱いは,表1に示す処理に分けられる。

      表1 特売のレコードの取扱い
  特売.数量=0   特売.数量>0 
  購入[] 中にその 特売 のレコードが存在する    処理@   処理A 
  購入[] 中にその 特売 のレコードが存在しない    処理B   処理C 

 処理@〜Cのうち, は、特売 のレコードの更新処理であり, 特売 のレコードの削除処理である。

 そこで,プログラムの修正方法として,検索部と計算部は変更せず,更新部を 次のように変更することにした。

(1) プログラムの中の の部分を,次の条件式で置き換える。

(2) プログラムの末尾に,次の処理を追加する。

 なお,更新処理では,更新前と更新後の 特売 のレコード中の 数量 が同じになる場合でも 処理を行う。また,削除処理では,該当する 特売 のレコードを格納していた配列の要素は そのまま残し,ポインタの付替えによってレコードを無効にする。

e,f に関する解答群

ア 処理@       イ 処理A

ウ 処理B       エ 処理C

g に関する解答群

ア K              イ Kp

ウ 購入[K].ptr         エ 購入[Kp].ptr

オ 購入[購入行数].ptr      力 購入行数

解答 e ←クリックすると正解が表示されます

解答 f ←クリックすると正解が表示されます

解答 g ←クリックすると正解が表示されます


[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]