基本情報技術者 2011年 春期 午後 問05
あて先作成プログラムに関する次の記述を読んで、設問1〜3に答えよ。
通信販売会社のZ社では、顧客に対して顧客番号を発行し、顧客マスタファイルで管理している。
このたび、2011年5月10日から6月20日までの販売促進キャンペーン期間中(以下、期間中という)の顧客の購入状況に応じて、懸賞応募券(以下、応募券という)と催物招待券(以下、招待券という)を郵送することになった。そこで、売上伝票ファイルから応募券と招待券を送る顧客を選び、あて先ファイルを出力するあて先作成プログラムを作成することにした。
このプログラムに必要な機能は、次のとおりである。
(1) 顧客ごとの応募券の枚数は、この販売促進キャンペーンの対象商品である商品コードA001〜A199の商品を期間中に購入した個数と同数とする。
(2) 顧客ごとの招待券の枚数は、期間中に購入したすべての商品の購入金額の合計が5万円以上の顧客に対して1枚とする。
(3) 応募券又は招待券を送る顧客ごとに、あて先ファイルに1件のレコードを作成する。応募券と招待券の両方を送る場合でも1顧客に対して1件のレコードを作成する。
(4) 応募券の総枚数、招待券の総枚数及びあて先ファイルのレコードの件数を、合計表に印字する。
顧客マスタファイル、売上伝票ファイル、あて先ファイルは順ファイルである。これらのレコード様式を、図1に示す。

顧客マスタファイルは、顧客番号の昇順に整列されている。売上伝票ファイルを、顧客番号の昇順に整列した作業ファイルを作り、このプログラムに入力する。
このプログラムの入出力関連を図2に、プログラムの流れを図3に、主なモジュールの処理内容を表1に示す。また、このプログラムのテストに用いる作業ファイルのテストデータを表2に、このテストデータを用いた場合の合計表の出力結果を図4に示す。


設問1:
問題文を見る 図3中のに入れる正しい答えを、解答群の中から選べ。
aに関する解答群
ア:A001 ≦ 作業ファイルレコードの商品コード≦ A199
イ:A001 ≦ 作業ファイルレコードの商品コード≦ A199 又は 購入金額合計≧ 50000
ウ:購入金額合計≧ 50000
エ:作業ファイルレコードの購入個数> 0
オ:招待券枚数> 0
bに関する解答群
ア:A001 ≦ 作業ファイルレコードの商品コード≦ A199
イ:A001 ≦ 作業ファイルレコードの商品コード≦ A199 かつ 作業ファイルレコードの購入金額≧ 50000
ウ:A001 ≦ 作業ファイルレコードの商品コード≦ A199 又は 作業ファイルレコードの購入金額≧ 50000
エ:応募券枚数> 0
オ:応募券枚数> 0 かつ 招待券枚数> 0
カ:応募券枚数> 0 又は 招待券枚数> 0
キ:作業ファイルレコードの購入金額≧ 50000
ク:作業ファイルレコードの購入個数> 0
模範解答
a:ウ、b:カ
解説
解答の導き方
図3では、顧客ごとの売上伝票を処理したあとに、判定[ a ]と判定[ b ]を行います。まず、それぞれの判定で何を確かめているかを考えます。
-
判定[ a ]は、招待券を送るかを決めます。表1の前処理では、顧客ごとに「購入金額合計」を初期化します。その後、期間中の売上伝票を読みながら購入金額を加算します。ここで購入金額合計とは、その顧客が期間中に買った商品の金額を合計した値です。招待券の条件は、本文に「期間中に購入したすべての商品の購入金額の合計が5万円以上」とあります。したがって、商品コードが対象商品かどうかではなく、顧客ごとの購入金額合計を確認します。そのため、判定[ a ]に入るのは「購入金額合計≧ 50000」です。解答群ではウです。たとえば、顧客番号010は、期間中に商品コードB150を購入し、購入金額は60000円です。B150は応募券の対象商品ではありませんが、期間中の購入金額合計が50000円以上なので、招待券の対象になります。
-
判定[ b ]は、あて先ファイルに顧客を載せるかを決めます。応募券または招待券を送る顧客について、本文には「1顧客に対して1件のレコードを作成する」とあります。つまり、応募券だけの顧客も、招待券だけの顧客も、あて先ファイルに載せます。両方を送る場合も、レコードは1件です。そこで、応募券枚数が0より大きい場合または招待券枚数が0より大きい場合に、あて先処理を行います。解答群では「応募券枚数> 0 又は 招待券枚数> 0」に当たるカです。たとえば、顧客番号001は、期間中の購入金額が44000円で、応募券の対象商品を購入しています。招待券はありませんが、応募券を送るため、あて先ファイルには載せます。一方、顧客番号010は応募券の対象商品を購入していませんが、招待券を送るため、やはり載せます。このように、どちらか一方だけでも対象になるので、「又は」で判定します。
誤りやすいポイント
-
判定[ a ]を商品コードで判断しないこと
商品コードA001〜A199かどうかは応募券の枚数に関係します。招待券は、期間中に買ったすべての商品の購入金額合計で決まります。 -
1件の売上伝票だけで招待券の条件を判断しないこと
判定するのは、顧客ごとに集計した購入金額合計です。複数の売上伝票がある場合は、その金額を合計してから条件と比べます。 -
判定[ b ]を「かつ」にしないこと
応募券と招待券の両方を受け取る顧客だけでなく、どちらか一方を受け取る顧客もあて先ファイルに必要です。
FAQ
Q: 商品コードA001〜A199の購入金額だけを、招待券の判定に使うのですか?
A: いいえ。応募券の枚数には商品コードが関係しますが、招待券の判定では期間中に購入したすべての商品の購入金額を合計します。
A: いいえ。応募券の枚数には商品コードが関係しますが、招待券の判定では期間中に購入したすべての商品の購入金額を合計します。
Q: 応募券と招待券の両方を送る顧客は、あて先ファイルに2件作りますか?
A: いいえ。本文にあるとおり、両方を送る場合でも1顧客につき1件です。そのため、判定[ b ]では、どちらかの枚数が0より大きければあて先処理を行います。
A: いいえ。本文にあるとおり、両方を送る場合でも1顧客につき1件です。そのため、判定[ b ]では、どちらかの枚数が0より大きければあて先処理を行います。
Q: 販売促進キャンペーン期間外の売上は、購入金額合計に含めますか?
A: 含めません。初期処理と売上伝票処理では、期間中以外のレコードを読み飛ばすため、集計するのは期間中の売上です。
A: 含めません。初期処理と売上伝票処理では、期間中以外のレコードを読み飛ばすため、集計するのは期間中の売上です。
関連キーワード: 順ファイル、顧客単位の集計、条件判定、作業領域
設問2:
問題文を見る 表1中のに入れる正しい答えを、解答群の中から選べ。解答群中の[]はガウス記号であり、[x]は、xを超えない最大の整数値を表す。
解答群
ア:[作業ファイルレコードの購入金額/50000]
イ:1
ウ:応募券枚数 + [作業ファイルレコードの購入金額/50000]
エ:応募券枚数 + 1
オ:応募券枚数 + 作業ファイルレコードの購入個数
カ:作業ファイルレコードの購入個数
模範解答
オ
解説
解答の導き方
表1の「応募券処理」に入る式を考えます。応募券の枚数は、対象商品を購入した個数に応じて決まります。問題文には、応募券の枚数は「購入した個数と同数」とあります。対象商品は商品コードA001〜A199の商品です。
ここで使う個数は、作業ファイルのレコード(ファイルに保存される1件分のデータ)にある「購入個数」です。商品コードが対象の範囲に入っている場合、そのレコードの購入個数を応募券枚数に加えます。
また、表1の前処理では、顧客ごとに応募券枚数を0にします。その後、同じ顧客の売上伝票を順に処理するため、応募券枚数は前のレコードまでの合計に、今回の購入個数を足していく必要があります。したがって、式は次のとおりです。
表2の顧客番号386で確認すると、2011年5月18日の商品コードA182の購入個数は1なので、応募券枚数は になります。次の2011年6月18日の商品コードA198の購入個数は2なので、応募券枚数は になります。このように、同じ顧客の購入個数を積み上げる式を選びます。
誤りやすいポイント
- 応募券は購入伝票1件につき1枚ではありません。購入個数が複数なら、その個数分の応募券を数えます。
- 購入個数だけを使うと、前のレコードまでに数えた枚数が上書きされます。顧客ごとの合計を残すには、現在の応募券枚数に加える必要があります。
- 購入金額を5万円で割る式は、応募券の枚数を求めるものではありません。応募券は購入個数で決まり、招待券は期間中の購入金額の合計を基に判定します。
- 商品コードがA001〜A199の範囲に入っていても、期間外の購入は対象になりません。
FAQ
Q: なぜ「購入個数」だけでなく、現在の応募券枚数にも足すのですか?
A: 同じ顧客に複数の売上伝票がある場合があるためです。購入個数だけを代入すると、前の伝票で数えた分が消えてしまいます。
A: 同じ顧客に複数の売上伝票がある場合があるためです。購入個数だけを代入すると、前の伝票で数えた分が消えてしまいます。
Q: 商品コードA200やA201の商品を購入していた場合、購入個数を加えますか?
A: 加えません。対象商品は商品コードA001〜A199の商品だからです。
A: 加えません。対象商品は商品コードA001〜A199の商品だからです。
Q: 購入金額が5万円以上かどうかは、応募券にも関係しますか?
A: 応募券の枚数には関係しません。購入金額の合計が5万円以上かどうかは、招待券を送るかどうかの判定に使います。
A: 応募券の枚数には関係しません。購入金額の合計が5万円以上かどうかは、招待券を送るかどうかの判定に使います。
関連キーワード: 累積処理、条件分岐、順ファイル、集計処理、ガウス記号
設問3:
問題文を見る 図4中のに入れる正しい答えを、解答群の中から選べ。
cに関する解答群
ア:1
イ:2
ウ:3
エ:4
オ:5
カ:6
キ:7
ク:8
ケ:9
コ:10
dに関する解答群
ア:3
イ:4
ウ:5
エ:7
オ:9
カ:10
キ:11
ク:12
ケ:13
コ:14
模範解答
c:ウ、d:ウ
解説
解答の導き方
図4のcは招待券の総枚数、dはあて先ファイルのレコード(ファイルに記録する1件分のデータ)の件数です。まず、キャンペーン期間中の売上だけを使い、顧客ごとに応募券と招待券の条件を確認します。
1. キャンペーン期間中の売上だけを残します。
期間は2011年5月10日から6月20日までです。この期間の外にある売上は、金額の合計にも応募券の枚数にも含めません。たとえば、顧客番号001の2011年5月8日の売上や、顧客番号386の2011年6月21日の売上は対象外です。
2. 応募券と招待券は、別々の条件で数えます。
応募券は、期間中に購入した商品コードA001〜A199の商品の購入個数分です。一方、招待券は、商品コードにかかわらず期間中に購入した商品の購入金額を合計し、5万円以上なら1枚です。
このため、応募券の対象外の商品でも、期間中の売上であれば招待券の金額合計には含めます。
表の数値がそのようになる理由は、次のとおりです。
- 顧客番号001は、期間中のA180を8個購入しているので応募券は8枚です。購入金額44000は5万円未満なので、招待券はありません。
- 顧客番号002は、期間中の購入金額が合計45000です。応募券対象の商品も購入していないので、どちらの券もありません。
- 顧客番号005は、A007を1個購入し、購入金額が50000です。応募券は1枚、招待券も1枚です。
- 顧客番号010は、期間中の購入金額が60000なので招待券は1枚です。購入したB150は応募券の対象商品ではないため、応募券はありません。2011年4月29日の売上は期間外です。
- 顧客番号081は、期間中の購入金額が合計132000なので招待券は1枚です。応募券の対象はA006の2個だけです。A201は商品コードA001〜A199の範囲外です。また、A200の売上は期間外です。
- 顧客番号258は、購入金額が2500で、応募券対象の商品も購入していないため、どちらの券もありません。
- 顧客番号386は、期間中に購入したA182が1個、A198が2個なので、応募券は合計3枚です。購入金額の合計は45000なので、招待券はありません。2011年6月21日の売上は期間外です。
3. 招待券の総枚数を数えます。
招待券を受け取るのは、購入金額が5万円以上の顧客番号005、顧客番号010、顧客番号081です。招待券は対象となる顧客1人につき1枚なので、合計は3枚です。したがって、cは3に対応するウです。
4. あて先ファイルの件数を数えます。
問題文には、応募券または招待券を送る顧客ごとに1件のレコードを作るとあります。両方の券を送る場合でも、顧客1人につき1件です。
いずれかの券を送る顧客は、顧客番号001、顧客番号005、顧客番号010、顧客番号081、顧客番号386の5人です。よって、あて先ファイルのレコード件数は5件で、dは5に対応するウです。
誤りやすいポイント
- 応募券の条件と招待券の条件を混同しないようにします。応募券は商品コードと購入個数で決まり、招待券は期間中の購入金額の合計で決まります。
- 招待券の金額合計には、応募券の対象外の商品も含めます。たとえば顧客番号010のB150は応募券の対象ではありませんが、招待券の金額合計には含まれます。
- 商品コードA001〜A199の範囲外の商品は、応募券の枚数に含めません。A201やA200は対象外です。
- 期間外の売上は、金額にも応募券の枚数にも含めません。2011年6月20日の売上は期間内ですが、2011年6月21日の売上は期間外です。
- あて先ファイルの件数は、送る券の枚数ではなく、券を送る顧客の人数です。応募券と招待券の両方を送る顧客も1件です。
FAQ
Q: 応募券の対象商品を買っていなくても、あて先ファイルに載ることはありますか?
A: あります。期間中の購入金額が5万円以上なら招待券を送るため、顧客番号010のように応募券がなくても、あて先ファイルに載ります。
A: あります。期間中の購入金額が5万円以上なら招待券を送るため、顧客番号010のように応募券がなくても、あて先ファイルに載ります。
Q: 期間中に5万円以上購入していれば、必ず応募券も送られますか?
A: いいえ。応募券は商品コードA001〜A199の商品の購入個数で決まります。対象商品を買っていなくても、購入金額が5万円以上なら招待券は送られます。
A: いいえ。応募券は商品コードA001〜A199の商品の購入個数で決まります。対象商品を買っていなくても、購入金額が5万円以上なら招待券は送られます。
Q: 応募券と招待券の両方を送る顧客は、あて先ファイルに2件記録しますか?
A: いいえ。顧客ごとに1件です。顧客番号005と顧客番号081も、それぞれ1件として数えます。
A: いいえ。顧客ごとに1件です。顧客番号005と顧客番号081も、それぞれ1件として数えます。
関連キーワード: 期間抽出、条件判定、金額集計、順ファイル、レコード






