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

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

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

 

〔プログラムの説明〕

 地域の5か所に建物(以下,校舎という)をもち,中学生向けの進学指導を行っている P 学習塾では, 定期的にテストを実施している。全ての塾生は,国語,数学, 英語,理科及び社会の5教科のテストを受ける。 テスト結果は,1回分を学年別の結果ファイルに格納する。 各校舎の各学年には1名以上の塾生が所属しており,1学年の人数は塾全体で 999 人を超えることはない。

 このプログラムは,結果ファイルに格納されたある学年のテスト結果を塾生ごとに集計して, 5教科の得点の合計(以下,合計点という)の降順に並べた順位リストを印字する。

 

(1) 結果ファイルは,図1に示すレコード様式の順ファイルであり,1学年分のレコードが格納されている。

図1 結果ファイルのレコード様式

@ 塾生番号は,塾全体で一意となる番号である。

A 校舎番号には,塾生番号で示される塾生が所属する校舎の番号が 01〜05 で格納されている。

B テスト結果には,塾生番号で示される塾生の各教科の得点が 000〜100 で格納されている。

 

(2) 順位リストは,図2に示す印字様式である。見出しは印刷済みとする。

図2 順位リストの印字様式

@ 全体順位には塾全体での順位を,校舎内順位には塾生が所属する校舎での順位を印字する。 印字行は合計点の降順に並べる。

A 同じ合計点の塾生は同じ順位とする。例えば,塾全体で合計点の高い塾生から, 492 点が1名,488 点が2名,487点が1名いた場合は,図3のように順位付けして印字する。

図3 順位リストの印字例

 

〔プログラム1〕

(行番号)

Ø1  DATA DIVISION.
Ø2  FILE SECTION.
Ø3  SD SRT-FILE.
Ø4  Ø1 SRT-REC.
Ø5     Ø2 SRT-NO         PIC 9(6).
Ø6     Ø2 SRT-BLD        PIC 9(2).
Ø7     Ø2 SRT-TOTAL      PIC 9(3).
Ø8  FD RSL-FILE.
Ø9  Ø1 RSL-REC.
1Ø     Ø2 RSL-NO         PIC 9(6).
11     Ø2 RSL-BLD        PIC 9(2).
12     Ø2 RSL-SCR        PIC 9(3) OCCURS 5.
13  FD PRT-FILE.
14  Ø1 PRT-REC.
15     Ø2 PRT-ALL-RANK   PIC ZZ9.
16     Ø2 PRT-SP1        PIC X(7).
17     Ø2 PRT-NO         PIC 9(6).
18     Ø2 PRT-SP2        PIC X(4).
19     Ø2 PRT-BLD        PIC 9(2).
2Ø     Ø2 PRT-SP3        PIC X(8).
21     Ø2 PRT-BLD-RANK   PIC ZZ9.
22     Ø2 PRT-SP4        PIC X(9).
23     Ø2 PRT-TOTAL      PIC ZZ9.
24  WORKING-STORAGE SECTION.
25  77 SRT-FLAG       PIC X(1) VALUE SPACE.
26     88 SRT-EOF       VALUE "E".
27  77 RSL-FLAG       PIC X(1) VALUE SPACE.
28     88 RSL-EOF       VALUE "E".
29  77 ALL-ORD-NO       PIC 9(3) VALUE ZERO.
3Ø  77 ALL-RANK         PIC 9(3) VALUE ZERO.
31  77 ALL-CR-TOTAL     PIC 9(3) VALUE 999.
32  Ø1 BLD-INF.
33     Ø2 BLD-ORD-NO      PIC 9(3) OCCURS 5 VALUE ZERO.
34     Ø2 BLD-RANK        PIC 9(3) OCCURS 5 VALUE ZERO.
35     Ø2 BLD-CR-TOTAL    PIC 9(3) OCCURS 5 VALUE 999.
36  PROCEDURE DIVISION.
37  MAIN-PROC.
38      OPEN INPUT  RSL-FILE
39           OUTPUT PRT-FILE.
4Ø      SORT SRT-FILE  
41           INPUT  PROCEDURE IS REL-PROC
42           OUTPUT PROCEDURE IS RET-PROC.
43      CLOSE RSL-FILE PRT-FILE.
44      STOP RUN.
45  REL-PROC.
46      PERFORM UNTIL RSL-EOF
47         READ RSL-FILE AT END     SET RSL-EOF TO TRUE
48                       NOT AT END PERFORM CALC-PROC
49         END-READ
5Ø      END-PERFORM.
51  CALC-PROC.
52      MOVE RSL-NO  TO SRT-NO.
53      MOVE RSL-BLD TO SRT-BLD.
54      COMPUTE SRT-TOTAL = RSL-SCR(1) + RSL-SCR(2) +
55                  RSL-SCR(3) + RSL-SCR(4) + RSL-SCR(5).
56      RELEASE SRT-REC.
57  RET-PROC.
58      PERFORM UNTIL SRT-EOF
59         RETURN SRT-FILE AT END     SET SRT-EOF TO TRUE
6Ø                         NOT AT END PERFORM PRT-PROC
61         END-RETURN
62      END-PERFORM.
63  PRT-PROC.
64       
65      IF SRT-TOTAL < ALL-CR-TOTAL THEN
66         MOVE SRT-TOTAL TO ALL-CR-TOTAL
67         
68      END-IF.
69      IF SRT-TOTAL < BLD-CR-TOTAL(SRT-BLD) THEN
7Ø         MOVE SRT-TOTAL TO BLD-CR-TOTAL(SRT-BLD)
71         
72      END-IF.
73      INITIALIZE PRT-REC.
74      MOVE ALL-RANK TO PRT-ALL-RANK.
75      MOVE SRT-NO TO PRT-NO.
76      MOVE SRT-BLD TO PRT-BLD.
77      MOVE BLD-RANK(SRT-BLD) TO PRT-BLD-RANK.
78      MOVE SRT-TOTAL TO PRT-TOTAL.
79      WRITE PRT-REC.

 

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

 

a に関する解答群 ア ASCENDING KEY SRT-NO       イ ASCENDING KEY SRT-TOTAL

ウ DESCENDING KEY SRT-NO       ウ DESCENDING KEY SRT-TOTAL

 

b に関する解答群 ア ADD 1 TO ALL-ORD-NO BLD-ORD-NO(SRT-BLD)

イ ADD 1 TO ALL-RANK BLD-RANK(SRT-BLD)

ウ INITIALIZE BLD-INF

エ MOVE ALL-ORD-NO TO BLD-ORD-NO(SRT-BLD)

 

c,d に関する解答群 ア MOVE ALL-CR-TOTAL TO ALL-RANK

イ MOVE ALL-ORD-NO TO ALL-RANK

ウ MOVE ALL-ORD-NO TO BLD-RANK(SRT-BLD)

エ MOVE BLD-CR-TOTAL(SRT-BLD) TO BLD-RANK(SRT-BLD)

オ MOVE BLD-ORD-NO(SRT-BLD) TO ALL-RANK

カ MOVE BLD-ORD-NO(SRT-BLD) TO BLD-RANK(SRT-BLD)

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

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

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

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

 

設問2  図4の表示様式に示すとおり,“AVG:”に続けて塾全体の平均点を表示し, “BLD AVG:”に続けて校舎ごとの平均点を,校舎番号 01〜05 の昇順に 表示するようにプログラムを変更する。表1中の に入れる正しい答えを,解答群の中から選べ。

 

図4 表示様式

 

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

     処置             変更内容
行番号 31 と 32 の間
に追加
 77 ALL-TOTAL    PIC 9(8) VALUE ZERO.
 77 ALL-AVG      PIC 9(3)V9(1).
 77 DSP-AVG      PIC ZZ9.9.
 77 CNT          PIC 9(2).
行番号 35 と 36 の間
に追加
 Ø2 BLD-TOTAL    PIC 9(6) OCCURS 5 VALUE ZERO.
 Ø2 BLD-AVG      PIC 9(3)V9(1) OCCURS 5 VALUE ZERO.
行番号 43 と 44 の間
に追加
 COMPUTE ALL-AVG = ALL-TOTAL / ALL-ORD-NO.
 MOVE ALL-AVG TO DSP-AVG.
 DISPLAY "AVG: " DSP-AVG.
 DISPLAY "BLD-AVG: " WITH NO ADVANCING.
 PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT > 5
    COMPUTE BLD-AVG(CNT) =
       
    MOVE BLD-AVG(CNT) TO DSP-AVG
    DISPLAY DSP-AVG "  " WITH NO ADVANCING
 END-PERFORM.

に追加
 ADD SRT-TOTAL TO ALL-TOTAL BLD-TOTAL(SRT-BLD).

 

e に関する解答群 ア 行番号 50 と 51 の間       イ 行番号 51 と 52 の間

ウ 行番号 62 と 63 の間       エ 行番号 79 の後ろ

 

f に関する解答群 ア BLD-TOTAL(CNT) / BLD-ORD-NO(CNT)

イ BLD-TOTAL(CNT) / BLD-ORD-NO(SRT-BLD)

ウ BLD-TOTAL(CNT) / BLD-RANK(CNT)

エ BLD-TOTAL(CNT) / BLD-RANK(SRT-BLD)

 

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

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


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