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

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

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

〔プログラムの説明〕

 小売業のC社では,自社株主へ株主優待として,自社店舗で利用できる商品券を 発行することにした。株主の保有株数と保有期間によって,発行額を決定する。 この会社では,毎年3月 31 日の株取引終了時点で自社株を保有している株主を 対象とした株主一覧を作成しており,商品券は,2011 年3月 31 日に作成した株主一覧に 登録されている個人株主に対して発行する。

 このプログラムは,株主ファイルを読み込み,発行する商品券の発行額を商品券ファイルに出力する。

(1) 株主ファイルは,2011 年3月 31 日に作成した株主一覧に登録されている個人株主を 対象に作成した,図1に示すレコード様式の順ファイルである。

 株主番号  
  8 けた
 保有株数  
  16 けた
 登録年  
  14けた

  図1 株主ファイルのレコード様式

@ 株主番号には,株主に対して一意に割り当てた番号が設定されている。

A 保有株数には,保有する株数が設定されている。保有株数の最大は 999,999 とする。

B 登録年には,最初に株主一覧に登録された年が設定されている。ただし,株をすべて 売却した後に再取得した株主の場合は,再取得後,株主一覧に登録された年が設定される。

(2) 保有期間は,登録年から 2011 年までの年数で決定する。例えば,登録年が 2006 年の場合は5年である。

(3) この会社が株式公開したのは 1990 年4月1日であり,最初に株主一覧へ登録されるのは 1991 年3月 31 日である。したがって,最長保有期間は 20 年である。

(4) 商品券ファイルは,図2に示すレコード様式の順ファイルである。

 株主番号  
  8 けた
 発行額  
  6 けた

 図2 商品券ファイルのレコード様式

 発行額には,各株主に対する商品券の発行額を設定する。発行額は,表1に示す決定表によって決まる。

     表1 決定表

〔プログラム〕
(行番号) 
  1  DATA DIVISION.
  2  FILE SECTION.
  3  FD  HOLDER.
  4  01  HLD-REC.
  5      02  HLD-NO        PIC 9(8).
  6      02  HLD-STOCK     PIC 9(6).
  7      02  HLD-YEAR      PIC 9(4).
  8  FD  GIFT.
  9  01  GFT-REC.
 10      02  GFT-NO        PIC 9(8).
 11      02  GFT-SUM       PIC 9(6).
 12  WORKING-STORAGE SECTION.
 13  77  READ-FLAG         PIC X(1) VALUE SPACE.
 14      88  EOF           VALUE "E".
 15  77 BASE-YEAR          PIC 9(4) VALUE 2011.
 16  77 TERM               PIC 9(4).
 17  PROCEDURE DIVISION.
 18  MAIN-PROC SECTION.
 19        0PEN INPUT HOLDER.
 20        0PEN OUTPUT CIFT.
 21        PERFORM UNTIL EOF
 22           READ HOLDER AT END     SET EOF TO TRUE
 23                       NOT AT END PERFORM   SUM-PROC
 24           END-READ
 25        END-PERFORM.
 26        CLOSE HOLDER GIFT.
 27        STOP RUN.
 28  SUM-PROC SECTION.
 29      MOVE HLD-NO TO GFT-NO.
 30      COMPUTE TERM = BASE-YEAR - HLD-YEAR.
 31      EVALUATE HLD-STOCK ALSO TERM
 32         WHEN  THRU  ALSO  THRU 
 33            MOVE 1000 TO GFT-SUM
 34         WHEN  THRU  ALSO 
 35         WHEN  THRU  ALS0  THRU 
 36            MOVE 3000 TO GFT-SUM
 37         WHEN  THRU  ALSO 
 38         WHEN             ALSO  THRU 
 39            MOVE 5000 TO GFT-SUM
 40         WHEN             ALSO 
 41            MOVE 10000 TO GFT-SUM
 42      END-EVALUATE.
 43      WRITE GFT-REC.

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

a,b に関する解答群

ア 1     イ 9     ウ 10     エ 99

オ 999     カ 1000     キ ANY     ク OTHER

c 〜 e に関する解答群

ア 0     イ 1     ウ 4     エ 5

オ 9     カ 10     キ ANY     ク OTHER

i,g に関する解答群

ア 1000     イ 3000     ウ 5000     エ 9999

オ 10000     カ 20000     キ ANY     ク OTHER

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

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

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

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

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

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

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

基本情報技術者試験


設問2 保有期間の傾向を確認するため,商品券の発行額の算出と同時に,図3に示す 棒グラフを表示するようプログラムを変更したい。表2中の に 入れる正しい答えを,解答群の中から選べ。

〔グラフの説明〕

(1) 行の先頭に表示してある数字は,保有期間を表す。

(2) “*”は,当該保有期間に該当する株主比率を表す。

(3) 株主比率は,2%未満の端数を切り捨て,“*”一つを2%として表示する。

(4) 目盛りの数字の単位は 10 %である。


    図3 保有期間別の株主比率の表示例

        表2 プログラムの変更
  処置            変更内容
行番号 16 と 17 の間
に追加
 77  CNT           PIC 9(2).
 77  CNT-ALL       PIC 9(8) VALUE 0.
 01  .
     02 CNT-HLD    OCCURS 21 PIC 9(8) VALUE 0.
 01  RATIO         PIC 9(2) VALUE 0.
 01  PRT-DATA.
     02 PRT-TERM   PIC 9(2).
     02 PRT-DLIM   PIC X(2).
     02 PRT-EDIT   PIC X(51).
 01  PRT-HEAD      PIC X(51) VALUE
     "----1----2----3----4----5----6----7----8----9----10".
行番号 26 と 27 の間
に追加
     IF CNT-ALL NOT = 0 THEN
        PERFORM GRAPH-PROC
     END-IF.
行番号 43 の後ろ
に追加
      .
      ADD 1 TO CNT-ALL.
 GRAPH-PROC SECTION.
      MOVE SPACE TO PRT-DATA.
      MOVE PRT-HEAD TO PRT-EDIT.
      DISPLAY PRT-DATA.
      MOVE  ":" TO PRT-DLIM.
      PERFORM VARYING CNT FROM 0 BY 1 UNTIL CNT > 20
         MOVE SPACE TO PRT-EDIT
         MOVE CNT TO PRT-TERM
         
         IF RATIO > 0 THEN
            MOVE ALL "*" TO PRT-EDIT(1:RATIO)
         END-IF
         DISPLAY PRT-DATA
      END-PERFORM.

h に関する解答群

ア ADD 1 TO CNT-HLD(CNT)

イ ADD 1 TO CNT-HLD(CNT + 1)

ウ ADD 1 TO CNT-HLD(CNT - 1)

エ ADD 1 TO CNT-HLD(TERM)

オ ADD 1 TO CNT-HLD(TERM + 1)

カ ADD 1 TO CNT-HLD(TERM - 1)

i に関する解答群

ア COMPUTE RATIO = (CNT-ALL * 100 / CNT-HLD(CNT)) / 2

イ COMPUTE RATIO = (CNT-ALL * 100 / CNT-HLD(CNT + 1)) / 2

ウ COMPUTE RATIO = (CNT-ALL * 100 / CNT-HLD(CNT - 1)) / 2

エ COMPUTE RATIO = (CNT-HLD(CNT) * 100 / CNT-ALL)/ 2

オ COMPUTE RATIO = (CNT-HLD(CNT + 1) * 100 / CNT-ALL) / 2

カ COMPUTE RATIO = (CNT-HLD(CNT - 1) * 100 / CNT-ALL) / 2

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

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


[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp |  プライバシーポリシー・著作権・リンクお問合わせ