計算機実習 平成28年度その1の第1回目

2016年10月5日。

平成28年度の計算機実習の最初の授業。久しぶりに私一人での授業担当。担当教員のもう一人の助教の先生は出張で不在。また、理工学部改組で先行きが見えないなどの事情でTAも手配されていない。

久しぶりといえば、ブログ書き込みも久しぶり。

また、久しぶりに「プログラミング言語および演習」(2年生)の内容を忘れてしまっている学生がほとんど。私が一人で計算機実習のこの課題をやっていころと同じ状況。開講年次が4年生から3年生に変更になってから、c言語の基礎が忘却の彼方になってしまっている学生は激減していましたが。例えば、ブロックの最初に宣言文を書くことがわかっていない。printf文が第二引数以下を第一引数の形式で標準出力に出力することがわかっていない。比較の「==」と代入の「=」を区別することがわかっていない。

時間数が以前の7コマ(実習は1コマ=3講時)から5コマに減ってから、乱数については復習・予習との扱いとして来たが、本年度はそこからやらざるを得ない。実習の内容は二次元イジング模型のモンテカルロシミュレーション。乱数は、「いろはのい」。σ = +1とσ = -1の二次元配列を○と●で表示することまで、概ね終了した学生が何人か出た。そこで、次回はその次から開始することを授業の最後にアナウンスして終わり。

[0,1) の実数の乱数について、整数の乱数 rand() をdouble型にキャストしてからRAND_MAX で割ったものをdouble型の変数に代入するのが、初歩的かつ移植性も兼ね備えたやり方だと思う。main関数の外で[0,1) の乱数を返すdouble型の関数を定義するのも、移植性がありかつ発展性のあるやり方だと思う。[0,1) の乱数を rnd() としよう。授業のホームページのヒントでは、main関数の中で、rnd() = (double)rand()/RAND_MAX;と書いている。これは、移植性があるのか少し疑問(私だったら、この段落の前半に書いたどちらかを推奨する訳けで、実はこの記述はある時期に一緒に担当していた助教によるもの)。学生には、明日の午前中には授業のホームページに補足のヒントをあげる旨を述べてある。