問題文全文(内容文):
第3問 次の問い(問1~3)に答えよ。
問1
次の生徒(A)と生徒(B)の会話文を読み,空欄 ア・ウ に当てはまる数字を答えよ。また,空欄 イ・エ に入れるのに最も適当なものを,後の解答群のうちから一つずつ選べ。
A:昨日の放課後,友人Cとサイコロを使ったゲームで盛り上がったのですが,今から一緒にそのサイコロゲームをしませんか?
B:いいですね。どんなゲームなのかルールを教えてください。
A:参加プレイヤーは1つのサイコロを5回振ります。サイコロを振った際の出目(出目)が奇数(1,3,5)であれば2ポイントが得点に加算されます。サイコロの出目が偶数(2,4,6)であれば3ポイントが得点から減算されます。この作業を5回繰り返したときの最終的な得点が最も高い人の勝ちというシンプルなゲームです。
B:なるほど,シンプルなルールですね。
A:例えば,サイコロを2回振った際の出目が3,4の順である場合の得点は,奇数が1回,偶数が1回出ているので,得点は-1点となり,残り3回サイコロを振った出目が1,5,4の順に出た場合の最終的な得点は[ア]点となります。
B:得点の計算方法も理解できたので,2人で今から対決してみませんか?
A:いいですね。でも,サイコロを持っていないので,情報の授業で学習したプログラミングを使って,このゲームをパソコン上で動くようにしてみましょう。
B:そうですね。せっかく授業で学んだプログラミングの知識をここで発揮しましょう。まずは何から考えていけばよいと思いますか?
A:今回使用するサイコロの目を出力する必要があるため,関数のプログラムを作って,サイコロを再現する方法を考えましょう。以下は,乱数を使う場合の関数の説明です。
【関数の説明と例】
乱数(値)・・・0から引数として与えられた値までの範囲内で,ランダムな数値が生成され,その値が戻り値となる。
例:引数が3なら戻り値は0から3までの整数となる。
A:例えば,乱数(2)という関数を実行すると,[イ]が戻り値の候補となります。サイコロの出目は1から6なので,関数にも少し工夫が必要です。
B:サイコロの出目を再現できるようになったら,次はサイコロの出目が奇数か偶数かを判定するプログラムが必要ですね。
A:偶数か奇数かを判定する方法は,判定したい値を[ウ]で割った余りを調べるとよいですね。奇数の場合は[ウ]で割った余りが1,偶数の場合は[ウ]で割った余りが0になります。例えば,3は奇数であり,4は偶数であることが判定できます。
B:この判定を行うとると,プログラムの中で余りを計算する必要がありますが,どうしたらいいですか?
A:プログラムには色々な演算子(表1)があります。これらの演算子を利用して余りを求めることができますね。
表1 演算子の種類と使用例
| 種類 | 演算子 | 計算例 | 答え |
| 加算 | + | 1+2 | 3 |
| 減算 | - | 5-3 | 2 |
| 乗算 | × | 3×2 | 6 |
| 除算 | / | 8/2 | 4 |
| 余り | % | 7%2 | 1 |
B:例えば,2つの値を足す場合は+の演算子を使い,割り算を行う場合は[エ]の演算子を使えばいいですね。
A:その通りです。演算子を使い分けることで,さまざまな計算を行うことができます。
[イ]の解答群
⓪ 0,2 ① 1,2 ② 0,1,2 ③ 1,2,3
[エ]の解答群
⓪ + ① - ② × ③ / ④ %
問2 次の文章の空欄 オ~ケ に入れるのに最も適当なものを,後の解答群のうちから一つずつ選べ。
B: うーん,もう少しプログラムを作るうえでヒントが欲しいですね。全体的な流れがわかるといいのですが。
A: それでは簡単なフローチャートを考えてみましょう(図1)。サイコロゲームの流れは,サイコロを振り,出目が偶数か奇数かを判定して,得点を計算する,といった行動を5回繰り返していますね。
(図1 サイコロゲームのフローチャート)
始め
score = 0
5回繰り返す
サイコロを振る
└─ NO → scoreから3減算
└─ YES → scoreに2加算
(分岐の菱形の中:オ)
得点表示
終わり
B: フローチャートは処理の流れが可視化されて,わかりやすいですね。分岐には オ を入れればいいですね。
AさんとBさんは,これまでのヒントからプログラムを考えてみた(図2)。変数scoreには得点を求めるため初期値として0を,変数diceにはサイコロの目を求める関数を設定している。
(図2 サイコロゲームの得点を計算するプログラム)
(01) score = 0
(02) i を 1 から カ ながら繰り返す:
(03) dice = キ
(04) もし ク ならば:
(05) score = ケ + 2
(06) そうでなければ:
(07) score = ケ - 3
(08) 表示する(”得点:”, score)
オ の解答群
⓪ 出目が偶数 ① 出目が奇数 ② score が 0 ③ score が 1
カ の解答群
⓪ 5まで1ずつ増やし ① 6まで1ずつ増やし ② 5まで1ずつ減らし ③ 6まで1ずつ減らし
キ の解答群
⓪ 乱数(5) ① 乱数(6) ② 乱数(5) + 1 ③ 乱数(6) + 1
ク の解答群
⓪ dice % 2 == 0 ① dice % 2 == 1 ② score % 2 == 0 ③ score % 2 == 1
ケ の解答群
⓪ score ① dice ② i ③ i + 1
問3 次の文章を参考に,図3のプログラムの空欄【コ—シ】に入れるのに最も適当なものを,後の解答群のうちから一つずつ選べ。
A: プログラム(図2)が完成しました。これでサイコロゲームがコンピュータでも実行できるようになりました。
B: プログラムを動かしてみましょう。【2人でプログラムを実行してみた】
【実行結果】
Aさんの表示 得点:0
Bさんの表示 得点:5
A: きちんと動きました。Bさんの勝ちですね。もう少し白熱するようにゲームの要素を追加しませんか? 最後に特定の条件を満たした場合にボーナスポイントを与えるのはどうでしょうか?
B: いいアイデアですね。それでは,偶数の出目が5回のうち4回以上出現した場合,現在の得点に10点を追加するのはどうでしょう?
A: 最後に大逆転が起きる可能性が出てきますね。
B: そうすると,プログラムを少し改変する必要がありますね。
A: まず(02)行目に偶数の出目が出た回数をカウントするための変数 gusu を設定します。初期値には0を設定し,(09)行目には偶数の出現回数をカウントするプログラムを追加したのが,偶数の出現回数を追加したプログラム(図3)です。
(図3)
(01) score = 0
(02) gusu = 0
(03) i を 1 から 5 まで 1 ずつ増やしながら繰り返す:
(04) dice = キ
(05) もし ク ならば:
(06) score = ケ + 2
(07) そうでなければ:
(08) score = ケ - 3
(09) gusu = コ
(10) 表示する(”偶数回数:”, gusu)
(11) 表示する(”最終スコア:”, score)
B: さらに,ボーナスポイントを加算する条件を設定する必要がありますね。
【追加条件】
もし サ ならば:
score = ケ + 10
(図4 追加条件のプログラム)
A: 追加条件のプログラム(図4)は偶数の出現回数を追加したプログラム(図3)の シ 行目の下に入れると完成ですね。
生徒(A)と生徒(B)は最後にプログラムを実行したところ,正しく得点が計算されていることを確認できた。
A: プログラムを作るのは大変だけど,一度作ると繰り返し行う計算を自動化することで時間を短縮することができますね。
B: さらにルールを途中で変更できる場合,プログラムを少し改変するだけで何度も繰り返し使えると再利用性や拡張性も高いですね。情報の授業でプログラミングを学習してよかったですね。
【コ】の解答群
⓪ gusu ① gusu + 1 ② gusu + score ③ gusu + dice
【サ】の解答群
⓪ gusu > 4 ① gusu < 4 ② gusu >= 4 ③ gusu <= 4
【シ】の解答群
⓪ 3 ① 5 ② 8 ③ 9
第3問 次の問い(問1~3)に答えよ。
問1
次の生徒(A)と生徒(B)の会話文を読み,空欄 ア・ウ に当てはまる数字を答えよ。また,空欄 イ・エ に入れるのに最も適当なものを,後の解答群のうちから一つずつ選べ。
A:昨日の放課後,友人Cとサイコロを使ったゲームで盛り上がったのですが,今から一緒にそのサイコロゲームをしませんか?
B:いいですね。どんなゲームなのかルールを教えてください。
A:参加プレイヤーは1つのサイコロを5回振ります。サイコロを振った際の出目(出目)が奇数(1,3,5)であれば2ポイントが得点に加算されます。サイコロの出目が偶数(2,4,6)であれば3ポイントが得点から減算されます。この作業を5回繰り返したときの最終的な得点が最も高い人の勝ちというシンプルなゲームです。
B:なるほど,シンプルなルールですね。
A:例えば,サイコロを2回振った際の出目が3,4の順である場合の得点は,奇数が1回,偶数が1回出ているので,得点は-1点となり,残り3回サイコロを振った出目が1,5,4の順に出た場合の最終的な得点は[ア]点となります。
B:得点の計算方法も理解できたので,2人で今から対決してみませんか?
A:いいですね。でも,サイコロを持っていないので,情報の授業で学習したプログラミングを使って,このゲームをパソコン上で動くようにしてみましょう。
B:そうですね。せっかく授業で学んだプログラミングの知識をここで発揮しましょう。まずは何から考えていけばよいと思いますか?
A:今回使用するサイコロの目を出力する必要があるため,関数のプログラムを作って,サイコロを再現する方法を考えましょう。以下は,乱数を使う場合の関数の説明です。
【関数の説明と例】
乱数(値)・・・0から引数として与えられた値までの範囲内で,ランダムな数値が生成され,その値が戻り値となる。
例:引数が3なら戻り値は0から3までの整数となる。
A:例えば,乱数(2)という関数を実行すると,[イ]が戻り値の候補となります。サイコロの出目は1から6なので,関数にも少し工夫が必要です。
B:サイコロの出目を再現できるようになったら,次はサイコロの出目が奇数か偶数かを判定するプログラムが必要ですね。
A:偶数か奇数かを判定する方法は,判定したい値を[ウ]で割った余りを調べるとよいですね。奇数の場合は[ウ]で割った余りが1,偶数の場合は[ウ]で割った余りが0になります。例えば,3は奇数であり,4は偶数であることが判定できます。
B:この判定を行うとると,プログラムの中で余りを計算する必要がありますが,どうしたらいいですか?
A:プログラムには色々な演算子(表1)があります。これらの演算子を利用して余りを求めることができますね。
表1 演算子の種類と使用例
| 種類 | 演算子 | 計算例 | 答え |
| 加算 | + | 1+2 | 3 |
| 減算 | - | 5-3 | 2 |
| 乗算 | × | 3×2 | 6 |
| 除算 | / | 8/2 | 4 |
| 余り | % | 7%2 | 1 |
B:例えば,2つの値を足す場合は+の演算子を使い,割り算を行う場合は[エ]の演算子を使えばいいですね。
A:その通りです。演算子を使い分けることで,さまざまな計算を行うことができます。
[イ]の解答群
⓪ 0,2 ① 1,2 ② 0,1,2 ③ 1,2,3
[エ]の解答群
⓪ + ① - ② × ③ / ④ %
問2 次の文章の空欄 オ~ケ に入れるのに最も適当なものを,後の解答群のうちから一つずつ選べ。
B: うーん,もう少しプログラムを作るうえでヒントが欲しいですね。全体的な流れがわかるといいのですが。
A: それでは簡単なフローチャートを考えてみましょう(図1)。サイコロゲームの流れは,サイコロを振り,出目が偶数か奇数かを判定して,得点を計算する,といった行動を5回繰り返していますね。
(図1 サイコロゲームのフローチャート)
始め
score = 0
5回繰り返す
サイコロを振る
└─ NO → scoreから3減算
└─ YES → scoreに2加算
(分岐の菱形の中:オ)
得点表示
終わり
B: フローチャートは処理の流れが可視化されて,わかりやすいですね。分岐には オ を入れればいいですね。
AさんとBさんは,これまでのヒントからプログラムを考えてみた(図2)。変数scoreには得点を求めるため初期値として0を,変数diceにはサイコロの目を求める関数を設定している。
(図2 サイコロゲームの得点を計算するプログラム)
(01) score = 0
(02) i を 1 から カ ながら繰り返す:
(03) dice = キ
(04) もし ク ならば:
(05) score = ケ + 2
(06) そうでなければ:
(07) score = ケ - 3
(08) 表示する(”得点:”, score)
オ の解答群
⓪ 出目が偶数 ① 出目が奇数 ② score が 0 ③ score が 1
カ の解答群
⓪ 5まで1ずつ増やし ① 6まで1ずつ増やし ② 5まで1ずつ減らし ③ 6まで1ずつ減らし
キ の解答群
⓪ 乱数(5) ① 乱数(6) ② 乱数(5) + 1 ③ 乱数(6) + 1
ク の解答群
⓪ dice % 2 == 0 ① dice % 2 == 1 ② score % 2 == 0 ③ score % 2 == 1
ケ の解答群
⓪ score ① dice ② i ③ i + 1
問3 次の文章を参考に,図3のプログラムの空欄【コ—シ】に入れるのに最も適当なものを,後の解答群のうちから一つずつ選べ。
A: プログラム(図2)が完成しました。これでサイコロゲームがコンピュータでも実行できるようになりました。
B: プログラムを動かしてみましょう。【2人でプログラムを実行してみた】
【実行結果】
Aさんの表示 得点:0
Bさんの表示 得点:5
A: きちんと動きました。Bさんの勝ちですね。もう少し白熱するようにゲームの要素を追加しませんか? 最後に特定の条件を満たした場合にボーナスポイントを与えるのはどうでしょうか?
B: いいアイデアですね。それでは,偶数の出目が5回のうち4回以上出現した場合,現在の得点に10点を追加するのはどうでしょう?
A: 最後に大逆転が起きる可能性が出てきますね。
B: そうすると,プログラムを少し改変する必要がありますね。
A: まず(02)行目に偶数の出目が出た回数をカウントするための変数 gusu を設定します。初期値には0を設定し,(09)行目には偶数の出現回数をカウントするプログラムを追加したのが,偶数の出現回数を追加したプログラム(図3)です。
(図3)
(01) score = 0
(02) gusu = 0
(03) i を 1 から 5 まで 1 ずつ増やしながら繰り返す:
(04) dice = キ
(05) もし ク ならば:
(06) score = ケ + 2
(07) そうでなければ:
(08) score = ケ - 3
(09) gusu = コ
(10) 表示する(”偶数回数:”, gusu)
(11) 表示する(”最終スコア:”, score)
B: さらに,ボーナスポイントを加算する条件を設定する必要がありますね。
【追加条件】
もし サ ならば:
score = ケ + 10
(図4 追加条件のプログラム)
A: 追加条件のプログラム(図4)は偶数の出現回数を追加したプログラム(図3)の シ 行目の下に入れると完成ですね。
生徒(A)と生徒(B)は最後にプログラムを実行したところ,正しく得点が計算されていることを確認できた。
A: プログラムを作るのは大変だけど,一度作ると繰り返し行う計算を自動化することで時間を短縮することができますね。
B: さらにルールを途中で変更できる場合,プログラムを少し改変するだけで何度も繰り返し使えると再利用性や拡張性も高いですね。情報の授業でプログラミングを学習してよかったですね。
【コ】の解答群
⓪ gusu ① gusu + 1 ② gusu + score ③ gusu + dice
【サ】の解答群
⓪ gusu > 4 ① gusu < 4 ② gusu >= 4 ③ gusu <= 4
【シ】の解答群
⓪ 3 ① 5 ② 8 ③ 9
チャプター:
00:00 導入
00:34 問1
02:28 問2
05:15 問3
単元:
#情報Ⅰ(高校生)#プログラミング#アルゴリズムの表し方とプログラムの設計
指導講師:
理数個別チャンネル
問題文全文(内容文):
第3問 次の問い(問1~3)に答えよ。
問1
次の生徒(A)と生徒(B)の会話文を読み,空欄 ア・ウ に当てはまる数字を答えよ。また,空欄 イ・エ に入れるのに最も適当なものを,後の解答群のうちから一つずつ選べ。
A:昨日の放課後,友人Cとサイコロを使ったゲームで盛り上がったのですが,今から一緒にそのサイコロゲームをしませんか?
B:いいですね。どんなゲームなのかルールを教えてください。
A:参加プレイヤーは1つのサイコロを5回振ります。サイコロを振った際の出目(出目)が奇数(1,3,5)であれば2ポイントが得点に加算されます。サイコロの出目が偶数(2,4,6)であれば3ポイントが得点から減算されます。この作業を5回繰り返したときの最終的な得点が最も高い人の勝ちというシンプルなゲームです。
B:なるほど,シンプルなルールですね。
A:例えば,サイコロを2回振った際の出目が3,4の順である場合の得点は,奇数が1回,偶数が1回出ているので,得点は-1点となり,残り3回サイコロを振った出目が1,5,4の順に出た場合の最終的な得点は[ア]点となります。
B:得点の計算方法も理解できたので,2人で今から対決してみませんか?
A:いいですね。でも,サイコロを持っていないので,情報の授業で学習したプログラミングを使って,このゲームをパソコン上で動くようにしてみましょう。
B:そうですね。せっかく授業で学んだプログラミングの知識をここで発揮しましょう。まずは何から考えていけばよいと思いますか?
A:今回使用するサイコロの目を出力する必要があるため,関数のプログラムを作って,サイコロを再現する方法を考えましょう。以下は,乱数を使う場合の関数の説明です。
【関数の説明と例】
乱数(値)・・・0から引数として与えられた値までの範囲内で,ランダムな数値が生成され,その値が戻り値となる。
例:引数が3なら戻り値は0から3までの整数となる。
A:例えば,乱数(2)という関数を実行すると,[イ]が戻り値の候補となります。サイコロの出目は1から6なので,関数にも少し工夫が必要です。
B:サイコロの出目を再現できるようになったら,次はサイコロの出目が奇数か偶数かを判定するプログラムが必要ですね。
A:偶数か奇数かを判定する方法は,判定したい値を[ウ]で割った余りを調べるとよいですね。奇数の場合は[ウ]で割った余りが1,偶数の場合は[ウ]で割った余りが0になります。例えば,3は奇数であり,4は偶数であることが判定できます。
B:この判定を行うとると,プログラムの中で余りを計算する必要がありますが,どうしたらいいですか?
A:プログラムには色々な演算子(表1)があります。これらの演算子を利用して余りを求めることができますね。
表1 演算子の種類と使用例
| 種類 | 演算子 | 計算例 | 答え |
| 加算 | + | 1+2 | 3 |
| 減算 | - | 5-3 | 2 |
| 乗算 | × | 3×2 | 6 |
| 除算 | / | 8/2 | 4 |
| 余り | % | 7%2 | 1 |
B:例えば,2つの値を足す場合は+の演算子を使い,割り算を行う場合は[エ]の演算子を使えばいいですね。
A:その通りです。演算子を使い分けることで,さまざまな計算を行うことができます。
[イ]の解答群
⓪ 0,2 ① 1,2 ② 0,1,2 ③ 1,2,3
[エ]の解答群
⓪ + ① - ② × ③ / ④ %
問2 次の文章の空欄 オ~ケ に入れるのに最も適当なものを,後の解答群のうちから一つずつ選べ。
B: うーん,もう少しプログラムを作るうえでヒントが欲しいですね。全体的な流れがわかるといいのですが。
A: それでは簡単なフローチャートを考えてみましょう(図1)。サイコロゲームの流れは,サイコロを振り,出目が偶数か奇数かを判定して,得点を計算する,といった行動を5回繰り返していますね。
(図1 サイコロゲームのフローチャート)
始め
score = 0
5回繰り返す
サイコロを振る
└─ NO → scoreから3減算
└─ YES → scoreに2加算
(分岐の菱形の中:オ)
得点表示
終わり
B: フローチャートは処理の流れが可視化されて,わかりやすいですね。分岐には オ を入れればいいですね。
AさんとBさんは,これまでのヒントからプログラムを考えてみた(図2)。変数scoreには得点を求めるため初期値として0を,変数diceにはサイコロの目を求める関数を設定している。
(図2 サイコロゲームの得点を計算するプログラム)
(01) score = 0
(02) i を 1 から カ ながら繰り返す:
(03) dice = キ
(04) もし ク ならば:
(05) score = ケ + 2
(06) そうでなければ:
(07) score = ケ - 3
(08) 表示する(”得点:”, score)
オ の解答群
⓪ 出目が偶数 ① 出目が奇数 ② score が 0 ③ score が 1
カ の解答群
⓪ 5まで1ずつ増やし ① 6まで1ずつ増やし ② 5まで1ずつ減らし ③ 6まで1ずつ減らし
キ の解答群
⓪ 乱数(5) ① 乱数(6) ② 乱数(5) + 1 ③ 乱数(6) + 1
ク の解答群
⓪ dice % 2 == 0 ① dice % 2 == 1 ② score % 2 == 0 ③ score % 2 == 1
ケ の解答群
⓪ score ① dice ② i ③ i + 1
問3 次の文章を参考に,図3のプログラムの空欄【コ—シ】に入れるのに最も適当なものを,後の解答群のうちから一つずつ選べ。
A: プログラム(図2)が完成しました。これでサイコロゲームがコンピュータでも実行できるようになりました。
B: プログラムを動かしてみましょう。【2人でプログラムを実行してみた】
【実行結果】
Aさんの表示 得点:0
Bさんの表示 得点:5
A: きちんと動きました。Bさんの勝ちですね。もう少し白熱するようにゲームの要素を追加しませんか? 最後に特定の条件を満たした場合にボーナスポイントを与えるのはどうでしょうか?
B: いいアイデアですね。それでは,偶数の出目が5回のうち4回以上出現した場合,現在の得点に10点を追加するのはどうでしょう?
A: 最後に大逆転が起きる可能性が出てきますね。
B: そうすると,プログラムを少し改変する必要がありますね。
A: まず(02)行目に偶数の出目が出た回数をカウントするための変数 gusu を設定します。初期値には0を設定し,(09)行目には偶数の出現回数をカウントするプログラムを追加したのが,偶数の出現回数を追加したプログラム(図3)です。
(図3)
(01) score = 0
(02) gusu = 0
(03) i を 1 から 5 まで 1 ずつ増やしながら繰り返す:
(04) dice = キ
(05) もし ク ならば:
(06) score = ケ + 2
(07) そうでなければ:
(08) score = ケ - 3
(09) gusu = コ
(10) 表示する(”偶数回数:”, gusu)
(11) 表示する(”最終スコア:”, score)
B: さらに,ボーナスポイントを加算する条件を設定する必要がありますね。
【追加条件】
もし サ ならば:
score = ケ + 10
(図4 追加条件のプログラム)
A: 追加条件のプログラム(図4)は偶数の出現回数を追加したプログラム(図3)の シ 行目の下に入れると完成ですね。
生徒(A)と生徒(B)は最後にプログラムを実行したところ,正しく得点が計算されていることを確認できた。
A: プログラムを作るのは大変だけど,一度作ると繰り返し行う計算を自動化することで時間を短縮することができますね。
B: さらにルールを途中で変更できる場合,プログラムを少し改変するだけで何度も繰り返し使えると再利用性や拡張性も高いですね。情報の授業でプログラミングを学習してよかったですね。
【コ】の解答群
⓪ gusu ① gusu + 1 ② gusu + score ③ gusu + dice
【サ】の解答群
⓪ gusu > 4 ① gusu < 4 ② gusu >= 4 ③ gusu <= 4
【シ】の解答群
⓪ 3 ① 5 ② 8 ③ 9
第3問 次の問い(問1~3)に答えよ。
問1
次の生徒(A)と生徒(B)の会話文を読み,空欄 ア・ウ に当てはまる数字を答えよ。また,空欄 イ・エ に入れるのに最も適当なものを,後の解答群のうちから一つずつ選べ。
A:昨日の放課後,友人Cとサイコロを使ったゲームで盛り上がったのですが,今から一緒にそのサイコロゲームをしませんか?
B:いいですね。どんなゲームなのかルールを教えてください。
A:参加プレイヤーは1つのサイコロを5回振ります。サイコロを振った際の出目(出目)が奇数(1,3,5)であれば2ポイントが得点に加算されます。サイコロの出目が偶数(2,4,6)であれば3ポイントが得点から減算されます。この作業を5回繰り返したときの最終的な得点が最も高い人の勝ちというシンプルなゲームです。
B:なるほど,シンプルなルールですね。
A:例えば,サイコロを2回振った際の出目が3,4の順である場合の得点は,奇数が1回,偶数が1回出ているので,得点は-1点となり,残り3回サイコロを振った出目が1,5,4の順に出た場合の最終的な得点は[ア]点となります。
B:得点の計算方法も理解できたので,2人で今から対決してみませんか?
A:いいですね。でも,サイコロを持っていないので,情報の授業で学習したプログラミングを使って,このゲームをパソコン上で動くようにしてみましょう。
B:そうですね。せっかく授業で学んだプログラミングの知識をここで発揮しましょう。まずは何から考えていけばよいと思いますか?
A:今回使用するサイコロの目を出力する必要があるため,関数のプログラムを作って,サイコロを再現する方法を考えましょう。以下は,乱数を使う場合の関数の説明です。
【関数の説明と例】
乱数(値)・・・0から引数として与えられた値までの範囲内で,ランダムな数値が生成され,その値が戻り値となる。
例:引数が3なら戻り値は0から3までの整数となる。
A:例えば,乱数(2)という関数を実行すると,[イ]が戻り値の候補となります。サイコロの出目は1から6なので,関数にも少し工夫が必要です。
B:サイコロの出目を再現できるようになったら,次はサイコロの出目が奇数か偶数かを判定するプログラムが必要ですね。
A:偶数か奇数かを判定する方法は,判定したい値を[ウ]で割った余りを調べるとよいですね。奇数の場合は[ウ]で割った余りが1,偶数の場合は[ウ]で割った余りが0になります。例えば,3は奇数であり,4は偶数であることが判定できます。
B:この判定を行うとると,プログラムの中で余りを計算する必要がありますが,どうしたらいいですか?
A:プログラムには色々な演算子(表1)があります。これらの演算子を利用して余りを求めることができますね。
表1 演算子の種類と使用例
| 種類 | 演算子 | 計算例 | 答え |
| 加算 | + | 1+2 | 3 |
| 減算 | - | 5-3 | 2 |
| 乗算 | × | 3×2 | 6 |
| 除算 | / | 8/2 | 4 |
| 余り | % | 7%2 | 1 |
B:例えば,2つの値を足す場合は+の演算子を使い,割り算を行う場合は[エ]の演算子を使えばいいですね。
A:その通りです。演算子を使い分けることで,さまざまな計算を行うことができます。
[イ]の解答群
⓪ 0,2 ① 1,2 ② 0,1,2 ③ 1,2,3
[エ]の解答群
⓪ + ① - ② × ③ / ④ %
問2 次の文章の空欄 オ~ケ に入れるのに最も適当なものを,後の解答群のうちから一つずつ選べ。
B: うーん,もう少しプログラムを作るうえでヒントが欲しいですね。全体的な流れがわかるといいのですが。
A: それでは簡単なフローチャートを考えてみましょう(図1)。サイコロゲームの流れは,サイコロを振り,出目が偶数か奇数かを判定して,得点を計算する,といった行動を5回繰り返していますね。
(図1 サイコロゲームのフローチャート)
始め
score = 0
5回繰り返す
サイコロを振る
└─ NO → scoreから3減算
└─ YES → scoreに2加算
(分岐の菱形の中:オ)
得点表示
終わり
B: フローチャートは処理の流れが可視化されて,わかりやすいですね。分岐には オ を入れればいいですね。
AさんとBさんは,これまでのヒントからプログラムを考えてみた(図2)。変数scoreには得点を求めるため初期値として0を,変数diceにはサイコロの目を求める関数を設定している。
(図2 サイコロゲームの得点を計算するプログラム)
(01) score = 0
(02) i を 1 から カ ながら繰り返す:
(03) dice = キ
(04) もし ク ならば:
(05) score = ケ + 2
(06) そうでなければ:
(07) score = ケ - 3
(08) 表示する(”得点:”, score)
オ の解答群
⓪ 出目が偶数 ① 出目が奇数 ② score が 0 ③ score が 1
カ の解答群
⓪ 5まで1ずつ増やし ① 6まで1ずつ増やし ② 5まで1ずつ減らし ③ 6まで1ずつ減らし
キ の解答群
⓪ 乱数(5) ① 乱数(6) ② 乱数(5) + 1 ③ 乱数(6) + 1
ク の解答群
⓪ dice % 2 == 0 ① dice % 2 == 1 ② score % 2 == 0 ③ score % 2 == 1
ケ の解答群
⓪ score ① dice ② i ③ i + 1
問3 次の文章を参考に,図3のプログラムの空欄【コ—シ】に入れるのに最も適当なものを,後の解答群のうちから一つずつ選べ。
A: プログラム(図2)が完成しました。これでサイコロゲームがコンピュータでも実行できるようになりました。
B: プログラムを動かしてみましょう。【2人でプログラムを実行してみた】
【実行結果】
Aさんの表示 得点:0
Bさんの表示 得点:5
A: きちんと動きました。Bさんの勝ちですね。もう少し白熱するようにゲームの要素を追加しませんか? 最後に特定の条件を満たした場合にボーナスポイントを与えるのはどうでしょうか?
B: いいアイデアですね。それでは,偶数の出目が5回のうち4回以上出現した場合,現在の得点に10点を追加するのはどうでしょう?
A: 最後に大逆転が起きる可能性が出てきますね。
B: そうすると,プログラムを少し改変する必要がありますね。
A: まず(02)行目に偶数の出目が出た回数をカウントするための変数 gusu を設定します。初期値には0を設定し,(09)行目には偶数の出現回数をカウントするプログラムを追加したのが,偶数の出現回数を追加したプログラム(図3)です。
(図3)
(01) score = 0
(02) gusu = 0
(03) i を 1 から 5 まで 1 ずつ増やしながら繰り返す:
(04) dice = キ
(05) もし ク ならば:
(06) score = ケ + 2
(07) そうでなければ:
(08) score = ケ - 3
(09) gusu = コ
(10) 表示する(”偶数回数:”, gusu)
(11) 表示する(”最終スコア:”, score)
B: さらに,ボーナスポイントを加算する条件を設定する必要がありますね。
【追加条件】
もし サ ならば:
score = ケ + 10
(図4 追加条件のプログラム)
A: 追加条件のプログラム(図4)は偶数の出現回数を追加したプログラム(図3)の シ 行目の下に入れると完成ですね。
生徒(A)と生徒(B)は最後にプログラムを実行したところ,正しく得点が計算されていることを確認できた。
A: プログラムを作るのは大変だけど,一度作ると繰り返し行う計算を自動化することで時間を短縮することができますね。
B: さらにルールを途中で変更できる場合,プログラムを少し改変するだけで何度も繰り返し使えると再利用性や拡張性も高いですね。情報の授業でプログラミングを学習してよかったですね。
【コ】の解答群
⓪ gusu ① gusu + 1 ② gusu + score ③ gusu + dice
【サ】の解答群
⓪ gusu > 4 ① gusu < 4 ② gusu >= 4 ③ gusu <= 4
【シ】の解答群
⓪ 3 ① 5 ② 8 ③ 9
投稿日:2026.02.08





