平成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)
エ
ウ
イ
ウ
基本情報技術者試験
設問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 の間
エ
オ
[←前の問題]
[次の問題→]
[問題一覧表]
[分野別]
[基本情報技術者試験TOP
]
©2004-2024 情報処理試験.jp
|
|
|