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

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

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

〔プログラムの説明〕

ある小学校における保護者名簿の作成プログラムである。 昨年度の保護者名簿及び新入学児童(新1年生)の保護者名簿を入力し,本年度の保護者名簿を作成する。

(1) 昨年度の保護者名簿及び本年度の保護者名簿は,次のレコード様式の順ファイルである。

@ レコードは,先頭から 33 けたのデータ(保護者氏名及び電話番号)の昇順に整列されている。

A 在校児童欄には,保護者が保護する在校児童の学年と氏名が格納されている。

B 在校児童が複数いる場合,学年で昇順に整列されている。

C 在校児童が4人以下の場合,左詰めで格納され,残りの領域には空白が詰められている。 例:3年生と5年生に在校児童をもつ保護者の場合,次のように格納される。

(2) 新入学児童の保護者名簿は,次のレコード様式の順ファイルである。

@ レコードは,先頭から 33 けたのデータ(保護者氏名及び電話番号)の昇順に整列されている。

A 児童氏名には,保護者が保護する新入学児童の氏名が格納されている。

B 新入学児童が4人以下の場合,左詰めで格納され,残りの領域には空白が詰められている。

(3) 1人の保護者が保護する児童は5人を超えないものとする。

(4) 在校児童の学年は無条件に1学年繰り上げ,6学年を修了した児童は卒業する。

(5) 転入や転出は考慮しない。

(6) 保護している在校児童がすべて卒業し,かつ保護する新入学児童がいない場合, その保護者のレコードを削除する。

(7) 新入学児童の保護者が未登録だった場合,その保護者のレコードを新規に登録する。

〔プログラム〕
(行番号)
 1  DATA DIVISION.
 2  FILE SECTION.
 3  FD  OLD-FILE.
 4  01  OLD-REC          PIC X(138).
 5  FD  NEW-FILE.
 6  01  NEW-REC          PIC X(138).
 7  FD  ENT-FILE.
 8  01  ENT-REC          PIC X(133).
 9  WORKING-STORAGE SECTION.
10  01 W-OLD-REC.
11     02 OLD-ID         VALUE SPACE.
12        88 OLD-EOF     VALUE HIGH-VALUE.
13           03 OLD-PARENT     PIC X(20).
14           03 OLD-TEL        PIC X(13).
15     02 OLD-PUPIL            OCCURS 5 TIMES.
16        03 OLD-NUM           PIC 9(1).
17        03 OLD-NAME          PIC X(20).
18  01 W-NEW-REC.
19     02 NEW-ID.
20        03 NEW-PARENT        PIC X(20).
21        03 NEW-TEL           PIC X(13).
22     02 NEW-PUPIL            OCCURS 5 TIMES.
23        03 NEW-NUM           PIC 9(1).
24        03 NEW-NAME          PIC X(20).
25  01 W-ENT-REC.
26     02 ENT-ID         VALUE SPACE.
27        88 ENT-EOF     VALUE HIGH-VALUE.
28           03 ENT-PARENT     PIC X(20).
29           03 ENT-TEL        PIC X(13).
30     02 ENT-NAME             OCCURS 5 TIMES PIC X(20).
31  01 OLD-CNT                 PIC 9(1).
32  01 NEW-CNT                 PIC 9(1).
33  01 ENT-CNT                 PIC 9(1).
34  01 READ-FLAG               PIC X(1) VALUE "B".
35     88 READ-BOTH            VALUE "B".
36     88 READ-OLD-FILE        VALUE "O".
37     88 READ-ENT-FILE        VALUE "E".
38  PROCEDURE DIVISION.
39  MAIN-PROC.
40      OPEN INPUT OLD-FILE ENT-FILE OUTPUT NEW-FILE.
41      PERFORM UNTIL OLD-EOF AND ENT-EOF
42         IF READ-OLD-FILE OR READ-BOTH THEN
43            READ OLD-FILE INTO W-OLD-REC
44                          AT END SET OLD-EOF TO TRUE
45            END-READ
46         END-IF
47         IF READ-ENT-FILE OR READ-BOTH THEN
48            READ ENT-FILE INTO W-ENT-REC
49                          AT END SET ENT-EOF TO TRUE
50            END-READ
51         END-IF
52         IF  THEN
53            PERFORM CREATE-PROC
54         END-IF
55      END-PERFORM.
56      CL OS E OLD-FILE ENT-FILE NEW-FILE.
57      STOP RUN.
58  CREATE-PROC.
59      MOVE SPACE TO W-NEW-REC.
60      EVALUATE TRUE
61      WHEN OLD-ID < ENT-ID
62         PERFORM NUM-UP-PROC
63         
64         SET READ-OLD-FILE TO TRUE
65      WHEN OLD-ID = ENT-ID
66         PERFORM NUM-UP-PROC
67         MOVE OLD-ID TO NEW-ID
68         PERFORM ENT-ADD-PROC
69         MOVE 1 TO OLD-CNT
70         PERFORM VARYING NEW-CNT FROM ENT-CNT BY 1 
71                  UNTIL NEW-CNT > 5
72            
73            ADD 1 TO OLD-CNT
74         END-PERFORM
75         SET READ-BOTH TO TRUE
76      WHEN OLD-ID > ENT-ID
77         MOVE ENT-ID TO NEW-ID
78         PERFORM ENT-ADD-PROC
79         SET READ-ENT-FILE TO TRUE
80      END-EVALUATE.
81      IF NEW-PUPIL(1) NOT = SPACE THEN
82         WRITE NEW-REC FROM W-NEW-REC
83      END-IF.
84  NUM-UP-PROC.
85      PERFORM VARYING OLD-CNT FROM 1 BY 1 
86            UNTIL OLD-CNT > 5 OR OLD-PUPIL(OLD-CNT) = SPACE
87         IF OLD-NUM(OLD-CNT) < 6 THEN
88            
89         ELSE
90            MOVE SPACE TO OLD-PUPIL(OLD-CNT)
91         END-IF
92      END-PERFORM.
93  ENT-ADD-PROC.
94      PERFORM VARYING ENT-CNT FROM 1 BY 1
95            UNTIL ENT-CNT > 5 OR ENT-NAME(ENT-CNT) = SPACE
96         MOVE 1 TO NEW-NUM(ENT-CNT)
97         MOVE ENT-NAME(ENT-CNT) TO NEW-NAME(ENT-CNT)
98      END-PERFORM.

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

a に関する解答群

ア NOT (OLD-EOF AND ENT-EOF)    イ NOT (OLD-EOF OR ENT-EOF)

ウ OLD-EOF AND ENT-EOF       エ OLD-EOF OR ENT-EOF

b 〜 d に関する解答群

ア ADD 1 TO OLD-NUM(OLD-CNT)

イ MOVE OLD-ID TO NEW-ID

ウ MOVE OLD-PUPIL(ENT-CNT) TO NEW-PUPIL(NEW-CNT)

エ MOVE OLD-PUPIL(OLD-CNT) TO NEW-PUPIL(NEW-CNT)

オ MOVE W-OLD-REC TO W-NEW-REC

カ PERFORM ENT-ADD-PROC

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

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

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

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

基本情報技術者試験


設問2 保護者名簿から削除される保護者,つまり,昨年度の保護者名簿には登録されていたが, 本年度の保護者名簿には登録されない保護者の氏名と電話番号を画面に表示するようにプログラムを改造したい。 正しい答えを,解答群の中から選べ。

解答群

ア 

処置 プログラムの変更内容
行番号 53と行番号 54
の間に追加
ELSE
  DISPLAY "REMOVED DATA = " OLD-ID

イ 

処置 プログラムの変更内容
行番号 82 と行番号 83
の間に追加
ELSE
  DISPLAY "REMOVED DATA = " OLD-ID

ウ 

処置 プログラムの変更内容
行番号 90 と行番号 91
の間に追加
DISPLAY "REMOVED DATA = " OLD-ID

エ 

処置 プログラムの変更内容
行番号 92 と行番号 93
の間に追加
DISPLAY "REMOVED DATA = " OLD-ID.

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

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