平成15年 秋期 基本情報技術者 午後 問11
問11 COBOL次の COBOL プログラムの説明及びプログラムを読んで,設問に答えよ。 〔プログラムの説明〕 航空便を使った旅程の中で,出発地の空港から目的地の空港までの飛行時間と 乗継時間を求めるプログラムである。 出発する空港と日時及び到着する空港と日時を一組にしたレコードを, 利用する航空便の数だけファイルに格納してある。 格納されている日時はそれぞれの空港の現地日時である。 各空港の現地時間の世界標準時からの時差を格納した索引ファイルを参照しながら, 一連の航空便の飛行時間,飛行時間合計及び乗継時間合計を求めて印字する。 この問題では,夏時間は考慮しない。 (1) 飛行予定情報ファイル itinerary-file は,次のレコード様式の順ファイルである。
@ プログラムでは,“出発空港と日時”を繰返し項目の1番目の要素で, “到着空港と日時”を繰返し項目の2番目の要素で表現している。 A レコードは,対象となる旅程で利用する航空便の順番に格納されている。 あるレコードの到着時刻から次のレコードの出発時刻までが乗継時間である。 一つの航空便で直接目的地に到達する場合は,レコードは一つであり,乗継ぎはない。 B 便名は6けた以内の英数字項目であり,左詰めに格納されている。 C 空港コードは,英字3文字のコードであり,コードは重複しない。 D 日付は,4けたの西暦年 YYYY,2 けたの月 MM 及び2けたの日 DD を, YYYYMMDD の形の 10 進数として格納している。 (2) 空港と現地時間の世界標準時からの時差を格納するファイル airports-file の レコード様式は,次のとおりである。
@ 3文字の空港コードをキーとする索引ファイルである。 A 世界標準時からの時差の“時”は,符号付き数字項目であり, 1 けたの符号に続く2けたの数字で表現されている。 “分”は,符号なし数字項目である。 B 飛行予定情報ファイルに格納されている空港コードは,必ずファイル中に存在する。 (3) 一連の航空便の飛行時間,飛行時間合計及び乗継時間合計の印字例を,図1 に示す。 このときのプログラムへの入力は,図2 の飛行予定情報ファイルと 図3 の空港と現地時間の世界標準時からの時差を格納するファイルである。 各航空便について,便名,出発空港コード,出発日付,出発時刻,到着空港コード, 到着日付,到着時刻,飛行時間を印字し,最後に飛行時間合計及び乗継時間合計を印字する。 飛行時間合計と乗継時間合計は,それぞれ 100 時間未満とする。
図1 印字例
図2 飛行予定情報ファイルの例
図3 空港と現地時間の世界標準時からの時差を格納するファイルの例 (4) プログラム中で使われている組込み関数 INTEGER-OF-DATE は, 飛行予定情報ファイルの日付の形式の整数を引数として受け取り, グレゴリオ暦で 1600 年 12 月 31 日からその日までの総日数を返す。 〔プログラム〕 DATA DIVISION. FILE SECTION. FD airports-file. 01 airport-timediff-rec. 05 3-letter-code PIC X(3). 05 local-timediff. 10 local-hh-diff PIC S9(2) LEADING SEPARATE. 10 local-mm-diff PIC 9(2). FD itinerary-file. 01 flight-schedule. 05 flight-number PIC X(6). 05 flight-time-and-location occurs 2. 10 airport-of-call PIC X(3). 10 arrv-dprt-date-grp. 15 arrv-dprt-date PIC 9(8). 10 arrv-dprt-time. 15 arrv-dprt-hh PIC 9(2). 15 arrv-dprt-mm PIC 9(2). WORKING-STORAGE SECTION. 01 departure PIC 9 VALUE 1. 01 arrival PIC 9 VALUE 2. 01 this-airport PIC 9. 01 . 05 normalized-minutes PIC 9(9) OCCURS 2. 01 arrival-normalized-minutes PIC 9(9). 01 time-in-minutes PIC 9(9). 01 time-diff-in-minutes PIC S9(9). 01 flight-minutes PIC S9(9). 01 transit-minutes PIC S9(9). 01 accumulated-flight-minutes PIC 9(9). 01 accumulated-transit-minutes PIC 9(9). 01 elapsed-time-hhmm. 05 elapsed-hours PIC 9(2). 05 PIC X VALUE ":". 05 elapsed-minutes PIC 9(2). 01 end-of-itinerary-file PIC X. PROCEDURE DIVISION. main-paragraph. OPEN INPUT airports-file itinerary-file. MOVE "n" TO end-of-itinerary-file. INITIALIZE accumulated-flight-minutes accumulated-transit-minutes arrival-normalized-minutes transit-minutes. PERFORM UNTIL end-of-itinerary-file = "y" READ itinerary-file AT END MOVE "y" TO end-of-itinerary-file NOT AT END PERFORM calculate-flight-time ADD transit-minutes TO accumulated-transit-minutes ADD flight-minutes TO accumulated-flight-minutes PERFORM display-flight-time END-READ END-PERFORM. PERFORM display-accumulated-time. CL OS E airports-file itinerary-file. STOP RUN. calculate-flight-time. MOVE arrival TO this-airport. PERFORM normalize-time. MOVE departure TO this-airport. PERFORM normalize-time. IF THEN COMPUTE transit-minutes = END-IF. COMPUTE flight-minutes = . MOVE normalized-minutes(arrival) TO arrival-normalized-minutes. normalize-time. MOVE TO 3-letter-code. READ airports-file. IF 0 <= local-hh-diff THEN COMPUTE time-diff-in-minutes = local-hh-diff * 60 + local-mm-diff ELSE COMPUTE time-diff-in-minutes = local-hh-diff * 60 - local-mm-diff END-IF. COMPUTE = (FUNCTION INTEGER-OF-DATE(arrv-dprt-date(this-airport)) * 24 + arrv-dprt-hh(this-airport)) * 60 + arrv-dprt-mm(this-airport) - time-diff-in-minutes. display-flight-time. MOVE flight-minutes TO time-in-minutes. PERFORM transform-minutes-to-hhmm. DISPLAY flight-number " " airport-of-call(departure) " " arrv-dprt-date-grp(departure) " " arrv-dprt-time(departure) " to " airport-of-call(arrival) " " arrv-dprt-date-grp(arrival) " " arrv-dprt-time(arrival) ", flight time = " elapsed-time-hhmm. display-accumulated-time. MOVE accumulated-flight-minutes TO time-in-minutes. PERFORM transform-minutes-to-hhmm. DISPLAY "Total flight time = " elapsed-time-hhmm. MOVE accumulated-transit-minutes TO time-in-minutes. PERFORM transform-minutes-to-hhmm. DISPLAY "Total transit time = " elapsed-time-hhmm. transform-minutes-to-hhmm. DIVIDE time-in-minutes BY 60 GIVING elapsed-hours REMAINDER elapsed-minutes. 設問 プログラム中の に入れる正しい答えを,解答群の中から選べ。
a に関する解答群 ア 0 < arrival-normalized-minutes イ 0 < normalized-minutes(arrival) ウ 0 < normalized-minutes(departure) エ 0 = arrival-normalized-minutes b,c に関する解答群 ア arrival-normalized-minutes - normalized-minutes(departure) イ normalized-minutes(arrival) - normalized-minutes(departure) ウ normalized-minutes(departure) - arrival-normalized-minutes エ normalized-minutes(departure) - normalized-minutes(arrival) オ normalized-minutes(this-airport) - normalized-minutes(departure) d,e に関する解答群 ア airport-of-call(arrival) イ airport-of-call(this-airport) ウ normalized-minutes エ normalized-minutes(arrival) オ normalized-minutes(this-airport) カ this-airport
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| ||||||||||||||||||||||||||||