【情報I 大学入学共通テスト】(図説多め)サンプル問題第2問をじっくり解説してみました その3

eyecatch-389

生徒
生徒

大学入学共通テストの情報Iの問題解いてみたけど難しい…

この記事は、このように感じて「情報I」に不安を持った人への記事となっています。

この記事では大学入試センターが公表している「情報I」のサンプル問題について解説してみたいと思います。

コトゼニ
コトゼニ

以前に第2問問1と問2を解説したので、まずはそちらを読んでくださいね

今回の記事は続編となっています。サンプル問題の流れを把握するために下記の記事から読んでください。

eyecatch-166【情報I 大学入学共通テスト】サンプル問題第2問をじっくり解説してみました

eyecatch-270【情報I 大学入学共通テスト】(図説多め)サンプル問題第2問をじっくり解説してみました その2

では早速、続きを見ていきましょう!

問3では問2で見つけた、獲得議席数を求める手順をプログラムに変換する問題となっています。

まずは設問を見てみましょう。

設問の確認〜配列と変数の初期設定

第2問 問3 問題文
第2問 問3 問題文

(01)〜(05)では配列や変数が各行で定義されています。

(01)行目の配列「Tomei」、(02)行目の「Tokuhyo」は問1で定義されていたものをそのまま流用しています。

(03)行目の配列「Tosen」は問2で求めた手法に登場した、「各党の当選者をカウントしていくための」配列です。

(04)行目では、「tosenkei=0」と、「0」という値が代入されているので、変数であることが確認できます。また、ローマ字から、「当選計」と推測でき、「”当選者の合計”を表すために使用されるのでは?」ということが予想できます。

そして、(05)行目では、「giseki=6」と変数が定義されており、「6」という数字、及びローマ字から、「”議席数”を表すために使用するのではないか」ということが予想できます。

ここまででプログラムで使用する配列や変数の初期設定を確認できました。

(01)~(05)行目での初期設定
問3-1
(01)~(05)行目での初期設定

問2の手順をプログラムに変換

(06)行目〜(16)行目が問2で求めた手順をプログラムに変換する作業となっています。

(06)行目と(07)行目の意味

(06)行目と(07)行目はこのようになっています。

空欄「ア」は問1で求めており、「3」ということがわかっています。ここでは「m」という添字を0〜3まで1ずつ増やしながら、mが3の時まで(07)行目の処理を実行します(繰り返します)。

(06)行目と(07)行目の処理
第2問 問3 問題文
(06)行目と(07)行目の処理の内容は実は
コトゼニ
コトゼニ

(06)行目と(07)行目の処理の内容は問2の手順1で行ったことと同じです。

つまり前回の記事でも載せたこの図の通りの内容です。

問3-2
問2の手順1の作業内容

さて、ここからがポイントです。しっかり入念にプログラムを読み解きましょう。

(08)行目から(16)行目の意味

(08)〜(16)行目を見てみましょう。

(08)行目〜(16)行目の処理
第2問 問3 問題文

(08)行目は空欄「セ」が変数「giseki」より小さい間繰り返すと表記されており、空欄「セ」には値が入る、もしくは値が入った変数が当てはまることが予想できます。

現時点ではこの程度の推測にとどめ、繰り返し処理の中身を見てみましょう。

(09)行目で突然「max」という変数の定義があります。

続いて(10)行目では「i」という変数を「0から3(空欄「ア」は既に求めている)まで1ずつ増やしながら(11)行目〜(13)行目を繰り返す」ことが指示されています。

(11)行目は(09)で出てきた「max」という変数が、Hikakuの配列の「i」番目の値よりも小さければ、

(12)行目の処理(現時点では分からない)と

(13)行目の処理(「maxi」という変数に「i」を代入する)ことが指示されています。「maxi」は問2で出てきた添字ですね。比較した得票数の中で最も数が大きい番号を収納するための変数です。

ややこしくなってきましたね。この時点ではこれらの行が手順のどの部分を指しているのかが理解しづらいですね。

ではもう少し読み解いて見ましょう。

(14)行目では

各党の当選者数を表す配列「Tosen」の「maxi」番目の値に1を加える指示が書かれており、

(15)行目でも同様に、当選者の合計をさす変数「tosenkei」に1を加える指示が書かれています。

ということは、

(11)行目〜(13)行目で当選者を選出する処理が書かれているということが予想できます。

特に、(11)行目が条件の定義、(13)行目が変数への値代入ということを考えると

(12)行目が当選者を選出する処理が書かれることになると予想できます。

図で確認
問3-4
(11)~(13)行目で当選者が選出されていることを見抜こう
生徒
生徒

????なんとなくしか意味がわからない・・・

コトゼニ
コトゼニ

とてもややこしいですよね。こういうときは具体例を用いて見ていきましょう。

具体例①「iが0のとき」

(10)行目、変数「i」が0の時、(11)行目は

max < Hikaku[0] となり、

変数「max」は、この時点では値「0」が代入されているので、(11)行目は

0 < 1200 となり、「True」つまり正しいこととなり(12)と(13)行目が実行されます。

具体例①「iが0のとき」
問3-5
具体例①「iが0のとき」の開設

具体例②「iが1のとき」

空欄「ソ」の内容がわからないので、具体例①のとき同様、max は 0 となり、

ここでも max < Hikaku[1]が成立します。このままでは、max < Hikaku[2] も、max < Hikaku[3]も成立し、プログラムとして有用性を感じません。

具体例②「iが1のとき」
問3-6
具体例②「iが1のとき」

ここで、そもそも問2で設定した手順を思い出しましょう。

それは「各党の得票数を比較」し、「最も大きい得票数を獲得した党から当選者を選出する」その後、「当選した党の得票数を当選者数+1の数字で割り、その値と他の党の得票数を比較する」この一連の処理を「当選者が6名になるまで繰り返す」ことでした。

ということは、「各党の得票数を比較」しなければなりません。

そして「最も大きい得票数を獲得した党から当選者を選出する」ために、

変数「max」を「最も大きい得票数」を格納するために使うようにしましょう。

そうすると、(12)行目では、変数「max」に得票数を代入する処理が書かれていないといけません。

変数maxの使い方を考えよう
問3-7
変数maxの使い方を考えよう

各党の得票数が格納されているのは、配列「Hikaku」でした。そのため、

配列「Hikaku」の「i」番目の値を変数「max」に代入します。

つまり、max = Hikaku[ i ] となります。

選択肢を見ると、「②」が当てはまります。そのため空欄「ソ」は解答は「②」となります。

具体例③変数maxの使い方がわかったうえで「iが0のとき」

具体例③変数maxの使い方がわかったうえで「iが0のとき」
問3-8
具体例③変数maxの使い方がわかったうえで「iが0のとき」

具体例④変数maxの使い方がわかったうえで「iが1のとき」

具体例④変数maxの使い方がわかったうえで「iが1のとき」
具体例④変数maxの使い方がわかったうえで「iが1のとき」

具体例⑤変数maxの使い方がわかったうえで「iが2のとき」

具体例⑤変数maxの使い方がわかったうえで「iが2のとき」
具体例⑤変数maxの使い方がわかったうえで「iが2のとき」

ここからmaxはその時点での最大の獲得票数、

maxiはその最大獲得票数の党を示す番号ということがわかります。

つまり、

(12)行目と(13)行目で「現時点の暫定1位は(変数maxiに代入された)” i ”番目の党で”(変数maxに代入された値)”票です」ということを表しているのです。

それを、「0」番目から「3」番目、つまり、A党〜D党まで全て行い、それぞれの獲得票数を比較し、最大票数の党の格納場所を示す「i 」番目に当選者を「1」増やします。

この処理が(14)行目です。

そして、当選者が1名出たので、当選者の合計を示す変数「tosenkei」にも1増やします。

続いての比較をするために、「当選した党の得票数を当選者数+1の数字で割る」処理をしなければなりません。

それが(16)行目です。

つまり(得票数)÷(当選者数+1)を示しているのが空欄「タ」及び「チ」となります。

(16)行目において、それぞれを示す配列&添字(空欄「タ」)、及び変数(空欄「チ」)は、

得票数の方は「Tokuhyo[maxi]」、当選者数+1は「Tosen[maxi]+1」となりますので、

空欄「タ」及び「チ」はそれぞれ、選択肢「③」「⑧」となります。

(17)行目及び(18)行目は処理結果を表示する指示なので、ここでは詳しい解説は割愛します。

候補者数が足りなかった場合を想定する処理

生徒
生徒

ま・・・まだあるの?

コトゼニ
コトゼニ

頑張って!もう一息です!

空欄「ツ」と「テ」では候補者数が足りないケースを想定しています。

第2問 問3 問題文(候補者数が足りないケース)
第2問 問3 問題文
第2問 問3 問題文

問題文に書いてある先生の発言の部分ですね。

せっかく議席を獲得できるとなっても候補者がいなければ次に得票数が多い党から選出されることになります。それを表現したいのですね。

問題では(11)行目に条件を追加しようと話しています。

第2問 問3 問題文(候補者数が足りないケース)
第2問 問3 問題文

(11)行目は比較する時点で暫定1位の票数と比較する票数で条件設定しています。

そもそも候補者がいなければ、比較も無意味となりますので、

空欄「ツ」及び「テ」ではそれを表現できるようにしましょう。

ここでは選択肢を見ましょう。

候補者が当選した人数+1より多くないといけません。

つまり、配列「Koho」の[ i ]番目の人数が、当選した人数を示す配列「Tosen」[ i ]番目の人数に1加えた数より多くないといけません。

一見すると選択肢「⓪」か「②」がそれっぽうですが、「=」を入れてしまうと、その数と一致した場合も考えないといけません。

ということは「大きい」を「小さくない」と言い換える表現をしなければなりません。

候補者が当選した人数+1よりも小さいと表現している選択肢は「①」で、その条件を否定するのは「not」となるので空欄「ツ」の選択肢は「②」となります。

まとめ

生徒
生徒

疲れた・・・

コトゼニ
コトゼニ

本当によく頑張りました!

ここまで読んでいただくだけでも大変だったと思います。本当にありがとうございました。

いかがでしたでしょうか。何度かに分けてサンプル問題第2問を解説しました。

プログラムを読み解くときには具体例を挙げると理解しやすくなるので

一行一行が何を表しているかに注目して解くようにしていきましょう。

この記事が少しでも参考になれば嬉しいです。

それではまたここで会いましょう!

併せて読みたい

eyecatch-166【情報I 大学入学共通テスト】サンプル問題第2問をじっくり解説してみました

eyecatch-270【情報I 大学入学共通テスト】(図説多め)サンプル問題第2問をじっくり解説してみました その2

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA