第 6 回 目的に応じて使ってみよう レポート課題 氏名:小林愛実 学籍番号:c1100816 語学クラス:英語6 コース(系):政策マネジメント 1、筆記問題 alphabetの配列 alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r" "s","t","u","v","w","x","y","z"] 〜alphabet[18]の場合〜 配列は、前から0、1、2、3、…と数えていく。 alphabet[18]は、前から数えて、18番目の"s"にあたるため、 alphabet[18] = s となる。 〜alphabet[40]の場合〜 配列の中には25番目までしか入っていないため、40番目はない。 そのため、alphabet[40] = nil になる。 # nilは空(ブランク)を表す。 2、プログラム問題 A、 a、考えた設定 一日の摂取カロリーの平均を求めるプログラム def_statistic.rbを作成した。 b、作成したプログラム #!/usr/koeki/bin/ruby def average(total) # totalは数値がたくさん入る配列 sum = 0.0 # 割り算する予定なので浮動小数点数にしておく for calorie in total # for A in B で B の中の A について sum += calorie # 値 をsum に足していく end # forの終わり sum / total.length # taotalの数でsumを割り、平均値を出す end # def の終わり kcal = Array.new # 空の配列 kcal を作る while true STDERR.print("一日の摂取カロリーを入力して下さい(Ctrl- dで終了):\n") line = gets # 変数lineに取りこむ if line == nil # Ctrl- dをおすと繰り返しが終わるようにする break end # if の終わり kcal << line.to_i # kcal に入力された値を入れる end # whileの終わり printf("あなたの一日の平均摂取カロリーは %dkcal です。\n",average(kcal)) # 平均値の表示 if average(kcal) >= 2600 # 2600kcal以上の場合 print("食べすぎですよ!!!\n") elsif average(kcal) >= 2300 # 2300kcal以上の場合 print("男性の場合:平均的ですよ。\n 女性の場合:少し食べすぎですね…\n") elsif average(kcal) >= 2000 # 2000kcal以上の場合 print("男性の場合:もう少し食べてもいいんじゃないですか?\n 女性の場合:平均的ですよ。\n") else print("もっと食べましょう\n") end # if の終わり c、元にしたプログラム 授業内で作成した def_ary_movie.rb を参考に作成した。 〜変更点〜 ・適切な変数に変更した。 ・平均値によってコメントを表示するようにした。 d、実行結果 pan{c110081}% ./def_statistic.rb [~/Ruby] 一日の摂取カロリーを入力して下さい(Ctrl- dで終了): 2000 一日の摂取カロリーを入力して下さい(Ctrl- dで終了): 1800 一日の摂取カロリーを入力して下さい(Ctrl- dで終了): 1500 一日の摂取カロリーを入力して下さい(Ctrl- dで終了): 2600 一日の摂取カロリーを入力して下さい(Ctrl- dで終了): 3000 一日の摂取カロリーを入力して下さい(Ctrl- dで終了): あなたの一日の平均摂取カロリーは 2180kcal です。 男性の場合:もう少し食べてもいいんじゃないですか? 女性の場合:平均的ですよ。 e、考察 (確かめ算) pan{c110081}% bc -l [~/Ruby] 2000+1800+1500+2600+3000 10900 10900/5 2180.00000000000000000000 bc -lで計算すると、答えが2180.00000000000000000000になった。 後の000…を削除すると、答えは2180となり、プログラムの実行結果と一致する。 したがって、このプログラムは正しいと言える。 3、感想 恋愛シュミレーションゲーム 今回の育成ゲーム同様、選択肢の中の1つを選ばせ、その選択肢の合計によって 結果が表示されるようにすると、methodの考え方を使って恋愛シュミレーション ゲームができるのではないかと考えた。 今回は、プログラム問題がAだけになってしまった。 授業中作成したdef_rubiocci.rbを参考にB問題もチャレンジしたが、どうしても 理解できず、計算が合わなくなってしまったため、あきらめた。 複雑なプログラムになると、作成できなくなってしまうのは、やはりまだ基礎が しっかり理解しきれていないからだと思うので、基礎をしっかり理解していきた い。 一応B問題ものせました。 考察や説明はよくわかりませんでした。 ↓ B、 ネコを育てるプログラムを作成した。 #!/usr/koeki/bin/ruby def cry(nya) # cryを定義、仮引数はnya nya.times do # 繰り返す整数.times do # 繰り返す整数値分繰り返す print("にゃー\t") # ネコの鳴き声 end print("\n") # 改行 sleep(0.5) # 0.5杪待つ end def message(name) # messageを定義、仮引数name STDERR.printf("%sの世話をしよう:\n",name) STDERR.print("[1]\tニボシをあたえる\n") STDERR.print("[2]\tキャットフードをあたえる\n") STDERR.print("[3]\tお魚をあたえる\n") end def cat(day1, choice) # catを定義、仮引数day,choice x = 4*day1 - choice printf("%d日目\n",day1) # 日にちの表示 printf("体重増加分 %d\n",x) # 体重増加量 x end printf("ネコを拾ってきた。\n") STDERR.printf("どんな名前にしますか?") # 入力を促す name = gets.chomp if name =="" # もし何も入力されなかったら name ="タマ" # タマになる end printf("%sという名前になった。\n",name) # 名前の表示 happy = 1 # うれしさ weight = 1 # 体重 day2 = 0 # 育てた日付 print("よく鳴くとうれしさがアップするよ。\n") while true cry(happy) message(name) answer = gets.chomp.to_i cry(answer) happy += day2*answer printf("嬉しさ度 happy=%d\n",happy) weight += cat(day2,answer) printf("体重 weight=%d\n",weight) if happy > 4 break end if weight >4 break end day2 += 1 cry(answer) end cry(weight) printf("%sは",name) if weight > 8 print("太った") elsif weight <= 5 print("ふつう") else print("痩せた") end 4、参考文献 成人の摂取カロリーの解説 http://muuum.com/calorie/1010.html 西村まどか 基礎プログラミングII 目的に応じて使ってみよう http://roy.e.koeki-u.ac.jp/~madoka/2011/r2/06/ 東北公益文化大学 公益学部 公益学科 2年 小林愛実 c110081f.koeki-u.ac.jp