平成19年春期基本情報技術者試験午後問7、COBOL言語
- 2017/04/10
- 12:14
問題文、解答、解説の順で掲載しております。
無料から学べる講座
http://ai-light.com/itkeiei/
ニコニコチャンネル
http://ch.nicovideo.jp/ai-light
YouTubeチャンネル
https://www.youtube.com/user/ailightcom
Access・Excel倶楽部
http://ai-light.com/accessclub/
株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)
**************************************************
次の COBOL プログラムの説明及びプログラムを読んで,設問1,2に答えよ。
〔プログラムの説明〕
選挙速報を画面に表示するプログラムである。あるテレビ局では,地方自治体の首長選挙において,地区ごとの開票情報を収集し,候補者ごとの得票数を集計して表示するプログラムを開発した。
(1) 地区ごとの開票情報を記録した開票ファイルのレコード様式は,次のとおりである。
地区コード 6けた | 候補者名 20けた | 得票数 9けた |
(2) 選挙速報の表示様式は,次のとおりである。
候補者名 得票数
XXX … XXX ZZZ,ZZZ,ZZ9
: :
① 選挙速報は,得票数の降順に表示する。
② 見出しは,あらかじめ表示されている。
(3) 候補者数は最大 50人,得票数は最大9けたとし,データに誤りはないものとする。
〔プログラム〕
DATA DIVISION.
FILE SECTION.
FD KAIHYO-F.
01 KAIHYO-R.
05 K-CHIKU-CD PIC X(6).
05 K-KOH OS HA-MEI PIC X(20).
05 K-TOKUHYO-SU PIC 9(9).
WORKING-STORAGE SECTION.
01 SHUKEI-TABLE.
05 S-MAX PIC 9(3).
05 S-TBL OCCURS 0 TO 50 DEPENDING ON S-MAX
INDEXED BY S-IDX.
10 S-KOHOSHA-MEI PIC X(20).
10 S-TOKUHYO-SU PIC 9(9).
01 W-TBL PIC X(29).
01 P-TOKUHYO-SU PIC ZZZ,ZZZ,ZZ9.
01 W-EOF PIC 9.
01 W-I PIC 9(5).
01 W-J PIC 9(5).
01 W-K PIC 9(5).
PROCEDURE DIVISION.
MAIN-CTL.
OPEN INPUT KAIHYO-F.
MOVE 0 TO W-EOF.
MOVE 0 TO S-MAX.
PERFORM UNTIL W-EOF = 1
READ KAIHYO-F
AT END MOVE 1 TO W-EOF
NOT AT END PERFORM SHUKEI-PROC
END-READ
END-PERFORM.
PERFORM SHUKEI-DISP.
CLOSE KAIHYO-F.
STOP RUN.
*
SHUKEI-PROC.
SET S-IDX TO 1.
SEARCH S-TBL VARYING S-IDX
AT END
ADD 1 TO S-MAX
MOVE K-KOHOSHA-MEI TO S-KOHOSHA-MEI(S-MAX)
{ a }
WHEN S-KOHOSHA-MEI(S-IDX) = K-KOHOSHA-MEI
{ b }
END-SEARCH.
*
SHUKEI-DISP.
PERFORM VARYING W-I FROM 1 BY 1 UNTIL W-I > S-MAX
COMPUTE W-K = W-I + 1
PERFORM VARYING W-J FROM W-K BY 1 UNTIL W-J > S-MAX
IF S-TOKUHYO-SU(W-I) < S-TOKUHYO-SU(W-J)
MOVE S-TBL(W-I) TO W-TBL
{ c }
MOVE W-TBL TO S-TBL(W-J)
END-IF
END-PERFORM
MOVE S-TOKUHYO-SU(W-I) TO P-TOKUHYO-SU
DISPLAY S-KOHOSHA-MEI(W-I) " " P-TOKUHYO-SU
END-PERFORM.
設問1 プログラム中の{ }に入れる正しい答えを,解答群の中から選べ。
解答群
ア ADD K-TOKUHYO-SU TO S-TOKUHYO-SU(S-IDX)
イ ADD K-TOKUHYO-SU TO S-TOKUHYO-SU(S-MAX)
ウ MOVE K-TOKUHYO-SU TO S-TOKUHYO-SU(S-MAX)
エ MOVE S-TBL(W-I) TO S-TBL(W-J)
オ MOVE S-TBL(W-J) TO S-TBL(W-I)
設問2 このプログラムの動作を検証するための命令網羅テストにおいて,開票ファイルとして適切なデータの並びを,解答群の中から選べ。
解答群

参考文献
OCCURS DEPENDING ON
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1481956944
http://www16.plala.or.jp/hiyokogumi/dic/occurs.html
**************************************************
無料から学べる講座
http://ai-light.com/itkeiei/
ニコニコチャンネル
http://ch.nicovideo.jp/ai-light
YouTubeチャンネル
https://www.youtube.com/user/ailightcom
Access・Excel倶楽部
http://ai-light.com/accessclub/
株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)
**************************************************
********************************************************************************
解答
設問1
答 aウ 答 bア 答 cオ
設問2
答 オ
********************************************************************************
解説
設問1
05 S-MAX PIC 9(3).
05 S-TBL OCCURS 0 TO 50 DEPENDING ON S-MAX
INDEXED BY S-IDX.
DEPENDING ONはS-TBLの配列数が可変であることを示している。この配列数はS-MAXによって与えられる。ただし、OCCURS 0 TO 50とあるので、可変の範囲はあくまで、0~50までの間に限られている。
OPEN INPUT KAIHYO-F.
ファイルKAIHYO-FをINPUT用(読込み用)として開く。
PERFORM UNTIL W-EOF = 1
READ KAIHYO-F
AT END MOVE 1 TO W-EOF
NOT AT END PERFORM SHUKEI-PROC
END-READ
END-PERFORM.
KAIHYO-FをREADで読込み、ファイルを読み終えた後でW-EOFに1をセットしている。PERFORM UNTIL W-EOF = 1になるまでループするから、KAIHYO-Fを読み終えるまで、ループすることになる。NOT AT ENDよりファイルを読込んだ時にレコードが読込めた場合には、処理がSHUKEI-PROCに移動する。
{ a }
SEARCH S-TBL VARYING S-IDX
でS-TBLをS-IDX分だけ繰り返す。初回は、S-TBLに何も設定されていないので、AT END以下の処理が行われる。
MOVE K-KOHOSHA-MEI TO S-KOHOSHA-MEI(S-MAX)
より、候補者名をS-TBLに登録する。
よって、同様に読み込んだレコードの得票数であるK-TOKUHYO-SUを
S-TOKUHYO-SU(S-MAX)にセットすればよい。よって、解答はウとなる。
{ b }
WHEN S-KOHOSHA-MEI(S-IDX) = K-KOHOSHA-MEI
S-KOHOSHA-MEI(S-IDX)よりS-TBLに存在する候補者名とK-KOHOSHA-MEIよりファイルで読込んだ候補者名が等しい時は、集計している得票数にプラスしてやればよい。よって解答は、イとなる。
イはADDとあり、追加でプラスする処理となる。具体的には
S-TOKUHYO-SU(S-IDX) = S-TOKUHYO-SU(S-IDX) +K-TOKUHYO-SU
という処理である。
{ c }
PERFORM VARYING W-I FROM 1 BY 1 UNTIL W-I > S-MAX
より、W-Iを1からS-MAXまで1ずつカウントアップする。
COMPUTE W-K = W-I + 1
PERFORM VARYING W-J FROM W-K BY 1 UNTIL W-J > S-MAX
より、W-Iが1の時、W-Jは2からS-MAXまで1ずつカウントアップする。W-Iが2の時、
W-Jは3からS-MAXまで1ずつカウントアップする。
IF S-TOKUHYO-SU(W-I) < S-TOKUHYO-SU(W-J)
で、例えば、W-Iが1の時、S-TOKUHYO-SU(1)とS-TOKUHYO-SU(2)の大小比較を行っている。
MOVE S-TOKUHYO-SU(W-I) TO P-TOKUHYO-SU
DISPLAY S-KOH OS HA-MEI(W-I) " " P-TOKUHYO-SU
より、最終的にS-TOKUHYO-SU(W-I)の値を出力しているが、問題文より「選挙速報は,得票数の降順に表示する。」とのことであるから、S-TOKUHYO-SU(W-I)はもっとも大きい数値でないといけない。
降順とは大きい値から小さい値にかけて並び替えることである。
よって、IF S-TOKUHYO-SU(W-I) < S-TOKUHYO-SU(W-J)以下の部分で
S-TOKUHYO-SU(W-J)の値の方が大きければ、S-TOKUHYO-SU(W-I)と並び替えないを行う必要がある。
MOVE S-TBL(W-I) TO W-TBL
で一旦、S-TBL(W-I)の値をワークデータW-TBLに保存しているので、その間に、
S-TBL(W-J)の値をS-TBL(W-I)にセットすればよい。よって、解答はオとなる。
MOVE W-TBL TO S-TBL(W-J)
より、退避していたワークデータW-TBLの値をS-TBL(W-J)に戻してやれば、値の入れ替えが完成する。
ワークデータを使って、値の入れ替えを行うというのは定番中の定番の処理などでしっかり理解しておいていただきたい。
設問2
命令網羅テストとは、文字通りすべての命令文が実行されるようにテストを行うことである。
解答群のウをみるとレコードのすべての候補者の名前が異なっている。
よってこの場合、SHUKEI-PROC内の
WHEN S-KOH OS HA-MEI(S-IDX) = K-KOH OS HA-MEI
ADD K-TOKUHYO-SU TO S-TOKUHYO-SU(S-IDX)
の式は実行されない。よって、すべてを命令網羅していないので解答として不適切である。同様の理由で解答エも不適切である。
イも同様に不適正に思えるかもしれないが、SHUKEI-PROC内の処理に関しては、1レコード目の処理でAT END以下が実行され、2レコード目でWHEN以下が実行されるから、命令網羅されている。
SHUKEI-DISP内の処理に関して、解答アの場合は、その前段階として、S-TBLに以下のようにセットされている。
候補者名 得票数
WWWWWW 6000
XXXXXX 5000
ZZZZZZ 4000
VVVVVV 3000
この場合、すでに後方のレコード程に得票数が小さくなっているので、
IF S-TOKUHYO-SU(W-I) < S-TOKUHYO-SU(W-J)
の条件以下は処理が行われない。よって、アは不適切である。
解答イは候補者が1名しかいないので、
PERFORM VARYING W-J FROM W-K BY 1 UNTIL W-J > S-MAX
以下の処理が行われない。よって、イは不適切である。
解答オはその前段階として、S-TBLに以下のようにセットされている。
候補者名 得票数
WWWWWW 4000
XXXXXX 5000
YYYYYY 9000
この場合は、IF S-TOKUHYO-SU(W-I) < S-TOKUHYO-SU(W-J)
の条件以下は処理も適切に行わるので、解答はオとなる。
参考:平成19年春期基本情報技術者試験午後問7
**************************************************
無料から学べる講座
http://ai-light.com/itkeiei/
ニコニコチャンネル
http://ch.nicovideo.jp/ai-light
YouTubeチャンネル
https://www.youtube.com/user/ailightcom
Access・Excel倶楽部
http://ai-light.com/accessclub/
株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)
**************************************************
- 関連記事
-
- 平成19年春期基本情報技術者試験午後問7、COBOL言語 (2017/04/10)
- 平成17年春期基本情報技術者試験午後問11、COBOL言語 (2016/12/07)
- 平成17年春期基本情報技術者試験午後問7、COBOL言語 (2016/11/16)