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

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

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

〔プログラムの説明〕

ローン条件情報を受け取り,“返済回数指定の月払元金均等方式”で, ローン返済計画書を出力するサブプログラムである。

返済回数指定の月払元金均等方式とは,元金部分は返済回数による均等額, 利息部分は元金残高に利率を乗じて算出し,それらの合計を毎月の返済額とする返済方式である。

(1) ローン条件情報(COND-R)のレコード様式は,次のとおりである。

 ローン借入日
  8 けた
 年利
  5 けた
 毎月返済日
  2 けた
 初回返済日
  8 けた
 ローン元金
  11 けた
 返済回数
  3 けた

@ ローン借入日及び初回返済日は,4けたの西暦年,2けたの月, 2けたの日で構成される8けたの日付とする(例:2005 年 7 月 1 日の場合は,20050701)。

A 毎月返済日は,1 〜 31 の値とする。 返済日に対応する日が存在しない月は,月末の日を返済日とする。

B 年利は,%を単位とし,整数部2けた小数部3けたで構成される5けたの数値とする (例:年利 5.0 %の場合は 05000 )。 返済回数は 1 〜 420 とする。

C ローン条件情報で与えられたデータには,誤りがないものとする。

(2) ローン返済計画書の出力例を次に示す。


借入日=2005/06/01  毎月返済日=31 年利= 5.000% ローン元金=      5,000,000円
回数 返済日 日数 元金部分 利息部分 返済額 残高
   1   2005/06/30    30     555,556      20,547      576,103   4,444,444
   2   2005/07/31    31     555,556      18,873      574,429   3,888,888
   3   2005/08/31    31     555,556      16,514      572,070   3,333,332
   4   2005/09/30    30     555,556      13,698      569,254   2,777,776
   5   2005/10/31    31     555,556      11,796      567,352   2,222,220
   6   2005/11/30    30     555,556       9,132      564,688   1,666,664
   7   2005/12/31    31     555,556       7,077      562,633   1,111,108
   8   2006/01/31    31     555,556       4,718      560,274     555,552
   9   2006/02/28    28     555,552       2,130      557,682           0
                    273   5,000,000     104,485    5,104,485

ローン返済計画書の見出し部分(出力例の1,2行目)は,あらかじめ印字されているものとする。

(3) 毎月返済額の元金部分及び利息部分の計算は,次のように行う。

@ 毎月の元金返済に充てる金額は,“ローン元金÷返済回数”で求める。 この元金返済部分を,毎月の返済ごとにローン元金から減算し,ローン元金残高を更新する。

A “ローン元金÷返済回数”が割り切れない場合, 毎月の元金返済額は小数点以下を切上げとし,最終回の元金返済額は次の端数の金額となる。

   端数=ローン元金−毎月元金返済額×(返済回数−1 )

B 毎月の利息は,“ローン元金残高×(年利÷100)×日数÷365”で求め, 割り切れない場合は切り捨てる。 ここで日数は,最初の返済の場合はローン借入日から初回返済日までの日数, 2回目以降は前回返済日の翌日から当月返済日までの日数とする。

(4) 関数 INTEGER-OF-DATE は,8けたの日付をグレゴリオ暦で 1601 年 1 月 1 日を 1 とする通算日に変換した整数値を返す。

(5) 日付が正しいかどうかを調べるために,副プログラム DATECHK を使用する。
DATECHK は,与えられた日付がカレンダーにある正しい日付かどうかを調べ, 正しければ 0,正しくなければ 1 を結果に返す。 DATECHK の呼出し方法は,次のとおりである。

CALL "DATECHK" USING 日付 結果

〔プログラム〕

(行番号)
  1    DATA DIVISION.
  2    FILE SECTION.
  3    FD  PRINT-F                 EXTERNAL.
  4    01  PRINT-R                 PIC  X(128).
  5    WORKING-STORAGE SECTION.
  6    01  W-KAISU                 PIC  9(04).
  7    01  W-AMARI                 PIC  9(05).
  8    01  W-GANKIN-KINTOU         PIC  9(15).
  9    01  W-GANKIN-HASUU          PIC  9(15).
 10    01  W-REC.
 11        05  W-NISSU             PIC  9(04).
 12        05  W-GANKIN            PIC  9(15).
 13        05  W-RISOKU            PIC  9(15).
 14        05  W-HENSAI-GAKU       PIC  9(15).
 15        05  W-ZANDAKA           PIC  9(15).
 16    01  MEI-R.
 17        05  M-KAISU             PIC  ZZZ9.
 18        05  FILLER              PIC  X(03).
 19        05  M-HENSAI-YMD        PIC  9999/99/99.
 20        05  FILLER              PIC  X.
 21        05  M-NISSU             PIC  ZZZZ9.
 22        05  FILLER              PIC  X.
 23        05  M-GANKIN            PIC  ZZZ,ZZZ,ZZ9.
 24        05  FILLER              PIC  X.
 25        05  M-RISOKU            PIC  ZZZ,ZZZ,ZZ9.
 26        05  FILLER              PIC  X.
 27        05  M-HENSAI-GAKU       PIC  ZZZ,ZZZ,ZZ9.
 28        05  FILLER              PIC  X.
 29        05  M-ZANDAKA           PIC  ZZZ,ZZZ,ZZ9.
 30    01  GOUKEI.
 31        05  G-NISSU             PIC  9(05).
 32        05  G-GANKIN            PIC  9(15).
 33        05  G-RISOKU            PIC  9(15).
 34        05  G-HENSAI-GAKU       PIC  9(15).
 35    01  W-HENSAI-YMD            PIC  9(08).
 36    01  W-HENSAI-YMD-R  REDEFINES W-HENSAI-YMD.
 37        05  W-HENSAI-YY         PIC  9(04).
 38        05  W-HENSAI-MM         PIC  9(02).
 39        05  W-HENSAI-DD         PIC  9(02).
 40    01  JDATE1                  PIC  9(15).
 41    01  JDATE2                  PIC  9(15).
 42    01  W-RETCD                 PIC  9.
 43    LINKAGE SECTION.
 44    01  COND-R.
 45        03  CD-KARIIRE-YMD      PIC  9(08). 
 46        03  CD-NENRI            PIC  9(02)V9(03).
 47        03  CD-MAITSUKI-DD      PIC  9(02).  
 48        03  CD-SHOKAI-YMD       PIC  9(08).  
 49        03  CD-GANKIN           PIC  9(11).  
 50        03  CD-KAISU            PIC  9(03).
 51    PROCEDURE DIVISION USING COND-R.
 52    MAIN-RTN.
 53        PERFORM INIT-RTN.
 54        PERFORM LOAN-RTN .
 55        PERFORM GOUKEI-PRINT.
 56        EXIT PROGRAM.
 57    INIT-RTN.
 58        INITIALIZE GOUKEI.
 59        DIVIDE CD-GANKIN BY CD-KAISU GIVING W-GANKIN-KINTOU
 60               REMAINDER W-AMARI.     
 61        IF W-AMARI > 0 THEN                
 62           ADD 1 TO W-GANKIN-KINTOU     
 63        END-IF.                          
 64        COMPUTE W-GANKIN-HASUU = CD-GANKIN -    
 65                W-GANKIN-KINTOU * (CD-KAISU - 1). 
 66    LOAN-RTN.
 67        IF W-KAISU = 1 THEN
 68   *       最初の返済時
 69           MOVE    CD-GANKIN     TO W-ZANDAKA
 70           MOVE    CD-SHOKAI-YMD TO W-HENSAI-YMD
 71           COMPUTE JDATE1 = 
 72                   FUNCTION INTEGER-OF-DATE(CD-KARIIRE-YMD)
 73           COMPUTE JDATE2 = 
 74                   FUNCTION INTEGER-OF-DATE(CD-SHOKAI-YMD)
 75           COMPUTE W-NISSU = 
 76        ELSE
 77   *       2 回目以降の返済時
 78           COMPUTE JDATE1 = 
 79                   FUNCTION INTEGER-OF-DATE(W-HENSAI-YMD)
 80           PERFORM NEXT-HENSAIBI-RTN
 81           COMPUTE JDATE2 = 
 82                   FUNCTION INTEGER-OF-DATE(W-HENSAI-YMD)
 83           COMPUTE W-NISSU = 
 84        END-IF.
 85        COMPUTE W-RISOKU = .
 86        IF W-KAISU = CD-KAISU
 87           MOVE W-GANKIN-HASUU  TO W-GANKIN    
 88        ELSE                  
 89           MOVE W-GANKIN-KINTOU TO W-GANKIN
 90        END-IF.                                  
 91        COMPUTE W-HENSAI-GAKU = W-RISOKU + W-GANKIN.
 92        SUBTRACT W-GANKIN FROM W-ZANDAKA.
 93        MOVE SPACE          TO MEI-R.
 94        MOVE W-KAISU        TO M-KAISU.
 95        MOVE W-HENSAI-YMD   TO M-HENSAI-YMD.
 96        MOVE W-NISSU        TO M-NISSU.
 97        MOVE W-GANKIN       TO M-GANKIN.
 98        MOVE W-RISOKU       TO M-RISOKU.
 99        MOVE W-HENSAI-GAKU  TO M-HENSAI-GAKU.
100        MOVE W-ZANDAKA      TO M-ZANDAKA.
101        WRITE PRINT-R FROM  MEI-R.
102        ADD  W-NISSU        TO G-NISSU.
103        ADD  W-GANKIN       TO G-GANKIN.
104        ADD  W-RISOKU       TO G-RISOKU.
105        ADD  W-HENSAI-GAKU  TO G-HENSAI-GAKU.
106    NEXT-HENSAIBI-RTN.
107   *    翌月の返済日を求める
108        MOVE CD-MAITSUKI-DD TO W-HENSAI-DD.
109        ADD  1              TO W-HENSAI-MM.
110        IF W-HENSAI-MM > 12 THEN
111           ADD   1          TO W-HENSAI-YY
112           MOVE  1          TO W-HENSAI-MM
113        END-IF.
114   *    月末の存在しない日付の調整
115        MOVE  1 TO    W-RETCD. 
116        PERFORM UNTIL W-RETCD = 0
117           CALL "DATECHK" USING W-HENSAI-YMD W-RETCD
118           IF W-RETCD NOT = 0 THEN
119             
120           END-IF
121         END-PERFORM.
122     GOUKEI-PRINT.
123         MOVE SPACE         TO MEI-R.
124         MOVE G-NISSU       TO M-NISSU.
125         MOVE G-GANKIN      TO M-GANKIN.
126         MOVE G-RISOKU      TO M-RISOKU.
127         MOVE G-HENSAI-GAKU TO M-HENSAI-GAKU.
128         WRITE PRINT-R FROM MEI-R.          

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

a に関する解答群

ア CD-KAISU TIMES

イ VARYING W-KAISU FROM 1 BY 1 UNTIL W-KAISU < CD-KAISU

ウ VARYING W-KAISU FROM 1 BY 1 UNTIL W-KAISU = CD-KAISU

エ VARYING W-KAISU FROM 1 BY 1 UNTIL W-KAISU > CD-KAISU

b,c に関する解答群

ア JDATE2 + JDATE1    イ JDATE2 - CD-SHOKAI-YMD

ウ JDATE2 - JDATE1    エ JDATE2 - JDATE1 + 1

オ JDATE2 - W-HENSAI-YMD

d に関する解答群

ア CD-GANKIN * JDATE2 * CD-NENRI / 100 / 365

イ CD-GANKIN * W-NISSU * CD-NENRI / 100 / 365

ウ W-ZANDAKA * JDATE2 * CD-NENRI / 100 / 365

エ W-ZANDAKA * W-NISSU * CD-NENRI / 100 / 365

e に関する解答群

ア ADD   1 TO  W-HENSAI-DD

イ ADD   1 TO  W-HENSAI-YY

ウ SUBTRACT 1 FROM W-HENSAI-DD

エ SUBTRACT 1 FROM W-HENSAI-MM

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

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

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

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

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


設問2 このプログラムでは,ローン元金が返済回数で割り切れない場合の 端数調整を最終回の返済で行っている。 パラメタ指定によって初回の返済でも調整できるようにプログラムを変更したい。 行番号 50 と 51 の間に次の行を挿入し,ローン条件情報に端数調整方法を追加する。 この値が 1 のときは初回調整,0 のときは最終回調整とする。

   03 CD-HASUU     PIC  9.

あわせて,プログラム中の行番号 86 を変更すべき内容として正しい答えを,解答群の中から選べ。

初回調整の場合のローン返済計画書の出力例を,次に示す。


借入日=2005/06/01  毎月返済日=31 年利= 5.000% ローン元金=      5,000,000円
回数 返済日 日数 元金部分 利息部分 返済額 残高
   1   2005/06/30    30     555,552      20,547      576,099   4,444,448
   2   2005/07/31    31     555,556      18,873      574,429   3,888,892
   3   2005/08/31    31     555,556      16,514      572,070   3,333,336
   4   2005/09/30    30     555,556      13,698      569,254   2,777,780
   5   2005/10/31    31     555,556      11,796      567,352   2,222,224
   6   2005/11/30    30     555,556       9,132      564,688   1,666,668
   7   2005/12/31    31     555,556       7,077      562,633   1,111,112
   8   2006/01/31    31     555,556       4,718      560,274     555,556
   9   2006/02/28    28     555,556       2,130      557,686           0
                    273   5,000,000     104,485    5,104,485

解答群

ア IF CD-HASUU = 0 AND W-KAISU = CD-KAISU THEN

イ IF CD-HASUU = 1 AND W-KAISU = 1 THEN

ウ IF CD-HASUU = 0 AND W-KAISU = CD-KAISU AND
    CD-HASUU = 1 AND W-KAISU = 1 THEN

エ IF CD-HASUU = 0 AND W-KAISU = CD-KAISU OR
    CD-HASUU = 1 AND W-KAISU = 1 THEN

オ IF W-AMARI NOT = 0 OR
    CD-HASUU = 0 AND W-KAISU = CD-KAISU OR
    CD-HASUU = 1 AND W-KAISU = 1 THEN

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

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