基本情報技術者試験の過去問と解説
[TOP] [午前分野別] [午後分野別] [キーワード索引] [令和元年秋午前] [令和元年秋午後]

平成15年 秋期 基本情報技術者 午後 問11
問11   COBOL

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

〔プログラムの説明〕

 航空便を使った旅程の中で,出発地の空港から目的地の空港までの飛行時間と 乗継時間を求めるプログラムである。 出発する空港と日時及び到着する空港と日時を一組にしたレコードを, 利用する航空便の数だけファイルに格納してある。 格納されている日時はそれぞれの空港の現地日時である。 各空港の現地時間の世界標準時からの時差を格納した索引ファイルを参照しながら, 一連の航空便の飛行時間,飛行時間合計及び乗継時間合計を求めて印字する。 この問題では,夏時間は考慮しない。

(1) 飛行予定情報ファイル itinerary-file は,次のレコード様式の順ファイルである。

便名
6 けた
出発空港と日時 到着空港と日時
空港

コード
3 けた

日付
8 けた
時刻 空港

コード
3 けた

日付
8 けた
時刻

2 けた

2 けた

2 けた

2 けた

@ プログラムでは,“出発空港と日時”を繰返し項目の1番目の要素で, “到着空港と日時”を繰返し項目の2番目の要素で表現している。

A レコードは,対象となる旅程で利用する航空便の順番に格納されている。 あるレコードの到着時刻から次のレコードの出発時刻までが乗継時間である。 一つの航空便で直接目的地に到達する場合は,レコードは一つであり,乗継ぎはない。

B 便名は6けた以内の英数字項目であり,左詰めに格納されている。

C 空港コードは,英字3文字のコードであり,コードは重複しない。

D 日付は,4けたの西暦年 YYYY,2 けたの月 MM 及び2けたの日 DD を, YYYYMMDD の形の 10 進数として格納している。

(2) 空港と現地時間の世界標準時からの時差を格納するファイル airports-file の レコード様式は,次のとおりである。

空港コード

3 けた

世界標準時からの時差

3 けた

2 けた

@ 3文字の空港コードをキーとする索引ファイルである。

A 世界標準時からの時差の“時”は,符号付き数字項目であり, 1 けたの符号に続く2けたの数字で表現されている。 “分”は,符号なし数字項目である。

B 飛行予定情報ファイルに格納されている空港コードは,必ずファイル中に存在する。

(3) 一連の航空便の飛行時間,飛行時間合計及び乗継時間合計の印字例を,図1 に示す。 このときのプログラムへの入力は,図2 の飛行予定情報ファイルと 図3 の空港と現地時間の世界標準時からの時差を格納するファイルである。 各航空便について,便名,出発空港コード,出発日付,出発時刻,到着空港コード, 到着日付,到着時刻,飛行時間を印字し,最後に飛行時間合計及び乗継時間合計を印字する。 飛行時間合計と乗継時間合計は,それぞれ 100 時間未満とする。

図1 印字例

XY1234ABC200309271715DEF200309271030
YX4567DEF200309271200GHI200309271530

   図2 飛行予定情報ファイルの例


   ABC+0700    
   DEF-1000
   GHI-0900
   JFK-0500
   LAX-0800
   NRT+0900
   ORD-0600
   SAN-0800


図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

解答 a ←クリックすると正解が表示されます

解答 b ←クリックすると正解が表示されます

解答 c ←クリックすると正解が表示されます

解答 d ←クリックすると正解が表示されます

解答 e ←クリックすると正解が表示されます


[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]