問題

問9 次のCプログラムの説明及びプログラムを読んで、設問1、2に答えよ。

〔プログラム1の説明〕
 S社では、通常勤務時間帯(8時30分~18時)中の各社員の予定を管理している。関数allmem_free_slotは、通常勤務時間帯に会議を計画する場合に、出席して欲しい社員(以下、出席社員という)全員の予定が人っていない時間帯を調べるプログラムである。

(1)S社では、各社員の予定を30分単位の時間帯ごとに図1に示すスケジュール表で管理している。

図1 スケジュール表
図1 スケジュール表
[画像のクリックで拡大表示]

  [1] スケジュール表は大きさ19の整数型配列で、各要素の添字の値は時間帯番号に対応している。
  [2] スケジュール表の各要素には、予定が入っている場合には0以外の値が、予定が入っていない場合には0が入る。

(2)会議時間は30分以上であり、開始時刻と終了時刻は時間帯の区切りと一致する。

(3)関数allmem_free_slotの引数は次のとおりである。ここで、引数の値に誤りはないものとする。

num出席社員数
time_tbl出席社員全員のスケジュール(スケジュール表へのポインタの配列)
slot_num会議時間(30分単位の時間帯数)
free会議開催の候補時間帯(SLOT型の配列)

(4)構造体を使ったSLOT型の定義は次のとおりである。

SLOT型の定義

(5)候補時間帯freeには、出席社員全員の予定が入っていない、会議時間以上の連続する時間帯(以下、可能時間帯という)を全て格納する。最後に格納した要素の次の要素の開始時間帯番号には、-1を格納する。例えば、出席社員5名(社員A~E)の予定が図2のとおりであった場合、会議時間が1時間(slot_num =2)のとき、可能時間帯の一覧は表1になる。

図2 出席社員全員のスケジュールの例
図2 出席社員全員のスケジュールの例
[画像のクリックで拡大表示]
表1 可能時間帯の一覧の例
表1 可能時間帯の一覧の例

(6)関数allmem_free_slotで使用している関数search_free_slotの仕様は次のとおりである。
 機能:スケジュール表から、予定が入っていない、時間帯数以上の連続した時間帯を全て探し出し、空き時間帯に格納する。最後に格納した空き時間帯の要素の次の要素の開始時間帯番号には、-1を格納する。

 引数:schスケジュール表
slot_num時間帯数
free空き時間帯(SLOT型の配列)

〔プログラム1〕

プログラム1
[画像のクリックで拡大表示]