見出し画像

大学入試共通テストサンプル問題の問題2を教材化する

 3月24日に大学入試センターで公表された,情報Ⅰのサンプル問題から,プログラミングの問題2は,平易でよい問題だ。外部ライブラリのインポートも不要で,基本的な知識だけでプログラムが書ける。
 授業でPythonを扱っている牛田みほさんが,さっそく取り組んでおられる。

 題材は,選挙におけるドント方式。現行教科書でも,第一学習社の「社会と情報」には載っている。

画像1

 ただし,「発展」のモデル化とシミュレーションだから,やっていない学校は多いだろう。筆者はやらなかったが,その理由は,この図では,2,3,・・・ で割った値を計算式で各セルの値とし,目視で当選者を決めているようだからだ。その時点で考えるのやめた。よく見ると,G2セルで当選得票数を計算しているから,セルの色を変えているのはマクロでやっているのだろう。しかし,Excelのマクロは教えていない。

 今回のサンプル問題は,これとは異なるアルゴリズムでプログラミングしている。説明が会話形式になっていて冗長な感はあるが,これは共通テストの他の科目でも共通な傾向だ。問題文を読んで,必要な情報だけを的確に拾っていく読解力が求められる。
 アルゴリズムは「手順」として示され,実際にそれを追ったものが問題として出されている。

画像2

これができれば,アルゴリズムがわかったことになる。
そのあと,コーディングしていくことになるのだが,教材化するなら,この図8は問題として,正解も示し,コードについては正解を示さずに(選択肢はそのまま提示),コーディングさせる,というのがよさそうだ。正しい選択肢を選んで書くことができれば正しい結果が得られる。

 コーディングにあたって,生徒が間違えそうなのは,繰り返しの回数だろう。

画像3

JavaScript なら,アはそのまま3でよい。(添え字は0スタート)
ここを,Pythonだと for m in range(3) とやってしまいそうだ。あるいは,range(0, 3) 。いずれにしても,これだと 0, 1, 2 の3回しか繰り返されない。
以前,授業報告でも書いたが,「まで繰り返す」と「回繰り返す」の換算ができない,というおそろしい実態がある。乱数の発生で,0以上1未満の「未満」がわからないという実態もある。このことは,正解を渡しておくと,かえって間違えそうだ。
 他には特に問題はない。正解を与えなくても,考えながらやって,違う結果が出れば修正する(デバッグ),という学習活動でよいだろう。

 なお,図8の途中経過も表示させるとなおよい。Python の print 文だと,改行されてしまうので,

   for i in range(4):
       print(Hikaku[i], end = " ")
   for i in range(4):
       print(Tosen[i], end = " ")
   print("")

とする必要があるが,普段から使っていれば問題ないだろう。 Jupyter Notebookだと次のようになる。

画像4

候補者が足りなくなったときの修正を加えても25行程度だから,授業1コマの内容としてちょうどよいのではないだろうか。