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


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

〔プログラムの説明〕

ある学校の第 2 外国語選択科目別人数を棒グラフで出力する。

(1) 選択科目別人数は,呼ばれるプログラム KEISAN に よって得ることができ,
次の順に SENTAKU-T に格納される。

フランス語(F),ドイツ語(G),中国語(C),ロシア語(R),スペイン語(S)

(2) 棒グラフの印字様式は,次のとおりである。

 縦軸に科目,横軸に選択人数をとる。

 選択人数の範囲は 0〜30 人であり, 一人につき,“*”一つで表す。

 フランス語 30 人,ドイツ語 15 人, 中国語 20 人,ロシア語 0 人,スペイン語 5 人の場合の出力例を図に示す。

   F  :******************************    
   G  :***************
   C  :********************
   R  :
   S  :*****
   ---+----+----+----+----+----+----+-   
      0         10        20        30

図 選択科目別人数の出力例

〔プログラム〕

(行番号)
01 DATA DIVISION.
02 FILE SECTION.
03 FD  PRINT-F.
04 01  PRINT-R.
05     03                  PIC X(2).
06     03  KOMOKU          PIC X(3).
07     03  JIKU            PIC X.
08     03  BO.       
09       05  KAZU          OCCURS 30  PIC X.
10     03                  PIC X.
11 WORKING-STORAGE SECTION.
12 01  YOKOJIKU.
13     03                  PIC X(6)  VALUE "  ---+".
14     03                  PIC X(31) VALUE ALL "----+".
15 01  MEMORI              PIC X(37)  
16     VALUE "     0         10        20        30".
17 01  SENTAKU-T.
18     03  NINZU           OCCURS 5 PIC 9(2).
19 01  KAMOKU-T            VALUE "F  G  C  R  S  ".
20     03  NAMAE           OCCURS 5 PIC X(3). 
21 01  S                   PIC 9.
22 01  T                   PIC 99.
23 PROCEDURE DIVISION.
24 HAJIME.
25     OPEN OUTPUT PRINT-F.
26     CALL "KEISAN" USING SENTAKU-T.
27     PERFORM VARYING S FROM 1 BY 1 UNTIL S > 5
28        MOVE SPACE TO PRINT-R
29        MOVE NAMAE(S) TO KOMOKU
30        MOVE  ":" TO JIKU
31        PERFORM VARYING T FROM 1 BY 1 UNTIL T > NINZU(S)
32           MOVE "*" TO KAZU(T)
33        END-PERFORM
34        WRITE PRINT-R
35     END-PERFORM.
36     WRITE PRINT-R FROM YOKOJIKU.
37     WRITE PRINT-R FROM MEMORI.   
38     CLOSE  PRINT-F.
39     STOP RUN.
 

棒グラフを横向きから縦向きへ変更するためにプログラムを修正する。データ部は 次のように変更し,手続き部の 27 行目から 35 行目の変更を,表の a,b,c の 3 通り考えた。

FILE SECTION.
FD  PRINT-F.
01  PRINT-R.
    03              PIC X(2).
    03  KOMOKU      PIC ZZ9.
    03  JIKU        PIC X.
    03  BO          OCCURS 5.       
       05           PIC X(2).   
       05  KAZU     PIC X(3).
    03              PIC X(2).
WORKING-STORAGE  SECTION.
01  YOKOJIKU.
    03              PIC X(6)  VALUE "  ---+".  
    03              PIC X(27) VALUE ALL "-".
01  MEMORI          PIC X(33)
    VALUE    "         F    G    C    R    S   ".
01  SENTAKU-T.
    03  NINZU       OCCURS 5 PIC 9(2).
01  S               PIC 99.
01  T               PIC 99.
01  K               PIC 99.

表 手続き部修正内容( 27 行目から 35 行目を置換)
 

a

PERFORM VARYING S FROM 1 BY 1 UNTIL S > 30
   MOVE SPACE TO PRINT-R
   ┌────────────────┐
   │  IF S = 10 OR 20 OR 30 THEN    │
   │     MOVE S TO KOMOKU  END-IF   │
   └────────────────┘
   MOVE ":" TO JIKU
PERFORM VARYING T FROM 1 BY 1 UNTIL T > 5
IF S <= NINZU(T) THEN MOVE "***" TO KAZU(T) END-IF END-PERFORM WRITE PRINT-R END-PERFORM.

b

PERFORM VARYING S FROM 1 BY 1 UNTIL S > 30
   MOVE SPACE TO PRINT-R
   COMPUTE K = 30 - S
   IF K = 10 OR 20 OR 30 THEN
      MOVE K TO KOMOKU  END-IF
   MOVE ":" TO JIKU
   PERFORM VARYING T FROM 1 BY 1 UNTIL T > 5
      IF K <= NINZU(T) THEN MOVE "***" TO KAZU(T)  END-IF
   END-PERFORM
   WRITE PRINT-R
END-PERFORM.

c

PERFORM VARYING S FROM 30 BY -1 UNTIL S < 1
   MOVE SPACE TO PRINT-R
   IF S = 10 OR 20 OR 30 THEN
      MOVE S TO KOMOKU  END-IF
   MOVE ":" TO JIKU
   PERFORM VARYING T FROM 1 BY 1 UNTIL T > 5
      IF S <= NINZU(T) THEN MOVE "***" TO KAZU(T)  END-IF
   END-PERFORM
   WRITE PRINT-R
END-PERFORM.

設問1 表中の で 囲まれた IF 文を“10 の倍数のとき” となるように変更する場合,正しい答えを解答群の中から選べ。

解答群

ア COMPUTE K = S / 10
  IF K = 0 THEN MOVE S TO KOMOKU END-IF

イ COMPUTE K = S / 10
  IF S = K * 10 THEN MOVE S TO KOMOKU END-IF

ウ COMPUTE K = S / 10
  COMPUTE K = S / K
  IF K = 10 THEN MOVE S TO KOMOKU END-IF

エ COMPUTE K = S / 10
  COMPUTE K = K * 10
  MOVE K TO KOMOKU

設問2 a,b,c それぞれで修正した結果,印字されるグラフはどうなるか, 解答群の中から選べ。ここで,選択人数はプログラムの説明 (2) の出力例と同じとする。

解答群


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