Pages

Daisypath Anniversary tickers

Daisypath Anniversary tickers

December 13, 2011

nothing. just a test

課題

samplefile5.c をもとにして,バスの発車時刻を検索するプログラムを実現する.プログラムは,現在の時刻を入力すると,入力された時刻にしたがって,次に「山梨大学前バス停」から発車する甲府駅方面行きのバスを検索し,その発車時刻を表示するものである.関数 addBusData( )searchNextBus( ) を作成し,プログラムを完成させなさい.

  • データファイルについて: main( ) 関数で読み込むバスの発車時刻のデータファイルは,busData.txt をダウンロードし使用すること.ファイルには,バスの発車時刻が一行ごとに「時」「分」の順で保存されており,「時」と「分」の間はスペースで区切られて いる.データは全部で34行である(= 一日のバスの本数が34).データは,発車時刻の早いものから順に保存されている.
  • 構造体 RECORD について: RECORD は,int 型の hour,minute と ポインタ変数 next をメンバとする構造体である.hour は発車時刻データの「時」の部分,minute は「分」の部分,next は連結リストにおける次の要素へのポインタを表す.
     typedef struct __record {
      int hour
      int minute;
      struct __record *next;
     } RECORD;

【1】連結リストを先頭からたどり,リストの最後尾にバスの発車時刻データを一つずつ追加する関数 addBusData( ) を以下の条件に従って作成しなさい.
  1. 連結リストの先頭へのポインタ(連結リストの先頭アドレス) head追加する発車時刻データの「時」の部分 time_h「分」の部分 time_m を引数とし,連結リストの先頭アドレス を戻り値として返す.
  2. 関数のプロトタイプは次の通りである.
     RECORD *addBusData(RECORD *head, int time_h, int time_m);
  3. メモリがいっぱいでmallocを使って変数の領域が取れない時のエラー処理を行なうこと.
  4. この関数 addBusData( ) によって,ファイルから読み込んだバスの発車時刻データは,連結リストの先頭から順に,発車時刻の早いもの→遅いものとなるように並べられるはずである.

【2】現在の時刻によって,連結リストの線形探索を行ない,次に来るバスの時刻を表示する関数 searchNextBus( ) を以下の条件に従って作成しなさい.
  1. 連結リストの先頭アドレス head入力された現在時刻の「時」の部分 time_h「分」の部分 time_m を引数とし,戻り値は無し.
  2. 関数のプロトタイプは次の通りである.
     void searchNextBus(RECORD *head, int time_h, int time_m);
  3. 入力された現在時刻をもとに,次に来るバスを探索し「次のバスは 〜 時 〜 分です.」と表示する.
  4. 入力された時刻以降にバスが存在しない場合は,「今日のバスは終了しました.」と表示する.

プログラム実行例1(赤字はキーボードからの入力を表す)
次に来るバスを検索します.現在の時刻を入力してください.
時: 16
分: 45
次のバスは 17 時 4 分です.
プログラム実行例2(赤字はキーボードからの入力を表す)
次に来るバスを検索します.現在の時刻を入力してください.
時: 22
分: 30
今日のバスは終了しました.

0 comments:

Post a Comment