✏️第3問-問3を一緒に解答しよう

ここからは、第3問の問3を確認していきましょう。

問3は、体験時間を変えながら、最長待ち時間が10分未満になるかを調べるプログラムの問題です。

問2よりさらにプログラムが長くなっていますね。

どこを見ればいいのか迷いそうです。

でも、やっていることは「体験時間を変えて、待ち時間を調べる」ことなんですね。

その通りです。

まずは、プログラム全体を「体験時間を1分、2分、3分……と変えて試す処理」として見ていきましょう。

ポイント

問3では、1人ごとの待ち時間ではなく、 その体験時間での最長待ち時間に注目します。

問3の問題

今回の出題テーマ

繰り返し処理、条件判定、最長値の更新

この問題は、体験時間を変えながらシミュレーションし、 最長待ち時間が10分未満かどうかを判定する問題です。

問3の解説

今回は「最長待ち時間」が出てきますね。

1人ごとの待ち時間とは何が違うんですか?

1人ごとの待ち時間を順番に見ていき、その中で一番大きい値を記録したものが最長待ち時間です。

つまり、「この体験時間だと、最大で何分待つことになるか」を調べているんですね。

確認しよう

最長待ち時間は、すべての来訪者の待ち時間を調べながら、 それまでの最大値を更新して求めます。

図3の(12)行目では、

saichou = 最大値( サ , ケ − コ )

という処理をしています。 ここで、 ケ − コ は、問2で確認した i人目の待ち時間を表します。

そして、saichou は、これまでに見つかった最長待ち時間です。 そのため、新しく求めた待ち時間と、これまでの最長待ち時間を比べて、大きい方を残します。

よって、 サ は ③ saichou です。

なぜ途中で処理を止めるのか

最後のス・セ・ソは、処理を途中で止める話ですね。

はい。今回の目的は、最長待ち時間が10分未満となる体験時間を表示することです。

つまり、10分以上になったものは表示する必要がありません。

図4を見ると、体験時間1分、2分、3分、4分のときは、 最長待ち時間が10分未満なので表示されています。

しかし、体験時間5分になると、最長待ち時間は10分以上になります。 この時点で、これ以降の体験時間を調べても、 「10分未満」として表示される結果は増えません。

そのため、繰り返しを続ける条件は、 最長待ち時間が10分未満である間にすればよいです。

確認しよう

「10分未満」は、プログラムでは saichou < 10 と表します。

よって、 シ は ② saichou < 10 です。

ス・セの位置を考えよう

図3の(03)行目は、taikenを1から15まで1ずつ増やしながら繰り返す処理ですね。

はい。

もとの(03)行目では、「taikenの最初の値」「繰り返す条件」「taikenを1ずつ増やすこと」が、まとめて書かれています。

もとの(03)行目で行っていること

もとのプログラムでは、taikenを1から始めて、15まで1ずつ増やしながら処理を繰り返します。

つまり、taikenの値は 1,2,3,……,15 のように順番に変化します。

でも、修正後は「最長待ち時間が10分未満の間だけ続ける」ように変えるんですよね。

その通りです。

そのため、taikenの最初の値を決める処理と、taikenを1ずつ増やす処理を、別に書く必要があります。

修正後は、繰り返しの条件を

(taiken ≦ 15) and (saichou < 10) の間繰り返す:

とします。

この条件を最初に判定するためには、繰り返しに入る前に taiken = 1 と saichou = 0 を用意しておく必要があります。

したがって、 ス は、繰り返しの前にある ⓪ の位置です。

また、修正後の条件だけでは、taikenの値は自動では増えません。

そのため、1回分の処理が終わったあとに、 taiken = taiken + 1 を入れて、次の体験時間に進める必要があります。

したがって、 セ は、繰り返しの最後にある ② の位置です。

実際に体験時間をトレースして確認しよう

最後のソは、実際に何回繰り返されるかを数える必要がありそうですね。

その通りです。

その通りです。まずは、下の表を紙に書き写して、「?」の値を埋めてみましょう。

体験時間 taiken 最長待ち時間 saichou 10分未満か 表示 次に進むか
1分????
2分????
3分????
4分????
5分????

書き写して確認しよう

体験時間を1分、2分、3分……と変えたとき、 最長待ち時間がどう変化するかを順番に追いかけます。

「表示されるか」だけでなく、 その体験時間の処理が実行されたかどうかにも注目しましょう。

では、実際に埋めた結果を確認してみましょう。

体験時間 taiken 最長待ち時間 saichou 10分未満か 表示 次に進むか
1分0分○表示する進む
2分2分○表示する進む
3分4分○表示する進む
4分8分○表示する進む
5分13分×表示しない次で止まる

修正後のプログラムでは、taiken = 5 の処理までは実行されます。 その結果、saichou が13分となり、10分未満ではなくなります。

次に繰り返し条件を確認すると、 saichou < 10 が成り立たないため、そこで繰り返しを終了します。

したがって、配列 Kaishi の初期化処理は、 taiken = 1、2、3、4、5 の5回実行されます。

よって、 ソ は 5 です。

確認しよう

「表示される回数」は4回ですが、 「Kaishi の初期化処理が実行される回数」は5回です。

taiken = 5 のときは、表示はされませんが、処理自体は実行される点に注意しましょう。

A n s w e r

答えは、サ=③、シ=②、ス=⓪、セ=②、ソ=⑤です。

理由:最長待ち時間は、これまでの最大値 saichou と今回の待ち時間を比べて更新するため、サは③です。 処理を続ける条件は最長待ち時間が10分未満であることなので、シは②です。 while型の繰り返しに変更するため、taiken と saichou の初期化は繰り返しの前に置き、taiken の更新は繰り返しの最後に置きます。 また、taiken = 5 の処理まで実行されるため、Kaishi の初期化処理は5回実行されます。

間違えやすいポイント

・「表示される回数」と「処理が実行される回数」を混同する

・saichou < 10 と saichou > 10 を逆に考えてしまう

・while型の繰り返しで、初期化と更新の位置を見落とす

・taiken = 5 の処理は実行されるが、表示はされないことを見落とす

✏️類題にチャレンジ

問3では、最長待ち時間が10分間未満となる体験時間を調べました。

図4の実行結果は、次のようになっていました。

体験時間 1分間:最長待ち時間 0分間

体験時間 2分間:最長待ち時間 2分間

体験時間 3分間:最長待ち時間 4分間

体験時間 4分間:最長待ち時間 8分間

ここでYさんは、条件を変更し、 最長待ち時間が5分間未満となる体験時間だけを表示するようにしたいと考えました。

また、元の問3と同じように、 条件を満たさなくなった時点で処理を止めるようにプログラムを修正します。

このとき、次の問いに答えましょう。

問1

繰り返しを続ける条件として最も適切なものを、次から選びなさい。

⓪ saichou > 5

① taiken > 5

② saichou < 5

③ taiken < 5


問2

この修正後のプログラムで、体験時間は何分まで表示されますか。


問3

配列 Kaishi の初期化処理は何回実行されますか。

ヒントをみる

「表示される回数」と「処理が実行される回数」は同じとは限りません。

条件を満たさなくなる体験時間の処理までは実行され、 その後、次の繰り返し条件を確認したときに終了します。


問1

問2

問3

※この再現版では提出は行いません(送信先は未接続です)

Well done!

次のステップに進みましょう!

次のステップに進む

← 前のステップにもどる