平成9年度 春期 第二種 午後 問12
[更新日]1997.05.30
問12 次のCOBOLプログラムの説明及びプログラムを読んで,設問に答えよ。 〔プログラムの説明〕 図書の貸出記録ファイルを読み込んで,返却予定年月日から7日以上たっているに もかかわらず返却されていない図書のレコード(未返却レコード)を抽出し,返却督 促ファイルに出力するプログラムである。例えば,このプログラムの実行年月日が 1997年4月20日の場合,返却予定年月日がl997年4月13日以前の未返却レコードを 返却督促ファイルに出力する。 (1)貸出記録ファイルKIROKU-FILEのレコード様式は,次のとおりである。 ┌──────┬────┬──────┬─────┬─────┐ │ 図書コード │ 利用者 │ 貸出年月日 │ 返却予定 │返却年月日│ │ │ コード │ │ 年月日 │ │ │ 12けた │ 4けた │ 6けた │ 6けた │ 6けた │ └──────┴────┴──────┴─────┴─────┘ 1.貸出年月日,返却予定年月日及び返却年月日は,いずれも西暦年下2けた, 月2けた及び日2けたからなる。 2.未返却レコードの返却年月日には,すべて0が格納されている。 (2)返却督促ファイルTOKUSOKU-FILEのレコード様式は,次のとおりである。 ┌──────┬─────┬──────┬──────┐ │ 図書コード │ 利用者 │ 貸出年月日 │ 返却予定 │ │ │ コード │ │ 年月日 │ │ 12けた │ 4けた │ 6けた │ 6けた │ └──────┴─────┴──────┴──────┘ 〔プログラム〕 (行番号) 01 DATA DIVISION. 02 FILE SECTION. 03 FD KIROKU-FILE. 04 01 KIROKU-REC. 05 03 TOSYO-CODE PIC X(12). 06 03 RIYOUSYA-CODE PIC X(4). 07 03 KASIDASI-BI PIC 9(6). 08 03 YOTEI-BI PIC 9(6). 09 03 HENKYAKU-BI PIC 9(6). 10 FD TOKUSOKU-FILE. 11 01 TOKUSOKU-REC PIC X(28). 12 WORKING-STORAGE SECTION. 13 0l EOF-FLAG PIC X(l) VALUE SPACE. 14 0l GETUMATU PIC 9(2). 15 01 X PIC 9(3). 16 01 KYOU PIC 9(6). 17 01 YUUYO-BI. 18 03 YUUYO-NEN PIC 9(2). 19 03 YUUYO-TUKI PIC 9(2). 20 03 YUUYO-HI PIC 9(2). 21 PROCEDURE DIVISION. 22 HAZIME. 23 ACCEPT KYOU FROM DATE. 24 OPEN INPUT KIROKU-FILE OUTPUT TOKUSOKU-FILE. 25 READ KIROKU-FILE AT END MOVE "E" TO EOF-FLAG. 26 PERFORM UNTIL EOF-FLAG = "E" 27 IF HENKYAKU-BI = ZERO THEN 28 PERFORM KEISAN 29 IF YUUYO-BI <= KYOU THEN 30 MOVE KIROKU-REC TO TOKUSOKU-REC 31 WRITE TOKUSOKU-REC 32 END-IF 33 END-IF 34 READ KIROKU-FILE AT END MOVE "E" TO EOF-FLAG 35 END-READ 36 END-PERFORM. 37 CLOSE KIROKU-FILE TOKUSOKU-FILE. 38 STOP RUN. 39 KEISAN. 40 MOVE YOTEI-BI TO YUUYO-BI. 41 IF YUUYO-TUKI = 2 THEN 42 PERFORM URUU-KENSA 43 ELSE 44 IF YUUYO-TUKI = 4 OR YUUYO-TUKI = 6 OR 45 YUUYO-TUKI = 9 OR YUUYO-TUKI = 1l THEN 46 MOVE 30 TO GETUMATU 47 ELSE 48 MOVE 3l TO GETUMATU 49 END-IF 50 END-IF. 51 IF GETUMATU < YUUYO-HI + 7 THEN 52 COMPUTE YUUYO-HI = YUUYO-HI + 7 - GETUMATU 53 IF YUUYO-TUKI < 12 THEN 54 COMPUTE YUUYO-TUKI = YUUYO-TUKI + 1 55 ELSE 56 MOVE 1 TO YUUYO-TUKI 57 COMPUTE YUUYO-NEN = YUUYO-NEN + 1 58 END-IF 59 ELSE 60 COMPUTE YUUYO-HI = YUUYO-HI + 7 61 END-IF. 62 URUU-KENSA. 63 COMPUTE X = YUUYO-NEN / 4. 64 COMPUTE X = YUUYO-NEN - X * 4. 65 IF X = 0 THEN 66 MOVE 29 TO GETUMATU 67 ELSE 68 MOVE 28 TO GETUMATU 69 END-IF. 設問 次の記述中の[ ]に入れる正しい答えを,解答群の中から選べ。 (1) このプログラムは,返却予定年月日が,ある日付以降のレコードを処理した場 合に,けたあふれ(オーバフロー)を起こして正しく処理できないことが分かっ た。正しく処理できない返却予定年月日の最も早い日付は[ a ]であり, オーバフローは[ b ]行目で起こる。 (2) 西暦年を4けたで扱うようプログラムを修正する。修正する内容は,次のとお りである。 1. DATA DIVISIONの該当する項目のけた数を増やす。 2. 23行目のACCEPT文を修正する。ACCEPT FROM DATEでは,西暦年の下2 けたしか取得できないからである。そこで,4けたの西暦年,2けたの月,2け たの日を取得できる副プログラム“ACCEPTDATE”を利用し,結果をKYOUに 格納するよう23行目を,[ c ] に変更する。�� 3. 62行目〜69行目のうるう年の検査が正しくできるようにするため,次のよう に修正する。 ┌───────────────────────────┐ │62 URUU-KENSA. │ │63 COMPUTE X = YUUYO-NEN / 4. │ │64 COMPUTE X = YUUYO-NEN - X * 4. │ │65 IF X NOT = 0 THEN │ │66 MOVE 28 TO GETUMATU │ │67 ELSE │ │68 COMPUTE X = YUUYO-NEN / 100 │ │69 COMPUTE X = YUUYO-NEN - X * 100 │ │70 IF X NOT = 0 THEN │ │71 MOVE 29 TO GETUMATU │ │72 ELSE │ │73 COMPUTE X = YUUYO-NEN / 400 │ │74 COMPUTE X = YUUYO-NEN - X * 400 │ │75 IF X NOT = 0 THEN │ │76 MOVE 28 TO GETUMATU │ │77 ELSE │ │78 MOVE 29 TO GETUMATU │ │79 END-IF │ │80 END-IF │ │81 END-IF. │ └───────────────────────────┘ このように修正した場合,YUUYO-NENの値が[ d ]と[ e ]の ときにGETUMATUの値は29になる。 aに関する解答群
a 答
オ
ア 1999年2月1日 イ 1999年2月28日 ウ l999年12月1日 エ 1999年12月24日 オ 1999年12月25日 カ 1999年12月31日 キ 2000年1月1日 ク 2000年1月7日 ケ 2000年1月8日 bに関する解答群
b 答
キ
ア 23 イ 25 ウ 30 エ 34 オ 52 カ 54 キ 57 ク 60 ケ 63 コ 64 cに関する解答群
c 答
オ
ア ACCEPT "ACCEPTDATE" FROM KYOU. イ ACCEPT KYOU FROM "ACCEPTDATE". ウ CALL "ACCEPTDATE" GIVING KYOU. エ CALL "ACCEPTDATE" INTO KYOU. オ CALL "ACCEPTDATE" USING KYOU. カ PERFORM "ACCEPTDATE" GIVING KYOU. キ PERFORM "ACCEPTDATE" INTO KYOU. ク PERFORM "ACCEPTDATE" USING KYOU. d,eに関する解答群
d,e 答
ア,カ(順不同)
ア 2000 イ 2001 ウ 20l0 エ 2100 オ 2110 カ 2120 キ 2200 ク 240l ケ 2410 コ 2500
戻る
前頁:問11
次頁:問13