第6回 基礎プログラミング II レポート課題 氏名 : 藤井 駿 学籍番号 : c1091307 語学クラス : 英語3 コース : 地域共創 1.筆記問題 A. 確かめるためにプログラムを作成してみた。 プログラムは次の通りである。 #!/usr/koeki/bin/ruby 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"] STDERR.print("何番目を調べますか? :") a = gets.chomp.to_i # 整数表示 # p a p alphabet[a] # 実行結果を表示 if a > 25 # 25以上の場合 printf("%d 番目は存在しません\n",a) else # その他の場合 printf("アルファベットの %d 番目は、「%s」です\n" ,a ,alphabet[a]) end 実行してみて alphabet[18] および alphabet[40]を確認すると、 pan{c109130}% ./alphabet_hikki.rb [~/Ruby] 何番目を調べますか? :18 "s" アルファベットの 18 番目は、「s」です pan{c109130}% ./alphabet_hikki.rb [~/Ruby] 何番目を調べますか? :40 nil 40 番目は存在しません となる。 40番目が存在しないのはアルファベットはそもそも26個しか無く、また配列 としては25個となるからである。 2.プログラム問題 A. a.考えた設定 ある野球チームの一人当りの平均打点数を求める。そして結果に応じてコメ ントを表示させる。 b.元にしたプログラム 授業のときの def_ary_movie.rb を参考に作成した。 変更したところは、変数を分かりやすくした。 また、結果に応じてコメントが表示できるようにした。 c.作成したプログラム #!/usr/koeki/bin/ruby def average(total) # total は数値がたくさんしまわれる配列 sum =0.0 # 0.0 にすることで浮動小数点数にできる for tokuten in total sum += tokuten end sum / total.length end points = Array.new # 配列 points を作成する print("ある野球チームの一人当りの平均打点数を表示します。\n") sleep 1.5 print("\n") # 改行文字 while true STDERR.print("打点数は何点ですか?(止めたいときはCtrl- d) :") line = gets if line == nil # 止めたいときは ctrl - d break end points << line.to_i end sleep 1.5 print("\n") # 改行文字 printf("チーム一人当りの平均打点数は %3.1f 点です\n" ,average(points)) print("\n") # 改行文字 print("あなたのチームの印象は・・・\n") sleep 1.3 if average(points) >= 100 # もし100点以上だったら print("重量打線だね!!\n") elsif average(points) >= 70 # もし70点以上だったら print("かなり打っているね\n") elsif average(points) >= 40 # もし40点以上だったら print("ちょっと打てていないね\n") else #それ以外 print("ものすごく貧打だね\n") end d.実行結果 pan{c109130}% ./def_statistic.rb [~/Ruby] ある野球チームの一人当りの平均打点数を表示します。 打点数は何点ですか?(止めたいときはCtrl- d) :67 打点数は何点ですか?(止めたいときはCtrl- d) :75 打点数は何点ですか?(止めたいときはCtrl- d) :94 打点数は何点ですか?(止めたいときはCtrl- d) :102 打点数は何点ですか?(止めたいときはCtrl- d) :83 打点数は何点ですか?(止めたいときはCtrl- d) :79 打点数は何点ですか?(止めたいときはCtrl- d) :63 打点数は何点ですか?(止めたいときはCtrl- d) :59 打点数は何点ですか?(止めたいときはCtrl- d) :60 打点数は何点ですか?(止めたいときはCtrl- d) :^D チーム一人当りの平均打点数は 75.8 点です あなたのチームの印象は・・・ かなり打っているね e.考察 bc -l で確かめてみると pan{c109130}% bc -l [~/Ruby] 67+75+94+102+83+79+63+59+60 682 682/9 75.77777777777777777777 quit となり小数第2位を四捨五入するので 75.8 となるから実行結果と一致する。 したがってプログラムは正常に作動したといえる。 実行結果に応じてコメントを表示させることを新しく取り入れた。 こうすることによって少しでも興味を持ってもらえるのではないだろうか。 B. a.考えた設定 method を使い、ファンサービスの種類に応じてエンディングが変わるプロ グラム b.元にしたプログラム 授業の際の def_rubiooci.rb を参考に作成した。 変更した点は、変数を適切なものにした。 c.作成したプログラム #!/usr/koeki/bin/ruby def shirushi(hoshi) hoshi.times do # 実行する print("☆") end print("\n\n") # 改行文字 end def message(name) STDERR.printf("%s はファンサービスをしようとした\n" ,name) STDERR.print("[1]\t握手をする?\n") STDERR.print("[2]\t写真を撮る?\n") STDERR.print("[3]\tサインをする?\n") end printf("あなたはスポーツ選手です。\n\n") STDERR.printf("あなたの名前は?") name = gets.chomp if name == "" name = "ジロウ" # 名前を決めなければジロウとなる。 end printf("%s という名前ですね。\n" ,name) sleep 1 printf("\n今日はファン感謝デーです。\nファンを喜ばせましょう!!\n") mezirushi = 0 # ☆の数 yorokobi = 0 # 印象の値 hito = 1 # ファンサービスした数 def inshou(hito,appeal) x = 4 * hito - appeal x end while true shirushi(yorokobi) # 印象を表示 message(name) # 質問の選択肢を表示 ans = gets.chomp.to_i yorokobi += hito * ans printf("%d 人目\n",hito) printf("好感度 : %d\n" ,yorokobi) print("---------5--------10--------15--------20\n") hito += 1 # 人の数を1人ずつ増やす if yorokobi > 10 # yorokobi が10を超えたら break # 終わり end end printf("%sは", name) if yorokobi >= 18 # もし yorokobi が18以上だったら print("ファンに印象が良い") elsif yorokobi >= 13 # もし yorokobi が13以上だったら print("ファンに普通だと") else # もしそれ以外だったら print("ファンに印象が悪いと") end print("思われました\n") d.実行結果 ◎ yorokobi が 18 の場合 pan{c109130}% ./def_rollplying_a.rb [~/Ruby] あなたはスポーツ選手です。 あなたの名前は?フジ フジ という名前ですね。 今日はファン感謝デーです。 ファンを喜ばせましょう!! フジ はファンサービスをしようとした [1] 握手をする? [2] 写真を撮る? [3] サインをする? 3 1 人目 好感度 : 3 ---------5--------10--------15--------20 ☆☆☆ フジ はファンサービスをしようとした [1] 握手をする? [2] 写真を撮る? [3] サインをする? 3 2 人目 好感度 : 9 ---------5--------10--------15--------20 ☆☆☆☆☆☆☆☆☆ フジ はファンサービスをしようとした [1] 握手をする? [2] 写真を撮る? [3] サインをする? 3 3 人目 好感度 : 18 ---------5--------10--------15--------20 フジはファンに印象が良い思われました ◎ yorokobi が 15 の場合 pan{c109130}% ./def_rollplying_a.rb [~/Ruby] あなたはスポーツ選手です。 あなたの名前は?フジ フジ という名前ですね。 今日はファン感謝デーです。 ファンを喜ばせましょう!! フジ はファンサービスをしようとした [1] 握手をする? [2] 写真を撮る? [3] サインをする? 1 1 人目 好感度 : 1 ---------5--------10--------15--------20 ☆ フジ はファンサービスをしようとした [1] 握手をする? [2] 写真を撮る? [3] サインをする? 1 2 人目 好感度 : 3 ---------5--------10--------15--------20 ☆☆☆ フジ はファンサービスをしようとした [1] 握手をする? [2] 写真を撮る? [3] サインをする? 1 3 人目 好感度 : 6 ---------5--------10--------15--------20 ☆☆☆☆☆☆ フジ はファンサービスをしようとした [1] 握手をする? [2] 写真を撮る? [3] サインをする? 1 4 人目 好感度 : 10 ---------5--------10--------15--------20 ☆☆☆☆☆☆☆☆☆☆ フジ はファンサービスをしようとした [1] 握手をする? [2] 写真を撮る? [3] サインをする? 1 5 人目 好感度 : 15 ---------5--------10--------15--------20 フジはファンに普通だと思われました ◎ yorokobi が 11の場合 pan{c109130}% ./def_rollplying_a.rb [~/Ruby] あなたはスポーツ選手です。 あなたの名前は?フジ フジ という名前ですね。 今日はファン感謝デーです。 ファンを喜ばせましょう!! フジ はファンサービスをしようとした [1] 握手をする? [2] 写真を撮る? [3] サインをする? 2 1 人目 好感度 : 2 ---------5--------10--------15--------20 ☆☆ フジ はファンサービスをしようとした [1] 握手をする? [2] 写真を撮る? [3] サインをする? 3 2 人目 好感度 : 8 ---------5--------10--------15--------20 ☆☆☆☆☆☆☆☆ フジ はファンサービスをしようとした [1] 握手をする? [2] 写真を撮る? [3] サインをする? 1 3 人目 好感度 : 11 ---------5--------10--------15--------20 フジはファンに印象が悪いと思われました e.考察 bc -l で確認すると ◎ yorokobi が 18 の場合 pan{c109130}% bc -l [~/Ruby] 1*3 3 3+(2*3) 9 9+(3*3) 18 quit となり、プログラム本体と一致したので、正常に作動しているといえる。 同様に yorokobi 15 と yorokobi 11 では、 ◎ yorokobi が 15 の場合 pan{c109130}% bc -l [~/Ruby] 1*1 1 1+(2*1) 3 3+(3*1) 6 6+(4*1) 10 10+(5*1) 15 quit ◎ yorokobi が 11の場合 pan{c109130}% bc -l [~/Ruby] 1*2 2 2+(2*3) 8 8+(3*1) 11 quit となるので、プログラムと一致した。ゆえに正常であるといえる。 3.感想 method の考え方を利用しているものは、育成ゲームだと思う。育成ゲーム は、プレーヤーによって育ちかたが変化するからである。 今回の課題は作るのに時間がかかったけれどなんとか良いものができたと 思う。このやり方を上手く使っていければさらに手のこんだプログラムが できるはずだ。 次回からも今まで以上のものを作れるように頑張っていきたいと思う。 4.参考文献等 ◎共同学習者 ・池田博哉 ・遠藤孝之