第 6 回 目的に応じて使ってみよう レポート課題 氏名:佐藤 千香 学籍番号:C1101069 語学クラス:英語6 コース(系):地域共創コース 1、筆記問題 A、 配列 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]は18番目の alphabet なので r であるが、 配列は 0 から始まるので a = 0 , b = 1 , …となるので、 s = 18 となり、alphabet[18]は sである。 alphabet[40]は 配列 alphabet は a - z まで 25番目までしかないため、なしである。 2、プログラム A、 a、考えた設定 身長、体重の平均を求め、そこから平均のBMIを計算するプログラム b、プログラム #!/usr/koeki/bin/ruby def tall(cm) # 関数 tall とし、引数は cm とする total = 0.0 # 変数 total を 0.0 とする for average in cm # for 変数 in 配列 total += average # 合計を求める end # for に対する end total / cm.length # 合計を個数で割り、平均を求める(身長) end # def に対する end def weight(kg) # 関数 weight とし、引数は kg とする total = 0.0 # 変数 total を 0.0 とする for average in kg # for 変数 in 配列 total += average # 合計を求める end # for に対する end total / kg.length # 合計を個数で割り、平均を求める(体重) end # def に対する end a = Array.new # 配列 a をつくる while true # while true で繰り返し STDERR.print("身長を入力して下さい(終了はCrtl+D):") # 行う操作 image = gets # 身長の入力 if image == nil # if 文 Ctrl-D が入力された場合 break # break で繰り返しをぬける end # if に対する end a << image.to_f # image を配列 a にする end # while true に対する end b = Array.new # 配列 b をつくる print("\n\n") while true STDERR.print("体重を入力して下さい(終了はCrtl+D):") # 行う操作 image = gets # 体重の入力 if image == nil # if 文 Ctrl-D が入力された場合 break # break で繰り返しをぬける end # if に対する end b << image.to_f # image を配列 b にする end # while true に対する end bmi = weight(b) / (tall(a)/100)**2 # BMI = 体重(kg) ÷ {身長(m)×身長(m)} printf("\n身長の平均は %3.2fcm \n", tall(a)) # 結果を表示(身長の平均) printf("\n体重の平均は %3.2fkg\n", weight(b)) # 結果を表示(体重の平均) printf("\nBMIの平均は %3.2f\n", bmi) # 結果を表示(BMIの平均) c、実行結果 ・4人分の身長、体重、BMIの平均 pan{c110106}% ./def_statistic.rb [~/Ruby] 身長を入力して下さい(終了はCrtl+D):165 身長を入力して下さい(終了はCrtl+D):140 身長を入力して下さい(終了はCrtl+D):136 身長を入力して下さい(終了はCrtl+D):155 身長を入力して下さい(終了はCrtl+D):^D 体重を入力して下さい(終了はCrtl+D):56 体重を入力して下さい(終了はCrtl+D):45 体重を入力して下さい(終了はCrtl+D):38 体重を入力して下さい(終了はCrtl+D):50 体重を入力して下さい(終了はCrtl+D):^D 身長の平均は 149.00cm 体重の平均は 47.25kg BMIの平均は 21.28 ・10人分の身長、体重、BMIの平均 pan{c110106}% ./def_statistic.rb [~/Ruby] 身長を入力して下さい(終了はCrtl+D):170 身長を入力して下さい(終了はCrtl+D):190 身長を入力して下さい(終了はCrtl+D):135 身長を入力して下さい(終了はCrtl+D):165 身長を入力して下さい(終了はCrtl+D):178 身長を入力して下さい(終了はCrtl+D):160 身長を入力して下さい(終了はCrtl+D):155 身長を入力して下さい(終了はCrtl+D):143 身長を入力して下さい(終了はCrtl+D):122 身長を入力して下さい(終了はCrtl+D):176 身長を入力して下さい(終了はCrtl+D):^D 体重を入力して下さい(終了はCrtl+D):78 体重を入力して下さい(終了はCrtl+D):90 体重を入力して下さい(終了はCrtl+D):25 体重を入力して下さい(終了はCrtl+D):52 体重を入力して下さい(終了はCrtl+D):88 体重を入力して下さい(終了はCrtl+D):50 体重を入力して下さい(終了はCrtl+D):45 体重を入力して下さい(終了はCrtl+D):42 体重を入力して下さい(終了はCrtl+D):23 体重を入力して下さい(終了はCrtl+D):69 体重を入力して下さい(終了はCrtl+D):^D 身長の平均は 159.40cm 体重の平均は 56.20kg BMIの平均は 22.12 d、もとにしたプログラムからの変更点 授業のプログラムをもとに作成した。 また前々回の自分のレポート課題のプログラムも参考にした。 ・変数、関数、引数の変更 ・身長だけでなく、体重、BMIの平均をだした。 e、考察 bc -lで確かめた。 pan{c110106}% bc -l [~/Ruby] (165+140+136+155)/4 149.00000000000000000000 (56+45+38+50)/4 47.25000000000000000000 47.25/(1.49*1.49) 21.28282509796855997477 pan{c110106}% bc -l [~/Ruby] (170+190+135+165+178+160+155+143+122+176)/10 159.40000000000000000000 (78+90+25+52+88+50+45+42+23+69)/10 56.20000000000000000000 56.2/(1.594*1.594) 22.11870423750293210581 となり、どちらも計算があっているので、 このプログラムは正しいといえる。 B、 a、プログラムの設定 選択肢を選んでもらい、それによって エンディングが変化する育成ゲーム的プログラム b、プログラム #!/usr/koeki/bin/ruby def sound(nk) # 関数は sound 引数は nk とする nk.times do # .times do で繰り返し print("にょき\t") # 行う操作 end # times do に対する end print("\n") sleep(0.5) # 0.5 秒待つ end # def に対する end def message(name) # 関数は message 引数は name とする STDERR.printf("\n%sを育てよう!!\n", name) STDERR.print("\n今日はなにをしようかな?\n" ) STDERR.print("[1]\t水をあげる\n") STDERR.print("[2]\t日光にあてる\n") STDERR.print("[3]\t話し掛ける\n") end # def に対する end def nyoki(day,talk) # 関数は nyoki 引数は day,talk とす a = 4 * day - talk printf("=====%d日目=====終了=====\n",day) a end # def に対する end print("種を拾いました。\n") print("\n家に持ち帰って植えてみよう!\n") STDERR.printf("名前をつけてあげよう!:") name = gets.chomp if name == "" # if 文で入力がなかった場合 name = "ハイジ" # 行う操作 end # if に対する end printf("%sという名前になった。\n",name) # 表示 happy = 1 # しあわせ度 smile = 1 # 元気度 day = 0 # 日付 while true # 繰り返し message(name) ans = gets.to_i # 答えの入力 sound(ans) happy += day * ans smile += nyoki(day,ans) if happy > 4 # if 文でしあわせ度が4より大きい場合 break # 繰り返しを抜ける end # if に対する end if smile > 4 # if 文で元気度が4より大きい場合 break # 繰り返しを抜ける end # if に対する end day += 1 end # while true に対する end sound(smile) printf("\n\n%sは", name) if smile > 8 # if 文で元気度が8より大きい場合 print("綺麗な花を咲かせました!\n") elsif smile <= 5 # 元気度が5以下だった場合 print("赤い実を実らせました!\n") else # その他の場合(5より大きく8より小さかった場合) print("しゃべるようになりました!\n") end # if に対する end c、実行結果 pan{c110106}% ./def_rollplaying_a.rb [~/Ruby] 種を拾いました。 家に持ち帰って植えてみよう! 名前をつけてあげよう!: ハイジという名前になった。 ハイジを育てよう!! 今日はなにをしようかな? [1] 水をあげる [2] 日光にあてる [3] 話し掛ける 1 にょき =====0日目=====終了===== ハイジを育てよう!! 今日はなにをしようかな? [1] 水をあげる [2] 日光にあてる [3] 話し掛ける 1 にょき =====1日目=====終了===== ハイジを育てよう!! 今日はなにをしようかな? [1] 水をあげる [2] 日光にあてる [3] 話し掛ける 1 にょき ハイジを育てよう!! 今日はなにをしようかな? [1] 水をあげる [2] 日光にあてる [3] 話し掛ける 1 にょき =====2日目=====終了===== にょき にょき にょき にょき にょき にょき にょき にょき にょき にょき ハイジは綺麗な花を咲かせました! pan{c110106}% ./def_rollplaying_a.rb [~/Ruby] 種を拾いました。 家に持ち帰って植えてみよう! 名前をつけてあげよう!: ハイジという名前になった。 ハイジを育てよう!! 今日はなにをしようかな? [1] 水をあげる [2] 日光にあてる [3] 話し掛ける 2 にょき にょき =====0日目=====終了===== ハイジを育てよう!! 今日はなにをしようかな? [1] 水をあげる [2] 日光にあてる [3] 話し掛ける 2 にょき にょき =====1日目=====終了===== ハイジを育てよう!! 今日はなにをしようかな? [1] 水をあげる [2] 日光にあてる [3] 話し掛ける 2 にょき にょき =====2日目=====終了===== にょき にょき にょき にょき にょき にょき にょき ハイジはしゃべるようになりました! an{c110106}% ./def_rollplaying_a.rb [~/Ruby] 種を拾いました。 家に持ち帰って植えてみよう! 名前をつけてあげよう!: ハイジという名前になった。 ハイジを育てよう!! 今日はなにをしようかな? [1] 水をあげる [2] 日光にあてる [3] 話し掛ける 3 にょき にょき にょき =====0日目=====終了===== ハイジを育てよう!! 今日はなにをしようかな? [1] 水をあげる [2] 日光にあてる [3] 話し掛ける 3 にょき にょき にょき =====1日目=====終了===== ハイジを育てよう!! 今日はなにをしようかな? [1] 水をあげる [2] 日光にあてる [3] 話し掛ける 3 にょき にょき にょき =====2日目=====終了===== にょき にょき にょき にょき ハイジは赤い実を実らせました! pan{SATO Chika}% ./def_rollplaying_a.rb [~/Ruby] 種を拾いました。 家に持ち帰って植えてみよう! 名前をつけてあげよう!: ハイジという名前になった。 ハイジを育てよう!! 今日はなにをしようかな? [1] 水をあげる [2] 日光にあてる [3] 話し掛ける 1 にょき =====0日目=====終了===== ハイジを育てよう!! 今日はなにをしようかな? [1] 水をあげる [2] 日光にあてる [3] 話し掛ける ハイジを育てよう!! 今日はなにをしようかな? [1] 水をあげる [2] 日光にあてる [3] 話し掛ける 2 にょき にょき =====1日目=====終了===== ハイジを育てよう!! 今日はなにをしようかな? [1] 水をあげる [2] 日光にあてる [3] 話し掛ける 3 にょき にょき にょき =====2日目=====終了===== にょき にょき にょき にょき にょき にょき にょき ハイジはしゃべるようになりました! d、もとにしたプログラムからの変更点 授業で使ったプログラムをもとに作成した ・関数、引数、変数の変更 ・内容の変更 e、考察 bc ーlで確かめた。 ●1だけを選択した場合 pan{c110106}% bc -l [~/Ruby] 4*0-1 -1 4*1-1 3 4*2-1 7 -1+3+7 9 8より大きいので正しい。 ●2だけを選択した場合 pan{c110106}% bc -l [~/Ruby] 4*0-2 -2 4*1-2 2 4*2-2 6 -2+2+6 6 5より大きく8より小さいので正しい。 ●3だけを選択した場合 pan{c110106}% bc -l [~/Ruby] 4*0-3 -3 4*1-3 1 4*2-3 5 -3+1+5 3 5以下なので正しい。 ●ランダム(選択:1、2、3) pan{c110106}% bc -l [~/Ruby] 4*0-1 -1 4*1-2 2 4*2-3 5 -1+2+5 6 5より大きく8より小さいので正しい。 それぞれ結果に正しく表示されているので このプログラムは正しいといえる。 3、感想 育成ゲーム、シュミレーション、RPGといったゲームは、今回のプログラムを応 用すればできると思った。今回は簡単なものであったが、より複雑にしていけば自分でもそれなりのゲームができだろうと思った。 4、参考文献:ウェブページ 西村 まどか 基礎プログラミングII 第5回 「何度も呼び出そう」 http://roy/~madoka/2011/r2/05/ 第6回 「目的に応じて使ってみよう」 http://roy/~madoka/2011/r2/06/ 5、添付 Bのプログラムだけ添付します。