第 6 回 目的に応じて使ってみよう レポート課題 氏名:樋口貴士 学籍番号:C1101715 語学クラス:中国語3 コース(系):地域共創コース 1.筆記問題 A. 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] alphabet[18]は普通に考えると18番目のアルファベットとなり以下の通り a b c d e f g h i j k l m n o p q r 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 alphabet[18] = r となる。 しかし、この alphabet は配列である。 よって、配列が0から始まる。 つまり、a = 0 となり a b c d e f g h i j k l m n o p q r s 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 alphabet[18] = s である。 ・alphabet[40] alphabet[40]は a = 0 から数えても、以下のように最後に z = 25 で終わる。 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 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 つまり、z = 25が最後となり40番目の alphabet[40] のデータはないので、 alphabet[40] = nil (空の情報を意味する。)となる。 正しいか確認するためにプログラムを作成した。 ・作成したプログラム(alphabet.rb) #!/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"] printf("配列の18番目は%s\n",alphabet[18]) printf("配列の40番目は%s\n",alphabet[40]) ・実行結果 pan{c110171}% ./alphabet.rb [~/Ruby] alphabetの配列の18番目はs alphabetの配列の40番目は となる。 よって18番目はsとなり、alphabet[18] = s が証明され 40番目は何も表示されないので、alphabet[40] = nil(空の情報)となることが証 明される。 2.プログラム問題 A プログラム(def_statistic.rb) a.考えた設定 1日に歩く歩数の平均を求めるプログラムを作成した。 b.作成したプログラム #!/usr/koeki/bin/ruby def day(walk) # walk は入力した数値が入る配列。 total = 0.0 # 割り算をするので浮動小数点数にする。 for avg in walk #for avg in walk で walk の中の avg について total += avg # 平均を求めるために合計を求める end # for の終わり。 total / walk.length # 平均を求める計算式。 end # def の終わり。 hosuu = Array.new # 新しい配列 hosuu を作る。 while true # 繰り返しを意味する。 STDERR.print("\n1日に歩いた歩数を入力して下さい。(終了はCrtl+D)\n") STDERR.print("歩いた歩数は数字で入力してください。例 1000\n") line = gets #キーボードからの入力を読みこむ。 if line == nil # nil = 空の情報。 もし line がない場合は break # while の繰り返しから抜ける。 end # if の終わり。 hosuu << line.to_i # 配列にlineを小数に変換させ追加させる。 p hosuu # hosuu の代入された値を表示する。 end # while の終わり。 printf("\n1日に歩いた歩数の平均は %3.1f 歩です。\n", day(hosuu)) c.もとにしたプログラム 授業で作成した def_ary_movie.rb をもとに 変数 計算式 STDERR を変更して作成した。 d.実行結果 1日に歩いた歩数を数字で入力して下さい。例 1000(終了はCrtl+D) 1000 [1000] 1日に歩いた歩数を数字で入力して下さい。例 1000(終了はCrtl+D) 2000 [1000, 2000] 1日に歩いた歩数を数字で入力して下さい。例 1000(終了はCrtl+D) 3000 [1000, 2000, 3000] 1日に歩いた歩数を数字で入力して下さい。例 1000(終了はCrtl+D) ^D 1日に歩いた歩数の平均は 2000.0 歩です。 e.考察 計算した答えが正しいかを確かめるために bc -l を使い確認した。 pan{c110171}% bc -l [~/Ruby] (1000+2000+3000)/3 2000.00000000000000000000 となるので 2000 という結果は正しく このプログラムは正しく動作していることがわかった。 B.プログラム(def_rollplaying_a.rb ) a.考えた設定 プログラムを実行させ 名前 を決めて、選択しによって結果がかわる プログラムを作成した。 b.作成したプログラム #!/usr/koeki/bin/ruby def kigou(maru) # メソッドの設定。 maru.times do print("◎") end print("\n\n") # 改行。 end # def の終わり。 def message(name) STDERR.printf("%sはお客さんを楽しくさせよう。: \n", name) STDERR.print("[1]\t酒を飲ませる?\n") STDERR.print("[2]\t煙草の火とつける?\n") STDERR.print("[3]\t会話をする?\n") end # def の終わり。 printf("あなたはNo1を目指すキャバ嬢です。\n") STDERR.printf("あなたの名前は?") name = gets.chomp if name == "" # もし 空白の場合は name = "るびお" # 名前を入力しないと るびお になる。 end # if の終わり。 printf("%s という名前ですね。\n" ,name) sleep 1 printf("\nついにこの日がきたのね!\nNo1キャバ嬢になるこの日が!!\n") shirushi = 0 # ◎の数。 koukan = 0 # 好感を表す値。 human = 1 # 接客した数。 def koukando(human,enjoy) #メソッドの設定。 x = 4 * human - enjoy printf("%d日目\n",human+1) x end # def の終わり。 while true # 繰り返し kigou(koukan) # 好感を表示させる。 message(name) # 質問の選択肢を表示させる。 ans = gets.chomp.to_i # 文字を ans に入れる。 koukan += human * ans # 好感を足していく。 printf("%d 人目\n",human) printf("好感度 : %d\n" ,koukan) human += 1 # 人の数を1人ずつ増やす意味。 if koukan > 10 # koukan が10を超えた場合 break # 繰り返しから抜ける。 end # if の終わり。 end # while の終わり。 kigou(koukan) # 最終段階の好感が記号(◎)になる。 printf("%sは", name) if koukan >= 18 # もし koukan が18以上の場合は print("見事伝説のNo1キャバ嬢になったわ\n") elsif koukan >= 13 # もし koukan が13以上の場合は print("No1になるまで、もう少しのようね\n") else # もし それ以外の場合は print("まだまだ力不足だったようね\n") end # if の終わり。 c.もとにしたプログラム 授業で作成した def_rubiocci.rb を参考にプログラムを作成した。 d.実行結果 ・選択肢を全て 3 を選択した場合。 pan{c110171}% ./def_rollplaying_a.rb [~/Ruby] あなたはNo1を目指すキャバ嬢です。 あなたの名前は?るびこ るびこ という名前ですね。 ついにこの日がきたのね! No1キャバ嬢になるこの日が!! るびこはお客さんを楽しくさせよう。: [1] 酒を飲ませる? [2] 煙草の火とつける? [3] 会話をする? 3 1 人目 好感度 : 3 ◎◎◎ るびこはお客さんを楽しくさせよう。: [1] 酒を飲ませる? [2] 煙草の火とつける? [3] 会話をする? 3 2 人目 好感度 : 9 ◎◎◎◎◎◎◎◎◎ るびこはお客さんを楽しくさせよう。: [1] 酒を飲ませる? [2] 煙草の火とつける? [3] 会話をする? 3 3 人目 好感度 : 18 ◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎ るびこは見事伝説のNo1キャバ嬢になったわ ・選択肢を全て 2 を選択した場合。 るびこはお客さんを楽しくさせよう。: [1] 酒を飲ませる? [2] 煙草の火とつける? [3] 会話をする? 2 1 人目 好感度 : 2 ◎◎ るびこはお客さんを楽しくさせよう。: [1] 酒を飲ませる? [2] 煙草の火とつける? [3] 会話をする? 2 2 人目 好感度 : 6 ◎◎◎◎◎◎ るびこはお客さんを楽しくさせよう。: [1] 酒を飲ませる? [2] 煙草の火とつける? [3] 会話をする? 2 3 人目 好感度 : 12 ◎◎◎◎◎◎◎◎◎◎◎◎ るびこはまだまだ力不足だったようね ・選択肢を全て 1 を選択した場合。 るびこはお客さんを楽しくさせよう。: [1] 酒を飲ませる? [2] 煙草の火とつける? [3] 会話をする? 1 1 人目 好感度 : 1 ◎ るびこはお客さんを楽しくさせよう。: [1] 酒を飲ませる? [2] 煙草の火とつける? [3] 会話をする? 1 2 人目 好感度 : 3 ◎◎◎ るびこはお客さんを楽しくさせよう。: [1] 酒を飲ませる? [2] 煙草の火とつける? [3] 会話をする? 1 3 人目 好感度 : 6 ◎◎◎◎◎◎ るびこはお客さんを楽しくさせよう。: [1] 酒を飲ませる? [2] 煙草の火とつける? [3] 会話をする? 1 4 人目 好感度 : 10 ◎◎◎◎◎◎◎◎◎◎ るびこはお客さんを楽しくさせよう。: [1] 酒を飲ませる? [2] 煙草の火とつける? [3] 会話をする? 1 5 人目 好感度 : 15 ◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎ るびこはNo1になるまで、もう少しのようね ・名前に何も入力しなかった場合。 pan{c110171}% ./def_rollplaying_a.rb [~/Ruby] あなたはNo1を目指すキャバ嬢です。 あなたの名前は? るびお という名前ですね。 e.考察 プログラムの計算が正しいか bc -l を使い確かめてみた。 ・選択肢が全て 3 の場合。 pan{c110171}% bc -l 1*3 3 3+(3*2) 9 9+(3*3) 18 ・選択肢が全て 2 の場合。 pan{c110171}% bc -l 1*2 2 2+(2*2) 6 6+(2*3) 12 ・選択肢が全て 1の場合。 pan{c110171}% bc -l 1*1 1 1+(1*2) 3 3+(1*3) 6 6+(1*4) 10 10+(1*5) 15 となり、プログラムの結果と同じになるのでこのプログラムは正しいと言うこと が分かる。 3.感想 method の考え方を使っているのは RPG ゲームだと思う。 レベルやステータスによって、与えるダメージが変わったり 受けるダメージも変わる。また、敵の行動範囲も変わったりする。 4.参考文献 基礎プログラミング II 「第 5 回何度も呼び出そう」 http://roy/~madoka/2011/r2/05/ 基礎プログラミング II 「第 6 回目的に応じて使ってみよう」 http://roy/~madoka/2011/r2/06/ 著者 西村まどか 5.共同学習者 松田大輝 薮田大樹 渡辺龍 6.添付 alphabetを調べるプログラム alphabet.rb プログラム問題 A.def_statistic.rb B.def_rollplaying_a.rb を添付します。