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

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

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

〔プログラムの説明〕

 比例代表選挙において,得票ファイルを入力し,ドント式で各政党の当選者数を決定して, 政党別獲得議席数リストを出力するプログラムである。ドント式とは,各政党の得票数を 整数1,2,3,…で割ってゆき,その商の大きい順に議席定数に達するまで議席を 各政党に配分する方式である。議席定数 15 名の場合の例を表1に示す。

   表1 議席定数 15 名の場合の例

 @〜Dは当選の順番を示す。

(1) 得票ファイル VOTE-F は順ファイルで,レコード様式は図1のとおりである。

    図1得票ファイル VOTE-F のレコード様式

 @ 政党数は最大 50 とする。

 A 得票ファイルのデータに誤りはないものとする。

(2) 議席定数は,このプログラムヘのパラメタとして渡され,数字3けたで値は1以上とする。

(3) 政党別獲得議席数リストファイル PRINT-F の印字様式は,図2のとおりである。

 政党名     獲得議席数
XXX … XXX    zz9
XXX … XXX    zz9
  :      :

図2 政党別獲得議席数リストファイル PRINT-F の印字様式

@ 政党別獲得議席数リストの見出しは印刷済とする。

A 獲得議席数の多い順に印字する。

〔プログラム〕

(行番号) 
 1  DATA DIVISI0N.
 2  FILE SECTI0N.
 3  FD  VOTE-F.
 4  01  VOTE-R.
 5      05  V-PARTY-NAME       PIC X(20).
 6      05  V-VALUE            PIC 9(10).
 7  FD  PRINT-F.
 8  01  PRINT-R.
 9      05  P-PARTY-NAME       PIC X(20).
10      05  FILLER             PIC X(05).
l1      05  P-SEATS            PIC ZZ9.
12  SD  SORT-F.
13  01  SORT-R.
14      05  S-PARTY-NAME       PIC X(20).
15      05  S-VPOINT           PIC 9(10).
16  WORKING-STORAGE SECTION.
17  01  EOF-SW                 PIC 9(01).
18  01  FOUND-SW               PIC 9(01).
19  01  SEAT-CNT               PIC 9(03).
20  01  RESULT-INFO.
21      05  R-CNT              PIC 9(03).
22      05  R-TBL              OCCURS 50.
23          10 R-PARTY-NAME    PIC X(20).
24          10 R-SEATS         PIC 9(10).
25  01  WK-I                   PIC 9(10).
26  LINKAGE SECTION.
27  01  NUM-SEATS              PIC 9(03).
28  PROCEDURE DIVISION USING NUM-SEATS.
29  MAIN-CTL.
30     MOVE 0 TO R-CNT.
31     SORT SORT-F 
32          INPUT  PROCEDURE S-INPUT-PROC
33          OUTPUT PROCEDURE S-OUTPUT-PROC.
34     PERFORM PRINT-PROC.
35     EXIT PROGRAM.
36  S-INPUT-PROC.
37    OPEN INPUT VOTE-F.
38    MOVE 0 TO EOF-SW.
39    PERFORM UNTIL EOF-SW = 1
40      READ VOTE-F AT END MOVE 1 TO EOF-SW
41                  NOT AT END
42                  PERFORM VARYING WK-I FROM 1 BY 1
43                          UNTIL   WK-I > NUM-SEATS
44                    MOVE V-PARTY-NAME TO S-PARTY-NAME
45                    DIVIDE V-VALUE BY WK-I GIVING S-VPOINT
46                    RELEASE SORT-R
47                  END-PERFORM
48      END-READ
49    END-PERFORM.
50    CLOSE VOTE-F.
51  S-OUTPUT-PROC.
52     MOVE 0 TO EOF-SW.
53     PERFORM VARYING SEAT-CNT FROM 1 BY 1
54              
55       RETURN SORT-F AT END MOVE 1 TO EOF-SW
56                     NOT AT END PERFORM REGIST-RTBL
57       END-RETURN
58     END-PERFORM.
59  REGIST-RTBL.
60     MOVE 0 TO FOUND-SW.
61     PERFORM VARYING WK-I FROM 1 BY 1
62             UNTIL WK-I > R-CNT OR FOUND-SW = 1
63       IF S-PARTY-NAME = R-PARTY-NAME(WK-I) THEN 
64          
65          MOVE 1 TO FOUND-SW
66       END-IF
67     END-PERFORM.
68     IF FOUND-SW = 0 THEN
69        ADD 1 TO R-CNT
70        MOVE S-PARTY-NAME TO R-PARTY-NAME(R-CNT)
71         
72     END-IF.
73  PRINT-PROC.
74     OPEN OUTPUT PRINT-F.
75     PERFORM VARYING WK-I FROM 1 BY 1 UNTIL WK-I > R-CNT
76       MOVE SPACE TO PRINT-R
77       MOVE R-PARTY-NAME(WK-I) TO P-PARTY-NAME
78       MOVE R-SEATS     (WK-I) TO P-SEATS
79       WRITE PRINT-R
80     END-PERFORM.
81     CLOSE PRINT-F.

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

a に関する解答群

ア ASCENDING KEY S-PARTY-NAME

イ ASCENDING KEY S-VPOINT

ウ DESCENDING KEY S-PARTY-NAME

エ DESCENDING KEY S-VPOINT

b に関する解答群

ア UNTIL EOF-SW = 1

イ UNTIL SEAT-CNT >= NUM-SEATS

ウ UNTIL SEAT-CNT > NUM-SEATS OR EOF-SW = 1

エ UNTIL SEAT-CNT <= NUM-SEATS

c,d に関する解答群

ア ADD 1 TO R-SEATS(R-CNT)

イ ADD 1 TO R-SEATS(WK-I)

ウ MOVE 1 TO R-SEATS(R-CNT)

エ MOVE 1 TO R-SEATS(WK-I + 1)

オ MOVE 1 TO R-SEATS(WK-I - 1)

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

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

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

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

基本情報技術者試験


設問2 この方式では,最終当選順位と次点以降の順位の商が等しい場合が起こりうる。

 また,最終当選順位の前にも等しい商での当選が並んでいる可能性がある。

 このため,最終当選順位と次点の順位の商が同じ場合は,次のメッセージ "m_WAY TIE FOR n-th PLACE"(第 n 位から m 名が同点である)を表示するように プログラムを変更する。 次の表2中の に入れる正しい答えを,解答群の中から選べ。

    表2 プログラムの変更内容

     処置     変更内容
 行番号 25 と 26 の間
 に追加

01  W-VPOINT              PIC 9(10).
01  WARNING-MESSAGE.
    05  EQUAL-CNT         PIC 9(03).
    05  FILLER PIC X(13)  VALUE "-WAY TIE FOR ".
    05  EQUAL-FROM        PIC 9(03).
    05  FILLER PIC X(09)  VALUE "-th PLACE".
 
 に追加

  PERFORM SET-BREAK
 
 に追加

  PERFORM CHECK-EQUAL.
 行番号 81 の次
 に追加

* SET EQUAL-FROM OF BREAK POINT AND COUNT EQUAL-CNT
 SET-BREAK.
    IF SEAT-CNT = 1 THEN
       MOVE 1 TO EQUAL-FROM
       MOVE 1 TO EQUAL-CNT
    ELSE
       IF S-VPOINT = W-VPOINT THEN
          ADD 1 TO EQUAL-CNT
       ELSE
          MOVE SEAT-CNT TO EQUAL-FROM
          MOVE 1 TO EQUAL-CNT
       END-IF
    END-IF.
    MOVE S-VPOINT TO W-VPOINT.
* CHECK EQUAL-CNT AND DISPLAY WARNING-MESSAGE
 CHECK-EQUAL.
    IF EOF-SW NOT = 1 THEN
       RETURN SORT-F AT END MOVE 1 TO EOF-SW
       END-RETURN
       IF EOF-SW NOT = 1 AND S-VPOINT = W-VPOINT THEN
          PERFORM UNTIL EOF-SW = 1 OR
                        S-VPOINT NOT = W-VPOINT
            ADD 1 TO EQUAL-CNT
            RETURN SORT-F AT END MOVE 1 TO EOF-SW
            END-RETURN
          END-PERFORM
       ELSE
          MOVE 1 TO EQUAL-CNT
       END-IF
       IF EQUAL-CNT > 1 THEN
          DISPLAY WARNING-MESSAGE
       END-IF
     END-IF. 
解答群

ア 行番号 34 と 35 の間      イ 行番号 50 と 51 の間

ウ 行番号 52 と 53 の間      エ 行番号 56 と 57 の問

オ 行番号 58 と 59 の間

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

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


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