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

平成25年 春期 基本情報技術者 午後 問10
問10   COBOL

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

〔プログラムの説明〕

 1993 年4月1日に創立したX社では,創立 20 周年の記念日である 2013 年4月1日に, 勤続年数が0〜 20 年の全ての従業員に特別給を支給することにした。特別給は,基本給に, 表1に示す決定表によって導出される支給係数を掛け合わせて百円未満を切り捨てた金額であり, 創立記念日に上司が現金の入った封筒を部下に手渡す。 このプログラムは,従業員ファイルに格納されている従業員の情報を読み込み, 各従業員への支給金額と,各金種の必要数を支給ファイルに出力する。ここで, 金種は1万円紙幣,5千円紙幣,千円紙幣,5百円硬貨,百円硬貨の5種類とする。

       表1 支給係数の決定表

(1) 従業員ファイルは,図1に示すレコード様式の順ファイルである。

 従業員番号  
  6桁
 役職  
  1桁
 入社日  
  8桁
 基本給  
  6桁

  図1 従業員ファイルのレコード様式

@ 役職には,一般職の場合は0,管理職の場合は1を格納する。

A 入社日には,入社した年,月,日を,それぞれ4桁,2桁,2桁の西暦で格納する。 表1に示す支給係数の決定表の条件1(勤続年数)は,入社日から 2013 年4月1日までの 経過年数とする。例えば,入社日が 2012 年4月1日の場合は1年であり, 2012 年4月2日の場合は0年である。

(2) 支給ファイルは,図2に示すレコード様式の順ファイルである。

 従業員番号  
   6桁
 支給金額  
  6桁
                金種別必要数
 1万円紙幣  
   2桁
 5千円紙幣  
   2桁
 千円紙幣  
   2桁
 5百円硬貨  
   2桁
 百円硬貨  
   2桁

        図2 支給ファイルのレコード様式

@ 支給金額には,基本給と支給係数から算出した支給金額を格納する。

A 金種別必要数には,それぞれの金種の必要数を格納する。 ここで,必要数の合計が最少となるようにする。

〔プログラム〕

(行番号)

 1  DATA DIVISION.
 2  FILE SECTION.
 3  FD EMP-F.
 4  01 E-REC.
 5     02 E-NO            PIC 9(6).
 6     02 E-STATUS        PIC 9(1).
 7        88 NON-MANAGER     VALUE 0.
 8        88 MANAGER         VALUE 1.
 9     02 E-JOIN.
10        03 E-YEAR          PIC 9(4).
11        03 E-MMDD          PIC 9(4)
12     02 E-BASE          PIC 9(6).
13  FD PAY-F.
14  01 P-REC.
15     02 P-NO            PIC 9(6).
16     02 P-PAY           PIC 9(6).
17     02 P-CUR-TBL.
18        03 P-CUR           PIC 9(2) OCCURS 5.
19  WORKING-STORAGE SECTION.
20  77 EMP-FLAG        PIC X(1) VALUE SPACE.
21     88 EMP-EOF         VALUE "E".
22  77 W-YEAR          PIC 9(2).
23     88 UPTO-3          VALUE  0 THRU 3.
24     88 UPTO-9          VALUE  4 THRU 9.
25     88 UPTO-20         VALUE 1O THRU 20.
26  77 PAY-RATE        PIC 9V99.
27  77 W-PAY           PIC 9(6).
28  01 CUR-VALUE       PIC X(25) VALUE "1000005000010000050000100".
29  01 CUR-TBL REDEFINES CUR-VALUE.
30     02 CUR-KIND        PIC 9(5) OCCUR 5.
31  01 CNT             PIC 9(1).
32  PROCEDURE DIVISION.
33  MAIN-PROC.
34      OPEN INPUT  EMP-F
35           OUTPUT PAY-F.
36      PERFORM UNTIL EMP-EOF
37         READ EMP-F AT END     SET EMP-EOF TO TRUE
38                    NOT AT END MOVE E-NO TO P-NO
39                               PERFORM DEC-PROC
40                               PERFORM CUR-PROC
41                               WRITE P-REC
42         END-READ
43      END-PERFORM.
44      CLOSE EMP-F PAY-F.
45      STOP RUN.
46  DEC-PROC.
47      COMPUTE W-YEAR = 2013 - E-YEAR.
48      IF  THEN
49         SUBTRACT 1 FROM W-YEAR
50      END-IF.
51      EVALUATE TRUE
52         WHEN UPTO-3  AND NON-MANAGER
53            MOVE 0.05 TO PAY-RATE
54         WHEN UPTO-3  AND MANAGER
55         WHEN UPTO-9  AND NON-MANAGER
56            MOVE 0.10 TO PAY-RATE
57         WHEN UPTO-9  AND MANAGER
58         WHEN UPTO-20 AND NON-MANAGER
59            MOVE 0.15 TO PAY-RATE
60         WHEN UPTO-20 AND MANAGER
61            MOVE 0.20 TO PAY-RATE
62      END-EVALUATE.
63      COMPUTE P-PAY = E-BASE * PAY-RATE.
64      DIVIDE 100 INTO P-PAY.
65      MULTIPLY 100 BY P-PAY.
66  CUR-PROC.
67      INITIALIZE P-CUR-TBL.
68      MOVE 1 TO CNT.
69      MOVE P-PAY TO W-PAY.
70      PERFORM UNTIL W-PAY = 0
71         IF W-PAY >= CUR-KIND(CNT) THEN
72            AND 1 TO P-CUR(CNT)
73            
74         ELSE
75            
76         END-IF
77      END-PERFORM.

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

a に関する解答群

ア E-MMDD < 0401       イ E-MMDD > 0401

ウ W-YEAR < 20        エ W-YEAR >= 20

b,c に関する解答群

ア ADD 1 TO CNT

イ ADD CNT TO P-CUR(CNT)

ウ MOVE CUR-KIND(CNT) TO P-CUR(CNT)

エ SUBTRACT CUR-KIND(CNT) FROM W-PAY

オ SUBTRACT P-CUR(CNT) FROM W-PAY

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

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

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

基本情報技術者試験


設問2 プログラム中の,支給係数を求める EVALUATE 文について, 正しく判定できることを確認するために,従業員ファイルのテストデータを作成した。 全ての選択対象( WHEN 指定に書かれた作用対象を指す)について真を判定できる組合せを, 解答群の中から選べ。ここで,解答群では見やすくするために項目の区切りに“,”を 挿入しているが,実際のデータ中には存在しない。

解答群

 ア  000001,0,20100901,117000
000002,1,20100401,121000
000003,0,20060401,151000
000004,1,20020901,192000
000005,0,20000401,198000
000006,1,19980401,254000
   イ  000001,0,20110401,115000
000002,1,20110901,132000
000003,0,20060401,151000
000004,1,20060401,186000
000005,0,20010401,195000
000006,1,19970901,223000
 ウ  000001,0,20120401,102000
000002,1,20080901,132000
000003,0,20070401,151000
000004,1,20050901,186000
000005,0,20040401,188000
000006,1,20010901,223000
   エ  000001,0,20120901,110800
000002,1,20100401,132000
000003,0,20080401,151000
000004,1,20020901,176000
000005,0,20010401,198000
000006,1,19950901,254000
解答 ←クリックすると正解が表示されます

基本情報技術者試験


設問3 金融機関に現金を用意してもらうために,金種ごとの必要数を集計して, 図3に示すとおり画面に表示するようプログラムを変更する。 表2中の に入れる正しい答えを,解答群の中から選べ。

 10000 : 00001415  
 05000 : 00000267
 01000 : 00002189
 00500 : 00000311
 00100 : 00002052
 図3 画面表示の例

      表2 プログラムの変更

     処置             変更内容 
 行番号 30 と 31 の
 間に追加
 01 CUR-TBL-X REDEFINES CUR-VALUE.
    02 CUR-KIND-X   PIC X(5) OCCURS 5.
 01 TOTAL-TBL.
    02 CUR-TOTAL    PIC 9(8) OCCURS 5 VALUE ZERO.
 01 TOTAL-TBL-X REDEFINES TOTAL-TBL.
    02 CUR-TOTAL-X  PIC 9(8) OCCURS 5.
 
 PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT > 5
    DISPLAY CUR-KIND-X(CNT) " : "  CUR-TOTAL-X(CNT)
 END-PERFORM.
 行番号 77 の後ろに
 追加
  PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT > 5
     
  END-PERFORM.

d に関する解答群

ア 行番号 42 と 43 の間に追加       イ 行番号 44 と 45 の間に追加

ウ 行番号 46 と 47 の間に追加       エ 行番号 66 と 67 の間に追加

e に関する解答群

ア ADD 1 TO CUR-TOTAL(CNT)

イ ADD CUR-KIND(CNT) TO CUR-TOTAL(CNT)

ウ ADD P-CUR(CNT) TO CUR-TOTAL(CNT)

エ ADD P-PAY TO CUR-TOTAL(CNT)

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

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


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