プログラミング演習 No.1

桂田祐史

1997 年 10 月 15 日

はじめに

プログラミングの授業はこれまでも色々あったはずだが、君達の先輩を見ていると、卒研に来るまで、あまり身についているとは言えないようだ。ゼミ・卒研を通してプログラミングに取り組むことで、少しずつプログラミングに慣れていくのだが、結構時間がかかるものである。こうなってしまう理由は

プログラミングは自分でやってみてはじめて身につくものである

にもかかわらず、

多人数対象の授業では、各人が本当に自分で取り組むようになりにくい

からだと思われる。

そこで、プログラミングの課題を出し、君達には自力で解いて出来たプログラムを提出してもらい、適当な時期にこちらが説明するという手順で演習することにする。

3 年ゼミは週にわずか 1 コマしかない。そこで、最後の説明以外のやりとりは E-mail で行なうことにする。

• プログラミング言語は、 6701 号室で利用できて、グラフィックスが使える処理系があるものならば何でも良い。 (こちらでサポート出来るものは C, C++, Fortran の 3 つ。 )

• なるべく自分で考えるように努力する。しかし要所要所で友人と相談したり、桂田に質問したりしても構わない。むしろそうすることを強く勧める。 (自分一人で出来る場合も、他の人とやりとりすることは有意義なことが多い。 )

• 実験は必ず自分でやる (たとえ人とまったく同じことをすることになったにしても)。

• 桂田への質問、出来たことの報告 (プログラムと簡単な説明文、場合によっては実行結果) はなるべく E-mail で行なう。

問題

[1] n = 1, 2, ⋯, 30 にたいして

n, n^{2}, n^{3}, 2^{n}

の表を作るプログラムを書け。 (繰り返し、 n^{2} などの式の計算方法、表示の整え方など)

[2] n を与えられたとき

S_{1}(n) =^{def.} ∑_{k=1}^{n} \frac{1}{k}, S_{2}(n) =^{def.} ∑_{k=1}^{n} \frac{1}{k^{2}}

を計算するプログラムを書け。 (C や C++ で書く場合は double 型を用い、計算結果は double の精度一杯まで表示せよ。 ) (∑ の計算法、 double 型の常識など)

[3] 関数 f: [a, b] → R のグラフを描くプログラムを書け。特に

f(x) =^{def.} \{ \begin{matrix}x & (0 ≤ x ≤ 1/2) \\ 1 − x & (1/2 ≤ x ≤ 1) \\ 0 & (それ以外) \end{matrix}

の場合に −0.2 ≤ x ≤ 1.2 の範囲のグラフを描け。 (1 変数関数のグラフの描き方、プログラミング言語の関数、など)

[4] (ここまでの応用) 与えられた自然数 n, 実数 x に対して

s_{n}(x) =^{def.} ∑_{k=1}^{n} \frac{(−1)^{k+1}}{(2k − 1)!}x^{2k−1}

を計算する関数を書き、 n = 1, 2, 3, ⋯, 10 に対して s_{n}(x) (0 ≤ x ≤ 2π) のグラフを描け。 ( 「Taylor 級数のプログラミングには漸化式を」 )

[番外] lim_{n→∞} S_{2}(n) = π^{2}/6 であることが知られている。点 (n, π^{2}/6 − S_{2}(n)) を両側対数グラフにプロットすることによって、収束の早さを調べよ。