東京理科大学 infoserv[更新日]2001.4.20


問10

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

〔プログラムの説明〕

研修の申込みを登録した研修申込ファイルがある。 研修の申込みは,1 人につき 1 回だけであり,10 件まで申し込むことができる。 開催日が同一の研修を複数記載した申込者をエラーとし, エラーリストを印字するプログラムである。

(1) 研修申込ファイルのレコード様式は,次のとおりである。

 同じ研修番号は,指定しないものとする。

 研修の申込みは,研修番号の欄 1 から順次登録し,10 件に満たない場合は,残りの欄を空白とする。

 研修番号は,研修開催ファイルに登録されているものとする。

(2) 研修の詳細を登録した研修開催ファイルのレコード様式は,次のとおりである。

研修番号
4 けた

開催日
8 けた

教室番号
10 けた

 研修番号をキーとする索引ファイルである。

 開催される研修は,すべて登録されている。

(3) このプログラムで開催日の重複確認のために利用しているテーブル CHK-TBL の例は,次のとおりである。

例 次の研修申込ファイルのデータ及び研修開催ファイルのデータが与えられたとする。

研修申込ファイルのデータ

研修開催ファイルのデータ

A001
B002
C003

20010411
20010412
20010411

TORAN-F801
TORAN-F801
TORAN-F802

このときテーブル CHK-TBL の内容は次のようになる。

このことからテーブル CHK-SEM-NO の 部分の A001 と C003 の開催日が重複していることが分かる。

(4) エラーリストの印字様式は,次のとおりである。

申込番号 申込者番号 開催日   研修番号
XXXXX   XXXXX   XXXXXXXX XXXX XXXX XXXX XXXX
           XXXXXXXX XXXX XXXX XXXX XXXX
XXXXX  XXXXX  XXXXXXXX XXXX XXXX XXXX XXXX
:    :     :   :  : :  :
XXXXX  XXXXX  XXXXXXXX XXXX XXXX XXXX XXXX
XXXXX  XXXXX  XXXXXXXX XXXX XXXX XXXX XXXX

 見出しは,あらかじめ印刷されている。

 一つの申込番号で,同一の開催日の研修が複数あるときは,その研修番号すべてを 1 行に印字する。

 一つの申込番号で に該当するものが複数組ある場合は, 開催日ごとに行を分けて印字する。 このとき,最初の行には,申込番号及び申込者番号を印字するが, 次の行からは印字しない。

〔プログラム〕

DATA DIVISION. FILE SECTION. FD APPLY-FILE. 01 APPLY-REC. 02 APP-NO PIC X(05). 02 APP-PSN-NO PIC X(05). 02 APP-SEM-NO OCCURS 10 PIC X(04). FD SEMINAR-FILE. 01 SEMINAR-REC. 02 SEM-NO PIC X(04). 02 SEM-YMD PIC X(08). 02 SEM-ROOM PIC X(10). FD CHECK-FILE. 01 CHECK-REC PIC X(85). WORKING-STORAGE SECTION. 01 INFILE-EOF PIC 9(01) VALUE 0. 01 PRINT-WRK. 02 PRI-NO PIC X(05). 02 PIC X(05). 02 PRI-PSN-NO PIC X(05). 02 PIC X(07). 02 PRI-YMD PIC X(08). 02 PIC X(01). 02 OCCURS 10. 03 PIC X(01). 03 PRI-SEM-NO PIC X(04). 01 CHK-TBL. 02 OCCURS 10. 03 CHK-NUM PIC 9(02). 03 CHK-YMD PIC X(08). 03 CHK-SEM-NO OCCURS 10 PIC X(04). 01 CHK-CNT PIC 9(02). 01 CHK-WK PIC 9(02). 01 CNT1 PIC 9(02). 01 CNT2 PIC 9(02). 01 CNT3 PIC 9(02). PROCEDURE DIVISION. MAIN-RTN. OPEN INPUT APPLY-FILE SEMINAR-FILE OUTPUT CHECK-FILE. PERFORM UNTIL INFILE-EOF = 1 READ APPLY-FILE AT END MOVE 1 TO INFILE-EOF NOT AT END PERFORM CHECK-RTN PERFORM PRINT-RTN END-READ END-PERFORM. CLOSE APPLY-FILE SEMINAR-FILE CHECK-FILE. STOP RUN. CHECK-RTN. INITIALIZE CHK-TBL CHK-CNT. PERFORM VARYING CNT1 FROM 1 BY 1 UNTIL CNT1 > 10 OR APP-SEM-NO (CNT1) = SPACE READ SEMINAR-FILE INVALID KEY DISPLAY "ケンシュウ バンゴウ エラー" NOT INVALID KEY PERFORM TABLE-SET-RTN END-READ END-PERFORM. TABLE-SET-RTN. MOVE 0 TO CNT3. PERFORM VARYING CNT2 FROM 1 BY 1 UNTIL IF SEM-YMD = CHK-YMD (CNT2) THEN END-IF END-PERFORM. IF CNT3 = 0 THEN COMPUTE CHK-CNT = CHK-CNT + 1 MOVE SEM-YMD TO CHK-YMD (CHK-CNT) MOVE CHK-CNT TO CNT3 END-IF. COMPUTE CHK-NUM (CNT3) = CHK-NUM (CNT3) + 1. MOVE CHK-NUM (CNT3) TO CHK-WK. MOVE APP-SEM-NO (CNT1) TO CHK-SEM-NO (CNT3 CHK-WK). PRINT-RTN. MOVE 0 TO CNT3. PERFORM VARYING CNT1 FROM 1 BY 1 UNTIL MOVE SPACE TO PRINT-WRK IF THEN IF CNT3 = 0 THEN MOVE APP-NO TO PRI-NO MOVE APP-PSN-NO TO PRI-PSN-NO MOVE 1 TO CNT3 END-IF MOVE CHK-YMD (CNT1) TO PRI-YMD PERFORM VARYING CNT2 FROM 1 BY 1 UNTIL CNT2 > CHK-NUM (CNT1) END-PERFORM WRITE CHECK-REC FROM PRINT-WRK AFTER 1 END-IF END-PERFORM.

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

a,c に関する解答群

ア MOVE CNT1 TO CNT2     イ MOVE CNT1 TO SEM-NO

ウ MOVE CNT2 TO CNT1     エ MOVE CNT2 TO CNT3

オ MOVE CNT2 TO SEM-NO    カ MOVE CNT3 TO CNT1

キ MOVE CNT3 TO CNT2     ク MOVE APP-SEM-NO TO CNT1

ケ MOVE SEM-NO TO PRI-SEM-NO (CNT1)

コ MOVE APP-SEM-NO (CNT1) TO SEM-NO

b,d に関する解答群

ア CHK-CNT > CNT1      イ CHK-CNT > CNT2

ウ CHK-CNT > CNT3      エ CHK-NUM (CNT1) > CNT2

オ CHK-NUM (CNT2) > CNT3   カ CNT1 > CHK-CNT

キ CNT2 > CHK-CNT      ク CNT2 > CHK-NUM (CNT1)

ケ CNT3 > CHK-CNT      コ CNT3 > CHK-NUM (CNT2)

e に関する解答群

ア CHK-NUM (CNT1) > 1    イ CHK-NUM (CNT1) > CNT1

ウ CHK-NUM (CNT3) > 1    エ CHK-NUM (CNT3) > CNT3

オ CNT1 > 1         カ CNT3 > 1

f に関する解答群

ア MOVE CHK-SEM-NO (CNT1 CNT2) TO PRI-SEM-NO (CNT1)

イ MOVE CHK-SEM-NO (CNT1 CNT2) TO PRI-SEM-NO (CNT2)

ウ MOVE CHK-SEM-NO (CNT1 CNT3) TO PRI-SEM-NO (CNT3)

エ MOVE CHK-SEM-NO (CNT2 CNT1) TO PRI-SEM-NO (CNT1)

オ MOVE CHK-SEM-NO (CNT2 CNT1) TO PRI-SEM-NO (CNT2)

カ MOVE CHK-SEM-NO (CNT2 CNT3) TO PRI-SEM-NO (CNT2)


東京理科大学 infoserv 戻る 次頁:問11