Column 18年10月 これまでの大学入試に見る「プログラミング」の出題(1)

これまでの大学入試でも、ごく一部では「プログラミング」が出題されてきました。
過去に出題された問題の中から、取り組むべき問題、取り組む価値のある問題を紹介していきます。今回は1999年度の大学入試センター試験です。

1999年度 大学入試センター試験
前々回にも触れた通り、大学進学を希望する多くの受験生が受験する「大学入試センター試験」では1997年から2015年までの間、数学の選択問題として「プログラミング」が出題されてきました(『計算とコンピュータ』『算法とコンピュータ』『数値計算とコンピュータ』といった単元に対応する出題)。
様々な難易度の問題が出題されてきましたが、今回紹介するのは、おそらくもっとも易しいとされるものです。もしかしたら、小学生のお子様でも取り組めるかもしれません。

次の流れ図は,0以上の数をいくつか順に入力して,最後に負の数を入力し,入力された数のうち最大のものを出力する方法を示したものである。
変数Aが入力された数を表し,変数Bがそれまでに入力された数のなかで最も大きい数を表すとする。


(1) ア ~ オ に適するものを,次の 0 ~ 7 のうちから選べ。

0. Aを入力する
1. Bを出力する
2. AにBを代入する
3. BにAを代入する
4. Aは負か
5. Bは負か
6. AはBより大きいか
7. AはBより小さいか

(2) 15, 13, 16, 16, 20, 1, 99, 19, -1 と入力したとき,流れ図の処理 エ は カ 回実行され、キク が出力される。

以下で解説をしていきますので、時間を決めて取り組んでみてください。制限時間は10分~15分です。

考え方

いかがでしょうか。自信を持って解答できましたか? ここで問われているアルゴリズム(=やりたいこと)は「0以上の数をいくつか順に入力して、最後に負の数を入力し、入力された数のうち最大のものを出力する」ものです。このことから考えれば、難しい問題ではありません。

フローチャート(流れ図)を上から順番に見ていきましょう。まずアは「入出力」なので、0.か1.のどちらかです。このアルゴリズムでは、「0以上の数をいくつか順に入力」することになっていますので、アは0.「Aを入力する」です。
イの条件判断で分かれた先には「オして終わり」があることから、イは4.「Aは負か」であり(入力された数字が入るのがAです)、オは1.「Bを出力する」です。
ウも条件判断なので、4.~7. のいずれかです。ここまでに行っていない作業は「一番大きな数を探す」ことですよね。もう一度問題文を見ると、Bは「それまでに入力された数のなかで最も大きい数」とあります。だとすれば、「AとBを比べ、A(新たに入力された数)のほうが大きければBを更新する」ことがここでの作業になります。つまりウは6.「AはBより大きいか」であり、「はい」(入力された数のほうが大きい)のときにエには3.「BにAを代入する」が入ります。
ここまでできれば、(2)は簡単です。エ、つまり「Bを更新する」のは、15, 16, 20, 99の4回なので、カは4。出力される数字キクは99ですね。もしかしたらカを「5」と答えてしまった人もいるかもしれませんが、ウは「AはB より 大きいか」ですので、2回目の16のときにBは更新されません。

この問題から「学ぶこと」

1999年度以外のセンター試験本試で「フローチャート」のみを問う問題が出題されたことはありません。それ以外の年度の問題ではもう少し複雑なアルゴリズムが扱われ、BASICと呼ばれるプログラミング言語で書かれたプログラムを「読む」という作業が必要とされています。これから先の大学入試で、本問と同レベルの問題が出題されることは考えにくいでしょう。
それでは、中学入試や高校入試の問題としてはどうなのでしょうか。フローチャートそのものの考え方は決して難しくなく、中学校の技術家庭科でも取り上げられています。また、小学校高学年を推奨年齢としているZ会プログラミング講座 with LEGO® Education発展編でも扱っています。中学入試では「プログラミング」を選択できる学校もありますし、高校入試でも教科横断型の「思考力を問う問題」として教科の枠に収まりにくい新傾向の問題が出題されることも考えられます。中学入試や高校入試の問題として、本文レベルの問題が出題される可能性は否定できないでしょう。

その他年度のセンター試験

センター試験で出題されてきた「プログラミング」の問題では、さまざまなものが題材となっています。有名なアルゴリズムだったり、複雑な計算だったり、面白い設定だったり……。その中でも、設定が面白い問題の一部を紹介し、本稿を終わりにしましょう。

** 2001年 数学IA**
100 グラム未満のみかんを小玉, 100 グラム以上のものを大玉と呼ぶことにする.次のプログラムはみかんを小玉と大玉の 2 種類に分類して、種類別に袋詰めするとき,袋の中のみかんの種類と総重量を表示するものである.

実際にこのようなプログラムがあるのかもしれない、と感じさせる設定です。

** 2005年数学IIB**
ある銀行では毎期末に預金残高に対し 5% の利率で利息がつく.この銀行に,たとえば a万円を一期間預金すると,期末には  1.05×a 万円の預金残高になることになる. 第 1 期の初めに, A さんはこの銀行に b 万円の預金を持っている. A さんは、まず b 万円から第 1 期分 m 万円を引き出す.残りの預金に対し第 1 期末に 5% の利息がつく.ここで, b>mとする.第 2 期目からも毎期初めにこの預金から m 万円ずつを引き出す予定である.ただし、預金残高が m 万円に満たないときには,その全額を引き出すものとする.(以下、少しずつ条件を変えながらプログラムを作っていく)

「金利」の計算は、現代社会において重要なテーマです。試験会場で本問を目にした受験生は戸惑ったかもしれませんが、「プログラミング」の枠を超えて学習しておくべきテーマです。そして「プログラミング教育」という観点からも、目的(この場合は資産運用の検討)があってプログラムを書く、という例を示すことができるものです。
今回はこれ以上触れませんが、ほかにも面白いテーマや見ておくべきアルゴリズムが多々出題されています。教科「情報」の大学入試を考える際、過去のセンター試験で扱われたテーマを見ておくのも悪くないかもしれません。

【次回予告】
次回は、慶應義塾大学の問題です。Z会プログラミング講座の担当が思わずにやりとしてしまったものです。