応用化学基礎演習2 2018/1/10
Mathematicaでプログラミング

Mathematicaを使って、簡単なプログラムについて勉強する。

ランダム関数
マスマティカには任意の実数乱数を発生させるRandom[ ]というコマンドがあります。
これを使うと、意外に色々なことができます。

課題1 1次元のランダムウォーク
「酔っぱらいの歩いた経路を表示せよ」という問題。
まず最初の酔っぱらいはx軸に沿って、まっすぐに歩くことができるが、Y軸方向には上下にフラフラする酔っぱらいです。
x軸方向に1進むごとにY軸方向には、+1、0、−1にふらつきます。
酔っぱらいはどれくらいまっすぐ歩くことができるでしょうか?
 
やり方

  1. まずrwalk = { }で中身のないtableを作ります。
  2. x = 0; y = 0; i = 0;と変数の初期値を作ります。
  3. While[ ]を使い、x の値を1づつ増やし、y の値は-1、0、+1のいずれかの値で変化させます。
  4. y の値の変化には、RandomInteger[{-1, 1}]を使います。
  5. AppendTo[rwalk, {x, y}]で、(x, y)の座標をrwalkに足していきます。
  6. ListPlot[ ]でプロットします。この際、Joined -> Trueとして各座標を線で結びます。

課題2 2次元のランダムウォーク
二番目の酔っぱらいはさらに酔っぱらってて、もうまっすぐ歩くことは不可能です。上下左右に均等な確率で、1づつ歩いていきます。その経路はどうなるでしょう?

やり方

  1. 最初は課題6と同じ。
  2. RandomInteger[{1, 4}]を使い、1〜4の整数を発生させます。
  3. 1,2,3,4のとき、それぞれx-1, x+1, y-1, y+1と値を変化させます。
  4. 後は課題6と同じ。

課題3 3次元のランダムウォーク
3次元の酔っぱらいの経路を描きます。
AppendTo[lis, {x, y}]を使う。これは、リストlisの末尾に{x, y}を入れていき、リストの要素を増やしていきます。
 
やり方

  1. 最初は課題7と同じですが、今度は3次元なので、x, y, zの座標が必要になります。
  2. 課題7と同じ。ただし、今度は1〜6の整数を発生させないといけません。
  3. 後は課題7と同じ。

課題4 足し算テス
0から50までの数字の足し算の問題を5問解き、点数を表示する簡単なプログラムを作る。
具体的には次のようなブログラムを作る。

  1. まず変数の初期値を決めます。問題は5問なので、5まで数えるための変数iと正解の数を数える変数seikaiの初期値をゼロとします。
  2. ループを開始します。たとえば、 While[i < 5, 作業; i=i+1];を使います。
  3. RandomInteger[{0, 50}]を2回使い、ふたつの整数int1とint2を発生させます。
  4. そのふたつの整数を足し合わせ、あらかじめ正解ansを計算しておきます。
  5. Print[int1, " + ", int2, " = ?"]を使い、出題します。
  6. you = Input[ ]を使い、新しいウィンドウが開き、そこに解答youを書き込めるようにします。
  7. ウィンドウに書込み、エンターを押すと、ウィンドウは閉じます。
  8. Ifを使い、解答の正否you == ansを判定します。正解の場合は、Print["あなた=", you, " 正解!"]として、正解であることを表示します。
  9. さらにこのとき、正解の数を数える変数seikaiの値を1大きくします。
  10. 不正解の場合は、Print["あなた=", you, " はずれ!", " 答えは", ans, "です"]]と表示します。
  11. 一問ごとに空行を入れたほうが見やすいので、Print[" "]とスペースを出力します。
  12. ループが終了したら、Print["ゲ-ム終了です."]と表示します。
  13. 最後にPrint[N[(seikai*100)/5], "点!"]として、点数を表示します。

 
 
課題はマスマティカのファイル(拡張子が.nb)を添付して送ってください。

結果のみではなく、コマンドそのものも送ること。

完成したら、ファイルをメールに添付して提出すること。
送り先:ynagasaあっとfc.ritsumei.ac.jp