東大教養学部でのプログラミング教育

※この記事は、当教室ブログとしては珍しく、高校くらいまでの数学の予備知識(積分)を必要とすると思います。それでもよいかたはどうぞお読みくださればと思います。他の記事をお読みくださるのでもありがたいです。(きのうの記事は予備知識なしに読める記事です。おとといのもです。)
私が東大理科一類に入ったのは1994年です。インターネットはほとんどなく、携帯電話もほとんどなく、メールアドレスを持った人も稀でした。当時、インターネットやEメールは、もっぱら研究者の連絡手段だったのです。私が東大に入学した前の年(1993年)くらいから、学生全員にメールアドレスが配布されました。@の左に学籍番号、右がu-tokyo.ac.jpみたいなメールアドレスでした。大学院からもっと研究者らしい(@の左は名前のアルファベットつづり。自分で決められる)メールアドレスがもらえましたが。そして、やはり私の1個上の世代くらいから、東大教養学部で、プログラミングの教育が始まったのでした。そのなかで、覚えている懐かしい課題について書きたいと思います。
いまでこそ、小学校でもプログラミングを習う時代となりました。私は小学校のプログラミング教育に疑問を抱いていますが、それは今回はさておき、当時の東大のプログラミングの授業です。パソコン自体が珍しい時代であり、コンピュータ室みたいなところに行き、先生からプログラミングを習いました。
私は(ときどき書いております通り)、中学のときに家にあった旧式のパソコンで、BASICに慣れ親しんでおり、「よく知っていることを習っている」感じの授業でした。ちょっとおもしろいと思って覚えているプログラミング課題を書きますね。以下のようにして円周率を近似するのでした。
高校生が習う積分で、以下のようなものがあります。
$${\int_0^1\frac{dx}{1+x^2}=\frac{\pi}{4}}$$
これを東大の授業で見たときは、「久しぶりに高校数学を見たなあ」と感じたものです。(これの計算は最後にまわしますね。これを認めていただいて以下の話はお読みいただけます。)この式の左辺には円周率が含まれず、右辺には含まれるところがミソです。これで、左辺の関数のグラフの${x}$軸と囲まれた部分の面積を長方形近似して、それで円周率を近似しよう!というプログラミング課題であったわけです。
(この記事がようやく書けるのは、長いことこの記憶はあったものの、肝心の「高校数学テクニカル的な」関数そのものを忘れており、書きたくても書けなかったのです。比較的最近、これはネットでたまたま見て、思い出したのでした。)
この関数のグラフをかいてみましょう。以下はgrapesというソフトでかいてみたものです。これはその1994年当時では、そもそも手書き(高校で習うように、微分して増減表をかく)以外に書きようがなかったはずのものです。便利な世の中になったものですね。みんな頭の悪くなる世の中になったとも言えます。

この0から1までの関数のグラフの下の部分の面積が、円周率の${\frac{1}{4}}$であるわけです。この部分を縦長の長方形に分割して、円周率の近似をしてみます。私はいま、就労移行支援事業所で46歳のときに習ったエクセルのマクロしか言語を知りません。それで書いてみますね。
いま書いて走らせました。1回も間違わずにスッと書けましたね。走らせた結果を以下に乗せますね。

1等分から100等分までしました。行の数が分割数です。列のうち左の列が長方形の面積の和、右の列がその4倍で、円周率の近似です。単調減少な関数なので、小さいほうから攻めていきました。20分割で、円周率は3.09より大きいことがわかりました。100分割させましたら、円周率は3.13より大きいことが言えましたね。
以下にコードをさらしますね。

のちに東大の入学試験で、円周率が3.05より大きいことを証明せよ、という問いが出たらしいとあとから聞きましたが、受験生で、この解法が頭をかすめた人は少なからずいると思いますね。ただし、明らかに筋が悪いので、円に内接する正十二角形の辺の長さで攻めた人がほとんどではないかと思います。実際、これをご覧になりますと、円周率が3.05より大きいことを言うのに、12分割はしなければならないことになります。入学試験を解くには筋が悪すぎるでしょう(笑)。
というわけで、東大の教養学部の30年くらい前のプログラミングの授業であった、円周率の近似プログラム課題でした。以上です!
最後に、この積分の計算のしかたを書いておきましょう。どの学習参考書にも載っている気はしますが、載せますね。これはアークタンジェント(タンジェントの逆関数)の微分の逆の計算であるとも言えます。${\tan\frac{\pi}{4}=1}$。でも私はこれを忘れていたのですから、えらそうなことはなにも言えませんね…。
$${\int_0^1\frac{dx}{1+x^2}=\int_0^{\frac{\pi}{4}}\frac{1}{1+\tan^2\theta}\cdot\frac{dx}{d\theta}d\theta}$$
$${=\int_0^{\frac{\pi}{4}}\cos^2\theta\cdot\frac{1}{\cos^2\theta}d\theta}$$
$${=\int_0^{\frac{\pi}{4}}d\theta}$$
$${=[\theta]_0^{\frac{\pi}{4}}}$$
$${=\frac{\pi}{4}}$$
