HOME»基本情報技術者試験掲示板»平成30年秋期 午後問13
投稿する

平成30年秋期 午後問13 [4518]

 pinさん(No.1) 
問題eの条件「min_time > end_time[i]」がどうしてmin_timeがend_time[i]より大きい場合に処理が走るのか理解ができませんでした。
最小の前者終了時刻を更新するので演算子は「<」になるような気がしてなりません。
ご教示いただけますと幸いです。
よろしくお願いします。
2022.10.23 17:10
nsさん(No.2) 
FE シルバーマイスター
プログラムに行番号が付いておらず説明しにくいですが、「i:2, i≦B1, 1」のループの部分は〔マクロ:queue_simulation の説明〕の(3)の①の部分と対応しています。
端的に書けば、
min_time・・・それまでに見つけた時刻のうち、最小(時刻が早い)の値
end_time[i]・・・いまチェックしている値
ですから、end_time配列の中から最小の値を見つけるには「min_time > endtime[i]のときに、min_timeの値を更新する」という動作が必要になります。

その疑問が出ているということはトレースができていない(そもそもやってない?)のではないかと思います。

end_time配列の要素数が3つ(=窓口数が3つ)の例で説明します。
※各要素は「午前0時00分からの経過分数」として整数が格納されているはずですが、分かりやすさのために時刻形式で書きます。
|  1   |  2   |  3   |
|10:35|10:42|10:30|
(3)①の説明から、end_timeが上のような状態のとき、ループ終了時点でmin_timeが10:30になっていてほしいことが分かります。

まずループに入る前にmin_no=1,  min_time=10:35にセットされます。
■ループ1周目(i=2)
min_time=10:35, end_time[i]=10:42です。
空欄eが「min_time > end_time[i](正答)」であれば、条件を満たさないため、処理は行われません。
空欄eが「min_time < end_time[i](質問者さんの主張)」であれば、条件を満たすため、min_time=10:42, min_no=2に更新されます。

■ループ2周目(i=3)
end_time[i]=10:30,
(正答)であれば、min_time=10:35, end_time[i]=10:30で、「min_time > end_time[i]」を満たすため、min_time=10:30, min_no=3に更新されます。
(質問者さんの主張)であれば、min_time=10:42, end_time[i]=10:30で、「min_time < end_time[i]」を満たさないため、処理は行われません。

□ループ3周目(i=4)
ループの継続条件を満たさないので、ループを終了します。

ループを抜けた時点のmin_timeの値ですが、
(正答)10:30
(質問者さんの主張)10:42
となりました。
2022.10.23 18:34
pinさん(No.3) 
nsさん
分かり易いご説明をいただきありがとうございます。
ご指摘どおりトレースができていませんでした。
2022.10.23 21:39
返信投稿用フォームスパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
© 2010- 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop