氏名		WYK
学籍番号	C1131685
クラス		7

・作成したプログラム
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-

if ARGV[0] == nil
  STDERR.puts "あなたの血中アルコール濃度を調べます。\n"
  STDERR.puts "飲酒量(ml)、あなたが飲んだお酒の度数(%)、あなたの体重(kg)を入力して下さい。\n"
  STDERR.puts "例: ./sum.rb 250 24.5 65.85"
  exit(1)
end


def alcinbl(ml, percent, weight)
  if ml < 0 || percent < 0 || weight < 0
    return nil
  end
  return (ml * percent) / (833 * weight)
end

x = ARGV[0].to_f
y = ARGV[1].to_f
z = ARGV[2].to_f
if alcinbl(x, y, z) == nil
  print "入力した値がおかしいです。\n"
else
  printf "あなたの血中アルコール濃度は %7.4f %%です。\n", alcinbl(x, y, z)
  if alcinbl(x, y, z) < 0.5000
    print "爽快期です。適度な飲み方です。\n"
  elsif 0.5000 <= alcinbl(x, y, z) && alcinbl(x, y, z) < 1.0000
    print "弱度酩酊です。ほろ酔い気分ですね。\n"
  elsif 1.0000 <= alcinbl(x, y, z) && alcinbl(x, y, z) < 1.5000
    print "軽度酩酊です。少々飲みすぎです。\n"
  elsif 1.5000 <= alcinbl(x, y, z) && alcinbl(x, y, z) < 2.5000
    print "中等度酩酊です。気をつけて下さい!\n"
  elsif 2.5000 <= alcinbl(x, y, z) && alcinbl(x, y, z) < 3.5000
    print "強度酩酊です。これ以上飲んではいけません!\n"
  elsif 3.5000 <= alcinbl(x, y, z) && alcinbl(x, y, z) < 4.5000
    print "泥酔期です。危険です!\n"
  elsif 4.5000 <= alcinbl(x, y, z)
    print "昏睡期です。だからいったのに…\n"
  end

  printf "\nあなたの体重の前後10kgの人が同じお酒を同量飲んだときの血中アルコール濃度は下のようになります。\n"
  print "-" * 30
  print "\n"
  (z - 10.0000).step(z + 10.0000,1) do |w|
    printf "%5.2f kg    %3.4f %%\n",w ,alcinbl(x, y, w)
  end
  print"-" * 30
  print"\n"
end


・プログラムの説明
ARGV[]
Kterm上でプログラムを実行する際に、./プログラム名 引数 といったように、
プログラムに直接引数やデータを与えることがある。この引数をコマンドライン
引数と言う。この際、コマンドライン引数は自動的に配列変数ARGVに格納される。
プログラム内であらかじめARGVを利用するように組み込んでおけば、利用者が入
力した引数をプログラム内で利用することが出来る。

STDERR
コマンドラインに引数を必要とするプログラムを実行する際、コマンドライ
ンに引数を与えずに実行すると、端末にメッセージが表示されることなくプログ
ラムが終了してしまう。そこで、利用者側にメッセージを出力するためにこれを
使う。

exit
プログラムの実行を終了する。Rubyプログラムでは、プログラムが上手くいった
かどうかを、0(上手くいった)、0以外(上手くいかなかった)というふうに終了ス
テータスを利用して表現される。これとexit(1)とすることで、予定した処理を
行わずにプログラムを終了したことをシステム側に送信する。

開始値.step(終了値[, 増加値]) do |変数| 〜 end
開始値から終了値までの回数分、間の処理を繰り返す。stepというメソッドは増
加値を自ら設けることも出来る。uptoメソッドは開始値から終了値まで1ずつ増
加、downtoメソッドは開始値から終了値まで1ずつ減少、timesは最初に置いた数
だけ処理を繰り返す。

・実行結果
sime{c113168}% ./repeat.rb                                               [~/Ruby]
あなたの血中アルコール濃度を調べます。
飲酒量(ml)、あなたが飲んだお酒の度数(%)、あなたの体重(kg)を入力して下さい。
例: ./sum.rb 250 24.5 65.85
sime{WATANABE Yuki}% ./repeat.rb 200 5.6 65.7                            [~/Ruby]
あなたの血中アルコール濃度は  0.0205 %です。
爽快期です。適度な飲み方です。

あなたの体重の前後10kgの人が同じお酒を同量飲んだときの血中アルコール濃度は下のようになります。
------------------------------
55.70 kg    0.0241 %
56.70 kg    0.0237 %
57.70 kg    0.0233 %
58.70 kg    0.0229 %
59.70 kg    0.0225 %
60.70 kg    0.0222 %
61.70 kg    0.0218 %
62.70 kg    0.0214 %
63.70 kg    0.0211 %
64.70 kg    0.0208 %
65.70 kg    0.0205 %
66.70 kg    0.0202 %
67.70 kg    0.0199 %
68.70 kg    0.0196 %
69.70 kg    0.0193 %
70.70 kg    0.0190 %
71.70 kg    0.0188 %
72.70 kg    0.0185 %
73.70 kg    0.0182 %
74.70 kg    0.0180 %
75.70 kg    0.0178 %
------------------------------
sime{c113168}% ./repeat.rb 1000 40 45.29                                 [~/Ruby]
あなたの血中アルコール濃度は  1.0603 %です。
軽度酩酊です。少々飲みすぎです。

あなたの体重の前後10kgの人が同じお酒を同量飲んだときの血中アルコール濃度は下のようになります。
------------------------------
35.29 kg    1.3607 %
36.29 kg    1.3232 %
37.29 kg    1.2877 %
38.29 kg    1.2541 %
39.29 kg    1.2222 %
40.29 kg    1.1918 %
41.29 kg    1.1630 %
42.29 kg    1.1355 %
43.29 kg    1.1092 %
44.29 kg    1.0842 %
45.29 kg    1.0603 %
46.29 kg    1.0374 %
47.29 kg    1.0154 %
48.29 kg    0.9944 %
49.29 kg    0.9742 %
50.29 kg    0.9548 %
51.29 kg    0.9362 %
52.29 kg    0.9183 %
53.29 kg    0.9011 %
54.29 kg    0.8845 %
55.29 kg    0.8685 %
------------------------------
sime{c113168}%                                                           [~/Ruby]


・参考文献
"豆知識 - 42.pdf:".医薬品総合卸 株式会社ATOL.
http://www.atol-com.co.jp/mp/di/pdf/04_07/mametisiki/42.pdf,(accessed
2014-10-10)

広瀬雄二. "#03 Iteration". "いろいろな繰り返し".
http://roy/~yuuji/2014/pf2/03/iteration.html, (参照2014-10-10)

広瀬雄二. "#03 Argument Value". "コマンドラインとの情報のやりとり".
http://roy/~yuuji/2014/pf2/03/argv.html, (参照2014-10-10)

・感想
今回は内容的にも復習が多かったのですんなりと入って来ました。for〜in〜end
を使おうと思ったのですが、今回のプログラムには上手く組み込むことが出来な
かったので、次回以降利用したいと思います。段々とリズムを掴めて来たので、
もう少し複雑なプログラムにも挑戦していきたいです。