第3問次の文章を読み,後の問い(問1〜3)に答えよ。(配点 25)
Sさんが所属する園芸部では,校舎の雨どいから流れてくる雨水をタンクにためて,花壇の水やりに使っている。雨水が足りない日には水道水を使う。Sさんは,水道水の使用量を減らすために,今より大きいタンクに買い替えるとどのくらい効果があるかを,記録をもとに調べることにした。
問1次の文章を読み,空欄ア〜ウに当てはまる数字をマークせよ。また,空欄エに入れるのに最も適当なものを,後の解答群のうちから一つ選べ。
いま使っているタンクの容量(ためておける水の最大の量)は100 Lである。Sさんは,1日ごとのタンクの水の量の変化を,次の規則1・規則2の順に考えることにした。
規則1:その日にたまった雨水の量をタンクの水に加える。ただし,加えた結果が容量を超える場合は,超えた分があふれ出るので,タンクの水は容量と同じ量になる。
規則2:花壇の水やりに使う量をタンクの水から使う。タンクの水が使う量より少ない場合は,タンクの水をすべて使い,足りない分を水道水で補う。
先週の1日目の朝,タンクは空だった。表1は,先週の7日間の雨水の量と使う量の記録と,規則1・規則2によって求めた結果である。
表1 先週の記録と規則1・規則2で求めた結果(単位はL)
| 1日目 | 2日目 | 3日目 | 4日目 | 5日目 | 6日目 | 7日目 |
|---|
| 雨水の量 | 40 | 10 | 0 | 200 | 0 | 10 | 0 |
|---|
| 使う量 | 20 | 30 | 30 | 20 | 40 | 60 | 50 |
|---|
| 水やりの後のタンクの水 | 20 | 0 | 0 | ア | イ | ? | ? |
|---|
| 水道水の量 | 0 | 0 | 30 | 0 | 0 | ウ | 50 |
|---|
(表の一部を“?”で隠してある)
1日目は雨水が40 Lたまり,そこから20 Lを使ったので,水やりの後のタンクの水は20 Lである。2日目は20 Lに雨水10 Lが加わって30 Lとなり,使う量30 Lをちょうど使い切った。3日目は雨水がなくタンクも空だったので,使う量30 Lのすべてを水道水で補った。4日目は200 Lの雨水がたまったが,規則1によりその一部があふれ出る。水やりの後のタンクの水は,4日目がアL,5日目がイLであり,6日目の水道水の量はウLである。
この結果からSさんは,規則1を行った後のタンクの水の量が,「前日の水やりの後のタンクの水の量と,その日の雨水の量との和」と「容量」のエに等しいことに気づいた。
エの解答群
問2次の文章を読み,空欄オ〜コに入れるのに最も適当なものを,後の解答群のうちから一つずつ選べ。ただし,空欄キ〜コは同じものを繰り返し選んでもよい。
次にSさんは,問1の規則1・規則2に従って,水道水を使った日とその量を表示するプログラムを作成した(図1)。
(01)行目の変数 youryou はタンクの容量を表す。配列 Usui,Shiyou には,それぞれ先週の各日の雨水の量と使う量を格納する。配列の添字は1から始まり,何日目かを表す。例えば,Usui[4] の値は4日目の雨水の量200である。(04)行目では,関数「要素数」を用いて変数 nissu に日数を代入する。変数 tank はタンクの水の量を表し,(05)行目で空の状態を表す0を代入する。
【関数の説明】
要素数(配列)…引数の配列に含まれる要素の個数を返す。
例:配列 Y が [3, 0, 8, 5] のとき,要素数(Y)は4となる。
(06)〜(12)行目の繰り返しで,i 日目について規則1と規則2を順に行う。(07)行目では関数「最小値」を用いて規則1を行う。(08)〜(12)行目では規則2を行い,タンクの水が使う量より少ない日だけ,(11)行目でその日の水道水の量を表示する。
【関数の説明】
最小値(x, y)…引数の二つの値のうち,小さい方の値を返す。二つの値が等しいときはその値を返す。
例:最小値(7, 4)は4,最小値(5, 5)は5となる。
(01)youryou = 100
(02)Usui = [40, 10, 0, 200, 0, 10, 0]
(03)Shiyou = [20, 30, 30, 20, 40, 60, 50]
(04)nissu = 要素数(Usui)
(05)tank = 0
(06)i を 1 から nissu まで 1 ずつ増やしながら繰り返す:
(07)tank = 最小値(オ, youryou)
(08)もし カ ならば:
(09)tank = tank - キ
(10)そうでなければ:
(11)表示する(i, "日目の水道水:", ク - ケ, "L")
(12)tank = コ
図1 水道水を使った日とその量を表示するプログラム
図1のプログラムを実行すると,最初に「3日目の水道水:30L」と表示され,表示された水道水の量は,いずれも表1の水道水の量と一致した。
オの解答群
⓪tank + Usui[i - 1]
①tank + Shiyou[i]
②tank + Usui[i]
③Usui[i]
④tank + Usui[i + 1]
⑤tank - Shiyou[i]
カの解答群
⓪tank > Shiyou[i]
①tank >= Shiyou[i]
②tank < Shiyou[i]
③tank >= Usui[i]
④Usui[i] >= Shiyou[i]
キ〜コの解答群
⓪0
①tank
②youryou
③Usui[i]
④Shiyou[i]
⑤Shiyou[i + 1]
問3次の文章を読み,空欄サ・シに入れるのに最も適当なものを,後の解答群のうちから一つずつ選べ。また,空欄スに入れるのに最も適当なものを,図2の⓪〜③のうちから一つ選べ。空欄セに当てはまる数字をマークせよ。
Sさんは,図1の結果を顧問の先生に見せた。
先生4日目は雨水が100 Lもあふれていますね。タンクを大きくすれば,あふれる雨水が減って,水道水も減りそうです。ただ,大きいタンクほど値段が高く,置き場所も必要になりますよ。
Sさんでは,容量をいくつか変えて,水道水がどれだけ減るかをプログラムで調べてみます。
先生規則2の処理は,関数「最大値」を使うと「もし」を使わずに書けますよ。
【関数の説明】
最大値(x, y)…引数の二つの値のうち,大きい方の値を返す。二つの値が等しいときはその値を返す。
例:最大値(3, 8)は8,最大値(6, 6)は6となる。
Sさんは,タンクの容量を100 Lから300 Lまで50 Lずつ変えたときの,先週の7日間で使う水道水の量の合計(以下,水道水の合計と呼ぶ。)を求めるプログラムを作成した(図2)。変数 suidou は水道水の合計を表す。(04)行目からの繰り返しで容量 youryou を変え,(05)〜(08)行目でその容量のときの水道水の合計を求めて,(09)行目で表示する。(06)行目は図1の(07)行目と同じ処理である。(07)行目ではその日に使う水道水の量を関数「最大値」を用いて求めて suidou に加え,(08)行目では水やりの後のタンクの水の量を関数「最大値」を用いて求める。
(01)Usui = [40, 10, 0, 200, 0, 10, 0]
(02)Shiyou = [20, 30, 30, 20, 40, 60, 50]
(03)nissu = 要素数(Usui)
⓪←
(04)youryou を 100 から 300 まで 50 ずつ増やしながら繰り返す:
①←
(05)i を 1 から nissu まで 1 ずつ増やしながら繰り返す:
②←
(06)tank = 最小値(オ, youryou)
(07)suidou = suidou + 最大値(サ, 0)
(08)tank = 最大値(シ, 0)
③←
(09)表示する("容量", youryou, "L:水道水の合計", suidou, "L")
図2 容量ごとに水道水の合計を求めるプログラム
(図2の⓪〜③は,プログラム中の位置を示す。⓪は(03)行目と(04)行目の間,①は(04)行目と(05)行目の間,②は(05)行目と(06)行目の間,③は(08)行目と(09)行目の間で(05)行目からの繰り返しの外側を指す。)
図2には,変数 tank と suidou に最初の値を代入する処理が抜けている。そこでSさんは,「tank = 0」と「suidou = 0」の2行を,図2のスの位置に挿入した。このプログラムの実行結果は図3のようになった。
容量100L:水道水の合計90L
容量150L:水道水の合計40L
容量200L:水道水の合計30L
容量250L:水道水の合計30L
容量300L:水道水の合計30L
図3 2行を挿入した後の図2のプログラムの実行結果
図3から,容量を200 Lにすると水道水の合計は30 Lまで減るが,それより大きくしても変わらないことがわかった。
続いてSさんは,今週の記録でも同じように調べることにした。図2の(01)行目と(02)行目を次のように変更して,2行を挿入した後の図2のプログラムを実行すると,1行目に「容量100L:水道水の合計セL」と表示された。
(01)Usui = [10, 80, 0, 0, 160, 0, 0]
(02)Shiyou = [30, 30, 30, 30, 40, 50, 60]
サの解答群
⓪tank - Shiyou[i]
①Shiyou[i] - tank
②Shiyou[i] - Usui[i]
③Usui[i] - Shiyou[i]
④Shiyou[i]
⑤youryou - tank
シの解答群
⓪Shiyou[i] - tank
①tank - Usui[i]
②tank + Usui[i] - Shiyou[i]
③tank - Shiyou[i]
④youryou - Shiyou[i]
⑤tank