平成22年秋期試験午後問題 問5

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】

問5 ソフトウェア設計

部品の棚卸金額計算に関する次の記述を読んで,設問1~5に答えよ。

 製造業が,製品製造のために購入する部品は,同じ部品であっても,その調達時期によって購入時の単価(以下,購入単価という)が変動する場合がある。したがって,期末時点で在庫となっている部品の棚卸金額を求める場合,個々の購入単価と数量を使って計算する。
 しかし,大量生産を行う製造業のT社では,必要な部品の種類と数量が非常に多い。購入した部品を受け入れて在庫とし,在庫から部品を払い出して製品を製造するまで,部品の一つ一つを管理することは難しく,実際に在庫となっている個々の部品の購入単価から金額を計算することは困難である。
 部品を受け入れた日付を受入日付,受け入れた数量を受入数量,払い出した日付を払出日付,払い出した数量を払出数量という。
 T社では,先入先出法によって,購入した部品の棚卸金額を計算している。先入先出法とは,受入日付が最も古い部品から順に払出しが行われたものとみなして,購入した部品の棚卸金額を計算する方法である。

〔棚卸金額計算の処理〕
 図1に,T社が購入した部品の棚卸金額計算処理の流れを示す。この処理で扱うファイルは,すべて順ファイルである。
pm05_1.png
  • 受入情報作成処理では,期首在庫ファイルと,期中の部品の受入れを記録した期中受入れファイルの二つを整列して併合し,受入情報ファイルとして出力する。
     受入情報ファイルのレコード様式は,次のとおりである。部品は,部品番号で管理している。
    pm05_2.png
     なお,T社の場合,同じ部品を同じ日に複数回受け入れることはない。
  • 払出情報作成処理では,期中の部品の払出しを記録した期中払出しファイルを用いて払出数量の集計を行い,払出情報ファイルを出力する。
  • 棚卸計算処理では,突合せを行い,期末在庫ファイルと棚卸金額ファイルを作成する。
 図3に,棚卸計算処理の流れを示す。
 受入情報ファイルと払出情報ファイルとの突合せによって,払出情報ファイルのレコードの払出数量分を,受入情報ファイルの受入日付が古いレコードから順に引き当てていく。引き当てられずに残った受入情報ファイルのレコードの数量と購入単価を使って,期末在庫ファイルと棚3卸金額ファイルのレコードを作成する。
 数量が0となった受入情報ファイルのレコードは,期末在庫ファイルには出力しない。また,期末在庫ファイルは,次期の期首在庫ファイルとなる。期末在庫ファイルと期首在庫ファイルは,受入情報ファイルと同じレコード様式である。
pm05_3.png

設問1

図1中の受入情報作成処理では,期首在庫ファイル及び期中受入れファイルを昇順に整列して併合し,受入情報ファイルとして出力する。整列に最低限必要なキー項目とその並びとして正しい答えを,解答群の中から選べ。ただし,解答群の項目の並びは,左の項目の方が整列の優先度が高い。
解答群
  • 受入日付
  • 受入日付,受入数量
  • 受入日付,部品番号
  • 部品番号
  • 部品番号,受入日付
  • 部品番号,購入単価
解答選択欄
  •  
  •  

解説

棚卸金額を計算するために、部品の種類ごと期中の受入数量から払出数量を引き在庫数を求めたいので、棚卸計算処理では部品番号をキーとして突合せ処理を行うことになります。
このことから、まず入力順に並んでいる期中受入れ記録と期首在庫記録を、部品番号で整列させることが必要になってきます。

さらにT社では先入先出法によって棚卸金額を計算しているので、突合せを行ったときに受入日付が古いものから順に数量を引かれるようにするため、同じ部品番号のレコード同士の中では受入日付が古いレコードをより先頭の方に出力する必要があります。
したがって、第2整列キーとして受入日付を指定し、同じ部品番号のレコードは受入日付を基準に整列します。

∴オ:部品番号,受入日付

期首在庫ファイルと期中受入れファイルから受入情報ファイルを作成する様子は下図のようになります。
pm05_5.png

設問2

図1中の払出情報ファイルに最低限必要な項目として正しい答えを,解答群の中から選べ。
解答群
  • 受入日付,払出数量
  • 受入日付,払出数量,払出日付
  • 受入日付,払出数量,部品番号
  • 払出数量,払出日付
  • 払出数量,払出日付,部品番号
  • 払出数量,部品番号
解答選択欄
  •  
  •  

解説

まず設問1での解説のとおり棚卸計算処理は、受入情報ファイルと払出情報ファイルの部品番号をキーとして突合せ処理を行うため部品番号は必要な属性となります。

それに加えて受入数量から在庫数を求めるために、払出した個数を記録している払出数量の属性も必要です。

また払出日付はこの突合せには必要ありません。
先入先出し法で計算をするので期中に払い出した総数量さえわかれば期末在庫数がわかり、どの日に受け入れたものを在庫とするかは受入情報ファイルの数量が残ったレコードを参照すればいいからです。

∴カ:払出数量,部品番号

設問3

図1中の払出情報作成処理では,払出数量の集計を行う。この集計処理に最低限必要なキー項目として正しい答えを,解答群の中から選べ。
解答群
  • 受入日付
  • 受入日付,払出日付
  • 受入日付,部品番号
  • 払出日付
  • 払出日付,部品番号
  • 部品番号
解答選択欄
  •  
  •  

解説

払出情報ファイル作成処理では、レコードを部品ごとにグループ化し、払出数量を合計しておく処理を行うことになります(問題文の流れ図を読み取ると払出情報ファイルは部品ごとに払出数量が合計されていることがわかります)。

このときに、ファイル同士の突合せを行うことができるように、受入情報ファイルと同様に部品番号をキーとして整列しておく必要があります。

∴カ:部品番号

期中払出ファイルから払出情報ファイルを作成する様子は下図のようになります。
pm05_6.png

設問4

図3中のP1~P3のうち,"受入情報読込み"が入るすべての箇所の組合せとして正しい答えを,解答群の中から選べ。
解答群
  • P1
  • P2
  • P3
  • P1,P2
  • P1,P3
  • P2,P3
  • P1,P2,P3
解答選択欄
  •  
  •  

解説

棚卸計算の流れ図中の変数の意味は以下の通りです。
KH:
払出情報ファイル現在のレコードの部品番号
KU:
受入情報ファイル現在のレコードの部品番号
H:
部品ごとの期中の総払出数量を格納しておく変数
U:
受入情報ファイル現在のレコードの受入数量
サブルーチンの受入情報読込みでは、受入情報ファイルのレコードを1つ読み込んでUに受入数量、KUに部品番号を格納します。払出情報読込みでは、払出情報ファイルのレコードを一つ読み込んでHに払出数量、KHに部品番号を格納します。

まず、ループ最初のKU:KHの比較ですが、これは互いの部品コードの関係によって分岐しています。
KU<KH 受入の部品番号<払出の部品番号
払出情報のレコードが次の部品に移っていますので、「受入部品に対応する払出情報がない」または「すでに受入ファイルの前レコードまでで払出数量分に達している」場合です。この場合は受入ファイルのレコード内容そのままを、期末在庫としてファイルに書き出し、次の受入記録を読み込みます
KU>KH 受入の部品番号>払出の部品番号
払出ファイルのレコードに対する受入ファイルのレコードがない場合です。払出記録はあるのに受入記録がないということなのでエラー処理となっています。
KU=KH 受入の部品番号=払出の部品番号
払出記録に対応する受入記録があるので、総払出数量Hから受入数量Uを減じます。
これに続く処理は、
  • H>0: まだ当該部品の払出数量が残っているので次の受入れ記録を読み込む。
  • H=0: 払出数量の残数が0になると共に、受入ファイルの現在のレコードの受入れ数量もちょうど0になったので、受入情報及び払出情報の両方を読み込む
  • H<0: 現在の受入れファイルのレコード分を減じた時点でHが0以下になったということは、期中の払出数量を超えたということなので、減算が超過した分は期末在庫として書き出し。受入情報及び払出情報の両方を読み込む
というようにHの値によってさらに3つの処理に分岐することになります。
上記の流れでいくと、P1~P3のうち、"受入情報読込み"が入る箇所は、P1及びP3となる事がわかります。
P2で「受入情報読込み」を行うと、P3でも再度「受入情報読込み」を行うことになってしまうため、受ファイルのレコードを一つ抜かしてしまうことになります。P3を処理なしにしてP2だけ「受入情報読込み」を行った場合は、H=0の時に「払出情報読込み」しか行わないということになってしまうので適切ではありません。

∴オ:P1,P3

設問5

図3中の条件C1,C2に入れる組合せとして正しい答えを,解答群の中から選べ。
解答群
pm05_4.png
解答選択欄
  •  
  •  

解説

設問4の H:0 を比較する分岐の流れをもう一度見てみましょう。
  1. H>0: まだ当該部品の払出数量が残っているので次の受入れ記録を読み込む。
  2. H=0: 払出数量の残数が0になると共に、受入ファイルの現在のレコードの受入れ数量もちょうど0になったので、受入情報及び払出情報の両方を読み込む。
  3. H<0: 現在の受入れファイルのレコード分を減じた時点でHが0以下になったということは、期中の払出数量を超えたということなので、減算が超過した分は期末在庫として書き出し。受入情報及び払出情報の両方を読み込む。
「期末在庫書込み」があるC1がH<0、受入情報読込みのみの処理である右側の分岐がH>0、他に処理もなく両方の次レコードを読み込むC2がH=0というそれぞれの分岐条件である事になります。

∴ウ:C1→<、C2→=

最後に例を使って突合せ処理をシミュレーションしてみましょう。突合せに使用する受入情報ファイルと払出情報ファイルは以下の通りです。
pm05_7.png
  1. まず受入情報を読み込みます。KU←001、U←200
  2. 次に払出情報を読み込みます。KH←001、H←950
  3. KU=KHなので、H-U=H(750)
  4. H>0なので、受入情報を読み込みます。KU←001、U←300
  5. KU=KHなので、H-U=H(450)
  6. H>0なので、受入情報を読み込みます。KU←001、U←300
  7. KU=KHなので、H-U=H(150)
  8. H>0なので、受入情報を読み込みます。KU←001、U←300
  9. KU=KHなので、H-U=H(-150)
  10. H<0なので、超過分150を期末在庫として書き込みます。
  11. 受入情報・払出情報読込み KU←002、U←120、KH←002、H←470
  12. KU=KHなので、H-U=H(350)
  13. H>0なので、受入情報を読み込みます。KU←002、U←200
  14. KU=KHなので、H-U=H(150)
  15. H>0なので、受入情報を読み込みます。KU←002、U←150
  16. KU=KHなので、H-U=H(0)
  17. H=0なので、受入情報・払出情報を読込みます。KU←003、U←15、KH←003、H←30
  18. KU=KHなので、H-U=H(15)
  19. H>0なので、受入情報を読み込みます。KU←003、U←30
  20. KU=KHなので、H-U=H(-15)
  21. H<0なので、超過分15を期末在庫として書き込みます。
  22. 受入情報・払出情報読込み 両方のファイルが終端なので KU←最大値、KH←最大値
  23. 棚卸計算終了。
以上の流れで作成された期末在庫ファイルは以下のようになります。
pm05_8.png

Pagetop