平成8年度 春期 第二種 午後 問8

                        [更新日]1996.06.04
問8 次のCOBOLプログラムの説明及びプログラムを読んで,設問に答えよ。 〔プログラムの説明〕 氏名,住所などが登録してある顧客ファイルがある。顧客ファイルから地域別の顧 客数を数え,地域別の顧客数の降順に印字する。 (1) 顧客ファイルのレコード様式は,次のとおりである。 ┌─────┬───────────┬───────┐ │ 氏名 │ 住所 │ その他の情報 │ │ X(20) │ X(50) │ X(30) │ └─────┴───────────┴───────┘ (2) 顧客ファイルの住所には,地域名と地番などを分離する文字として“@”が一つ ある。その例を次に示す。 例:顧客ファイルの住所 ┌────────────────────────────────┐ │トウキョウト ミナトク@トラノモン 1-16-4 アーバントラノモンビル8F│ └────────────────────────────────┘ (3) 顧客ファイルには,1レコード以上のデータがある。 (4) 順位番号を顧客数の多い地域から順に1から付与する。顧客数が同数の場合は, 同じ順位番号を付ける。同じ順位番号中は,地域名の昇順とする。 (5) 印字様式は,次のとおりである。 (6) 見出しの印字は,最初の1回だけとする。 (7) 地域数及び1地域の顧客数は,5けた以内である。 〔プログラム〕 DATA DIVISI0N. FILE SECTI0N. FD K0KYAKU-F. 01 K0KYAKU-R. 02 PIC X(20). 02 K0KYAKU-ADR PIC X(50). 02 PIC X(30). FD CHIIKI-WORK-F. 01 CHIIKI-WORK-R PIC X(50). FD INJI-F. 01 INJI-R PIC X(66). SD CHIIKI-F. 01 CHIIKI-R PIC X(50). SD KYAKUSU-F. 01 KYAKUSU-R. 02 KYAKUSU-NUM PIC 9(05). 02 KYAKUSU-ADR PIC X(50). WORKING-STORAGE SECTI0N. 01 FLG PIC X(01) VALUE SPACE. 01 WORK-NUM PIC 9(05). 01 JUNI PIC 9(05). 01 JUNI-S PIC 9(05) VALUE 1. 01 INJl1 PIC X(21) VALUE "ジュンイ コキャクスウ チイキメイ". 01 INJI2. 02 INJI2-N0 PIC ZZ,ZZ9. 02 INJI2-NUM PIC ZZZZ,ZZ9. 02 PIC X(02) VALUE SPACE. 02 INJI2-ADR PIC X(50). PROCEDURE DIVISI0N. START-RTN. SORT CHIIKI-F ON DESCENDING KEY CHIIKI-R INPUT PROCEDURE IS HENKAN-RTN [ a ]. SORT KYAKUSU-F [ b ] INPUT PROCEDURE IS TASU-RTN 0UTPUT PROCEDURE IS INJI-RTN. STOP RUN. HENKAN-RTN. OPEN INPUT KOKYAKU-F. PERFORM UNTIL FLG = "E" READ KOKYAKU-F AT END MOVE "E" TO FLG NOT AT END UNSTRING KOKYAKU-ADR DELIMITED BY "@" INTO CHIIKI-R END-UNSTRING RELEASE CHlIKI-R END-READ END-PERFORM . CLOSE KOKYAKU-F. TASU-RTN. OPEN INPUT CHIIKI-WORK-F. INITIALIZE FLG KYAKUSU-NUM. READ CHIIKI-WORK-F. MOVE CHIIKI-WORK-R TO KYAKUSU-ADR. PERFORM UNTIL FLG = "E" COMPUTE KYAKUSU-NUM = KYAKUSU-NUM + 1 READ CHIIKI-WORK-F AT END RELEASE KYAKUSU-R MOVE "E" TO FLG NOT AT END IF CHIIKI-WORK-R NOT = KYAKUSU-ADR THEN [ c ] MOVE ZERO TO KYAKUSU-NUM MOVE CHIIKI-WORK-R TO KYAKUSU-ADR END-IF END-READ END-PERFORM. CLOSE CHIIKI-WORK-F. INJI-RTN. OPEN OUTPUT INJI-F. WRITE INJI-R FROM INJI1 AFTER PAGE. INITIALIZE FLG. RETURN KYAKUSU-F. MOVE KYAKUSU-NUM TO WORK-NUM. [ d ] MOVE KYAKUSU-NUM TO INJI2-NUM MOVE KYAKUSU-ADR TO INJI2-ADR [ e ] MOVE JUNI-S TO INJI2-NO ELSE MOVE KYAKUSU-NUM TO WORK-NUM MOVE JUNI TO JUNI-S INJI2-NO END-IF WRITE INJI-R FROM INJI2 AFTER 2 RETURN KYAKUSU-F AT END MOVE "E" TO FLG END-RETURN END-PERF0RM. CLOSE INJI-F. 設問 プログラム中の [ ] に入れる正しい答えを,解答群の中から選ベ。 aに関する解答群 ア GIVING CHIIKI-F イ GIVING CHIIKI-WORK-F ウ OUTPUT PROCEDURE IS INJI-RTN ユ OUTPUT PROCEDURE IS TASU-RTN オ USING CHIIKI-F カ USING CHIIKI-WORK-F bに関する解答群 ア ON ASCENDING KEY KYAKUSU-ADR イ ON ASCENDING KEY KYAKUSU-NUM ウ ON ASCENDING KEY KYAKUSU-NUM DESCENDING KEY KYAKUSU-ADR ユ ON DESCENDING KEY KYAKUSU-ADR オ ON DESCENDING KEY KYAKUSU-NUM カ ON DESCENDING KEY KYAKUSU-NUM ASCENDING KEY KYAKUSU-ADR cに関する解答群 ア COMPUTE KYAKUSU-NUM = KYAKUSU-NUM + 1 イ IF KYAKUSU-NUM > 1 THEN ウ MOVE "E”TO FLG エ RELEASE KYAKUSU-R オ RETURN KYAKUSU-F カ WRITE KYAKUSU-R dに関する解答群 ア PERFORM UNTIL FLG = "E” イ PERFORM UNTIL JUNI = JUNI-S ウ PERFORM VARYING JUNI-S FROM 1 BY 1 UNTIL FLG = "E” 工 PERFORM VARYING JUNI-S FROM 1 BY 1 UNTIL JUNI-S > 1 オ PERFORM VARYING JUNI FROM 1 BY 1 UNTIL FLG = "E” カ PERFORM VARYlNG JUNI FROM 1 BY 1 UNTIL JUNl > 1 eに関する解答群 ア IF KYAKUSU-NUM = WORK-NUM THEN イ IF KYAKUSU-NUM > WORK-NUM THEN ウ IF KYAKUSU-NUM < WORK-NUM THEN エ IF JUNl = JUNI-S THEN オ IF JUNI > JUNI-S THEN カ IF JUNI < JUNI-S THEN