問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) の出力例と同じとする。