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


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

〔プログラムの説明〕

ある国の累積輸出記録ファイルを読み込んで,輸出年月から 3 年以上経過したレコードを 削除して,新累積輸出記録ファイルを作成するプログラムである。

(1) 累積輸出記録ファイル,新累積輸出記録ファイルのレコード様式は,次のとおりで ある。

輸出年月

4 けた

製品コード

5 けた

数量

6 けた

輸出年月は,西暦の下 2 けたの年と 2 けたの月からなる。

例:1999 年 4 月ならば“9904”となる。

(2) このプログラムを実行した時点で,輸出年月から 3 年以上経過したレコードを 削除する。

例:プログラム実行年月が 99 年 4 月のとき,輸出年月が 96 年 4 月以前のレコードを 削除する。

〔プログラム〕

(行番号)
01     DATA              DIVISION.
02     FILE              SECTION.
03     FD  YUSYUTU-FILE.
04     01  YUSYUTU-REC.
05         03  Y-HIZUKE.
06             05  Y-NEN       PIC 9(2).
07             05  Y-TUKI      PIC 9(2).
08         03  Y-SEIHIN        PIC X(5).
09         03  Y-SURYO         PIC 9(6).
10     FD  N-YUSYUTU-FILE.
11     01  N-YUSYUTU-REC       PIC X(15).
12     WORKING-STORAGE   SECTION.
13     01  EOF-FLAG            PIC X(1)   VALUE SPACE.
14     01  SYORI-BI.
15         03  MUKO-HIZUKE.
16             05  M-NEN       PIC 9(2).
17             05  M-TUKI      PIC 9(2).
18         03                  PIC 9(2).
 
19     PROCEDURE         DIVISION. 
20     KAISI.      
21         ACCEPT SYORI-BI FROM DATE.
22         COMPUTE M-NEN = M-NEN - 3.
23     MAIN-SYORI.
24         OPEN INPUT YUSYUTU-FILE.
25         OPEN OUTPUT N-YUSYUTU-FILE.
26         READ YUSYUTU-FILE AT END
27            MOVE "E" TO EOF-FLAG
28         END-READ. 
29         PERFORM UNTIL EOF-FLAG = "E"
30            IF Y-HIZUKE > MUKO-HIZUKE
31               WRITE N-YUSYUTU-REC FROM YUSYUTU-REC
32            END-IF
33            READ YUSYUTU-FILE AT END
34               MOVE "E" TO EOF-FLAG
35            END-READ 
36         END-PERFORM. 
37         CLOSE YUSYUTU-FILE N-YUSYUTU-FILE.
38         STOP RUN.
 

設問1 次の記述中の に入れる正しい答えを,解答群の中から選べ。

このプログラムは,年が西暦の下 2 けたで表現されているので,西暦 2000 年以降では正しく動作しない。つまり,年を西暦の下 2 けたで表現する と 1999 年は“99”,2000 年は“00”となり,日付の大小の逆転や期間計算 の誤処理などが発生する。この“2000年問題”の対処方法として,“4 けた拡 張法”と“ウィンドウ法”がある。

“4 けた拡張法”とは,プログラムとファイルの中の年をすべて 4 けたに 変更する方法である。正攻法と言えるが,既存のファイルをすべて作り直す必 要があるので,関連するすべてのプログラムと同期をとって一括移行しなけれ ばならない。

“ウィンドウ法”とは,ファイル中の年は 2 けたのままにしておき,プロ グラム中の比較処理などを 4 けたの年に変換して行う方法である。変換は, 境界年と呼ばれる値を設定して,境界年未満の値には 2000 を,境界年以上の 値には 1900 を加えて 4 けたの年とする。例えば,境界年を 60 とすれば, 00〜59 は 2000〜2059 に,60〜99 は 1960〜1999 に変換する。この方法では, 処理する範囲が 100 年を超えるデータは処理できない。しかし,既存のファ イルを変更しないので,プログラム単位に順次移行が可能である。

(1) このプログラムを“4 けた拡張法”で修正するには,次の変更が必要である。

 累積輸出記録ファイルの輸出年月の年を 2 けたから 4 けたに変更する。6 行目と 11 行目をそれぞれ次のとおりに変える。

    06             05  Y-NEN       PIC 9(4).
    11     01  N-YUSYUTU-REC       PIC X().

 16 行目の年を格納する作業領域の長さを, 4 けたに変える。

    16             05  M-NEN       PIC 9(4).

 21 行目の ACCEPT 文では 2 けたの年しか 取得できない。この行を 4 けたの年,2 けたの月,2 けたの日を取得できる関数] CURRENT-DATE”を使用するように変更する。

    21         MOVE FUNCTION CURRENT-DATE TO SYORI-BI.

(2) このプログラムを“ウィンドウ法”で修正するには,次の変更が必要である。

 境界年を 60 として格納した領域を 18 行目と 19 行目の間に追加する。

    01  KYOKAI        PIC 9(2)   VALUE 60.

 2 けたの年を含む Y-HIZUKE と MUKO-HIZUKE を 4 けたの年に変換した
Y-HIZUKE-Y2K と MUKO-HIZUKE-Y2K を に続けて 追加する。

   01  Y-HIZUKE-Y2K.
       03  Y-NEN-Y2K   PIC 9(4). 
       03  Y-TUKI-Y2K  PIC 9(2). 
   01  MUKO-HIZUKE-Y2K. 
       03  M-NEN-Y2K   PIC 9(4). 
       03  M-TUKI-Y2K  PIC 9(2).

 年の変換処理で使用する変換前後の年を 入れる領域を に続けて追加する。

   01  W-NEN2-Y2K      PIC 9(2).
   01  W-NEN4-Y2K      PIC 9(4).

 22 行目の処理を 4 けたの年で行うように 変更する。

   MOVE M-NEN TO W-NEN2-Y2K.
   PERFORM CONVERT-DATE-RTN.
   MOVE W-NEN4-Y2K TO M-NEN-Y2K.
   MOVE M-TUKI TO M-TUKI-Y2K.
   COMPUTE M-NEN-Y2K = M-NEN-Y2K - 3.
 

 次の処理を 行目の直後に追加する。

   MOVE Y-NEN TO W-NEN2-Y2K
   PERFORM CONVERT-DATE-RTN
   MOVE W-NEN4-Y2K TO Y-NEN-Y2K
   MOVE Y-TUKI TO Y-TUKI-Y2K

 30 行目の処理を 4 けたの年で行うように 変更する。

   IF 

 38 行目の後に年の変換処理を追加する。

  CONVERT-DATE-RTN.
       IF 
          COMPUTE W-NEN4-Y2K = 2000 + W-NEN2-Y2K
       ELSE
          COMPUTE W-NEN4-Y2K = 1900 + W-NEN2-Y2K
       END-IF.

a に関する解答群

ア 4    イ 5    ウ 8

エ 10    オ 15    カ 17 

b に関する解答群

ア 20    イ 23    ウ 25

エ 28    オ 29    カ 35

c,d に関する解答群

ア KYOKAI < W-NEN2-Y2K

イ KYOKAI < W-NEN4-Y2K

ウ MUKO-HIZUKE > Y-HIZUKE

エ MUKO-HIZUKE-Y2K > Y-HIZUKE-Y2K

オ M-NEN-Y2K > Y-NEN-Y2K

カ Y-HIZUKE > MUKO-HIZUKE

キ Y-HIZUKE-Y2K > MUKO-HIZUKE-Y2K

ク Y-NEN-Y2K > M-NEN-Y2K

ケ W-NEN2-Y2K < KYOKAI

コ W-NEN4-Y2K < KYOKAI

設問2 次の記述中の に入れる正しい答えを,解答群の中から選べ。

このプログラムを設問 1 で説明した“ウィンドウ法”で修正した。次に示 す 20 レコードからなる累積輸出記録ファイルを指定して,プログラムを西暦 2000 年 4 月 18日に実行したとすると,年の変換処理(CONVERT-DATE-RTN) は 回呼び出さ れ,演算命令(COMPUTE W-NEN4-Y2K = 2000 + W-NEN2-Y2K)は 回実行される。

 

累積輸出記録ファイル

   9703A1234001345   9703B1234002567   9706A1234001823
   9706B1234002600   9712A1234002543   9712B1234002578
   9803A1234002832   9803B1234002345   9806A1234003223
   9806B1234002243   9812A1234003667   9812B1234001823
   9903A1234003800   9903B1234002321   9912A1234004278
   9912B1234002532   0002A1234004345   0002B1234002223
   0003A1234004832   0003B1234002340
 

解答群

ア 4     イ 5    ウ 6     エ 7    オ 16

カ 17     キ 18    ク 19    ケ 20    コ 21


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