課題
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( ) を以下の条件に従って作成しなさい.
- 連結リストの先頭へのポインタ(連結リストの先頭アドレス) head,追加する発車時刻データの「時」の部分 time_h,「分」の部分 time_m を引数とし,連結リストの先頭アドレス を戻り値として返す.
- 関数のプロトタイプは次の通りである.
RECORD *addBusData(RECORD *head, int time_h, int time_m);
- メモリがいっぱいでmallocを使って変数の領域が取れない時のエラー処理を行なうこと.
- この関数 addBusData( ) によって,ファイルから読み込んだバスの発車時刻データは,連結リストの先頭から順に,発車時刻の早いもの→遅いものとなるように並べられるはずである.
【2】現在の時刻によって,連結リストの線形探索を行ない,次に来るバスの時刻を表示する関数 searchNextBus( ) を以下の条件に従って作成しなさい.
- 連結リストの先頭アドレス head,入力された現在時刻の「時」の部分 time_h,「分」の部分 time_m を引数とし,戻り値は無し.
- 関数のプロトタイプは次の通りである.
void searchNextBus(RECORD *head, int time_h, int time_m);
- 入力された現在時刻をもとに,次に来るバスを探索し「次のバスは 〜 時 〜 分です.」と表示する.
- 入力された時刻以降にバスが存在しない場合は,「今日のバスは終了しました.」と表示する.
プログラム実行例1(赤字はキーボードからの入力を表す)
次に来るバスを検索します.現在の時刻を入力してください. 時: 16 分: 45 次のバスは 17 時 4 分です.プログラム実行例2(赤字はキーボードからの入力を表す)
次に来るバスを検索します.現在の時刻を入力してください. 時: 22 分: 30 今日のバスは終了しました.
0 comments:
Post a Comment