11 月 14 日 第 7 回レポート 「Method を自分で作ろう」 学籍番号:c106XXXX 氏名:XXXXXXXX 語学クラス:英語 XX 系:環境系 1. 筆記問題 A. def kyaku(sina) for 0..sina.length #品を出す end end def mise(momey) #お金を支払う end i = 0 while i < 6 kyaku(maney) sina(i) i += 1 end print("買い物にいって、%d 品の商品を買ったよ", i) 2. 以下のプログラムについて、できる範囲まで提出せよ。 A.onephrase.rb a. 考えた設定 好きなキャラクターを入力してもらうようなプログラム。文字列をつなげて表示 させるように考えた。 b. 作成したプログラムコードそのもの #!/usr/koeki/bin/ruby if ARGV[0|1] == nil STDERR.print("あなたの好きなキャラクターを入力して下さい♪♪\n") STDERR.print("例 : スティッチ\n") exit(1) end n = 0 kyara = Array.new while true if ARGV[n] == nil then break else kyara[n] = ARGV[n] n += 1 end end print("あなたの好きなキャラクターは…!?\n") sleep 2 i = 0 n.times do printf("%s",kyara[i]) #printf("%sです☆\n",kyara) sleep (1) #print("人気ですよね♪♪\n") i += 1 end print("です☆☆\n") print("人気ですよね♪♪\n") print("これで質問を終わります\n") print("ちゃんっちゃんっ☆″″\n") c. もとにしたプログラムからの変更点 times do - endで同じことを繰り返す。 print文の変更。 while trueの追加。 d. プログラムを実行した結果画面 irsv{c106048}% ./onephrase.rb ミ ニ ー [~/Ruby] あなたの好きなキャラクターは…!? ミニーです☆☆ 人気ですよね♪♪ これで質問を終わります ちゃんっちゃんっ☆″″ e. 導き出された結果の考察 一文字事読みこんでいることが理解できた。 f. 参考文献 西村まどか先生のHP、第7回:目的に応じて使ってみよう "http://roy/~madoka/2007/r2/07/index.html"より B.●ikusei。rbのプログラム● a. 考えた設定 犬の育成プログラムを作成したいと考えた。 defを2回使い、次のステージに進めたりできるように設定を進めた。 b. 作成したプログラムコードそのもの #!/usr/koeki/bin/ruby def wan(ct) ct.times do print("ワンっ☆ \t") end print("\n") sleep(0.5) end def kotoba(name) # 値を返さない STDERR.print("[1]\t餌をあげる?\n") STDERR.print("[2]\tおもちゃをあげる?\n") STDERR.print("[3]\t散歩をする?\n") STDERR.print("[4]\tお昼ねする?\n") end def kotoba2(name) #値を返さない STDERR.print("[1]\tドッグカフェに行く?\n") STDERR.print("[2]\t頭を撫でてあげる?\n") STDERR.print("[3]\tトリミングをしてもらう?\n") STDERR.print("[4]\tしつけをする?\n") end printf("ワンちゃんを拾った☆\n") STDERR.printf("どんな名前にするの?") name = gets.chomp if name == "" then srand namae = rand(5) #乱数を使い名前を5つのパターンでてくるようにする dog = ["クイール","ラム","ポポ","エリ","ジョニーデップ"] name = dog[namae] end printf("%sという名前ね♪\n",name) happy = 1 # しあわせ度 weight = 2 # 体重 day = 1 # 育てた日付 situke = 1 #しつけ love = 1 #可愛さ while true wan(happy) #happyの数だけwanと泣く printf("どうする??\n") if day % 3 == 2 then kotoba2(name) siiku = gets.chomp!.to_i if siiku == 1 #def kotoba2(name)の[1]の時の条件 happy += 2 #happyが2増える weight += 3 #weightが3増える love -= 1 #loveが1減る elsif siiku == 2 #def kotoba2(name)の[2]の時の条件 happy += 2 #happyが2増える love += 3 #loveが3増える elsif siiku == 3 #def kotoba2(name)の[3]の時の条件 happy += 2 #happyが2増える weight -= 1 #weightが3増える love += 3 #loveが3増える elsif siiku == 4 #def kotoba2(name)の[4]の時の条件 situke += 4 #situkeが4増える end else kotoba(name) siiku = gets.chomp!.to_i if siiku == 1 #def kotoba(name)の[1]の時の条件 happy += 2 #happyが2増える weight += 3 #weightが3増える love += 2 #loveが2増える elsif siiku == 2 #def kotoba(name)の[2]の時の条件 happy += 2 #happyが2増える love += 1 #loveが1減る elsif siiku == 3 #def kotoba(name)の[3]の時の条件 happy += 1 #happyが1増える weight -= 3 #weightが3増える situke += 1 #situkeが1増える elsif siiku == 4 #def kotoba(name)の[4]の時の条件 happy += 2 #happyが2増える weight += 1 #weightが1増える end end printf("育成 %d日目 \n",day) #育成何日目か表示させる printf("可愛さ %d\n",love) #可愛さの度数を表示させる printf("しつけ %d \n",situke) #しつけの度数を表示させる printf("体重 %d \n",weight) #体重の度数を表示させる printf("幸せ度 %d\n",happy) #幸せの度数を表示させる if happy > 8 # happy > 8 になったら終了 wan(happy) break elsif weight > 7 #weight > 7 になったら終了 wan(weight) break elsif situke > 9 #situke > 9 になったら終了 wan(situke) break elsif love > 5 #love > 5 になったら終了 wan(love) break elsif weight <= 0 #weight <= 0 になったら終了 break elsif day == 7 #day == 7 になったら強制的に終了 wan(day) break end wan(siiku) day += 1 end 5.downto(1) do |start| #カウントダウン printf("%d ワン☆\n", start) sleep(1) end if situke > 8 printf("%sは介助犬になったよ☆\n",name) system "banner 'VERRY GOOD'" elsif weight > 6 printf("%sはメタボリック犬になったょ↓↓\n",name) system "banner 'METABO!'" elsif love > 5 printf("%sはポメラニアンみたいに可愛くなったょ♪\n",name) system "banner 'LOVERY'" elsif weight <= 0 printf("%sは力尽きちゃった…(; o ;)\n",name) system "banner 'DAD!'" elsif happy > 4 printf("%sはゴールデンレトリバーみたいに毛並みが綺麗になったよ☆\n",name) system "banner 'BEAUTIFUL'" elsif love <= 3 printf("%sはヤンキー犬になっちゃったー!!\n",name) system "banner 'YANKII!'" else printf("%sは我が家の番犬になりました☆\n",name) system "banner 'EXCELLENT!'" end c. もとにしたプログラムからの変更点 methodのdownto-endを追加し繰り返しのことをおこなうように変更した。 bannerの追加で文字を大きく出させるように変更した。 変数を2つ以上使った。 d. プログラムを実行した結果画面 ●犬が死んだバージョン● irsv{c106048}% ./ikusei.rb [~/Ruby] ワンちゃんを拾った☆ どんな名前にするの? エリという名前ね♪ ワンっ☆ どうする?? [1] 餌をあげる? [2] おもちゃをあげる? [3] 散歩をする? [4] お昼ねする? 3 育成 1日目 可愛さ 1 しつけ 2 体重 -1 幸せ度 2 5 ワン☆ 4 ワン☆ 3 ワン☆ 2 ワン☆ 1 ワン☆ エリは力尽きちゃった…(; o ;) ###### # ###### ### # # # # # # ### # # # # # # ### # # # # # # # # # ####### # # # # # # # # ### ###### # # ###### ### ●犬が綺麗になったバージョン● irsv{c106048}% ./ikusei.rb [~/Ruby] ワンちゃんを拾った☆ どんな名前にするの? ジョニーデップという名前ね♪ ワンっ☆ どうする?? [1] 餌をあげる? [2] おもちゃをあげる? [3] 散歩をする? [4] お昼ねする? 2 育成 1日目 可愛さ 2 しつけ 1 体重 2 幸せ度 3 ワンっ☆ ワンっ☆ ワンっ☆ ワンっ☆ ワンっ☆ どうする?? [1] ドッグカフェに行く? [2] 頭を撫でてあげる? [3] トリミングをしてもらう? [4] しつけをする? 1 育成 2日目 可愛さ 1 しつけ 1 体重 5 幸せ度 5 ワンっ☆ ワンっ☆ ワンっ☆ ワンっ☆ ワンっ☆ ワンっ☆ どうする?? [1] 餌をあげる? [2] おもちゃをあげる? [3] 散歩をする? [4] お昼ねする? 4 育成 3日目 可愛さ 1 しつけ 1 体重 6 幸せ度 7 ワンっ☆ ワンっ☆ ワンっ☆ ワンっ☆ ワンっ☆ ワンっ☆ ワンっ☆ ワンっ☆ ワンっ☆ ワンっ☆ ワンっ☆ どうする?? [1] 餌をあげる? [2] おもちゃをあげる? [3] 散歩をする? [4] お昼ねする? 2 育成 4日目 可愛さ 2 しつけ 1 体重 6 幸せ度 9 ワンっ☆ ワンっ☆ ワンっ☆ ワンっ☆ ワンっ☆ ワンっ☆ ワンっ☆ ワンっ☆ ワンっ☆ 5 ワン☆ 4 ワン☆ 3 ワン☆ 2 ワン☆ 1 ワン☆ ジョニーデップはゴールデンレトリバーみたいに毛並みが綺麗になったよ☆ ###### ####### # # # ####### ### ####### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ###### ##### # # # # # # ##### # # # # # # ####### # # # # # # # # # # # # # # # # # # # # # ###### ####### # # ##### # ### # ##### ####### e. 導き出された結果の考察 if文で設定した数値になると、そこでしっかり終了して、言葉がしっかりでてき たので、プログラムは正常に起動していると分かった。 print文をつけたし、育成の日にちや、幸せ度などを表示させることに成功した。 乱数を使用したら、毎回違う名前がでるようになった。 f. 参考文献 西村まどか先生のHP るびおっち "http://roy/~madoka/2007/r2/07/07-11-rubiocci.html"より C. intsum.rb。 a. 考えた設定 1 - 2 + 3 - ... とキーボード入力した整数までの和を求めてくれるプログラム を考えた。def-end とstepを使ってプログラムを作る。 b. 作成したプログラムコードそのもの #!/usr/koeki/bin/ruby def wa(t,h) return t + h #計算式を繰り返す end if ARGV[0] == nil STDERR.print("あなたの好きな整数値を入力して下さい。\n") STDERR.print("例 : 55\n") exit(1) end print("求められた数値は…\n") su = ARGV[0].to_i #to_i で整数値 i = 0 #変数の初期化 sum = 0 #変数の初期化 for number in 1..su syou = number % 2 if i == 0 printf(" %d",number) else if syou == 0 printf(" - %d", number) elsif syou == 1 printf(" + %d",number) end end sum = wa(sum,number) i += 1 end sum1 = 0 #変数の初期化 1.step(su, 2) do |kisuu| #stepで1からのスタート(奇数) # printf("+%d", kisuu) sum1 += kisuu end sum2 = 0 #変数の初期化 2.step(su, 2) do |kisuu| #stepで2からのスタート(偶数) # printf("-%d", kisuu) sum2 += kisuu end i += 1 printf("は %d です\n", sum1-sum2) #sum1-sum2の計算を行なう c. もとにしたプログラムからの変更点 stepを2つ使い、奇数計算と偶数計算を各自行なわせ、 最後に奇数から偶数を引いて答えを求めるように変更した。 d. プログラムを実行した結果画面 irsv{c106048}% ./intsum.rb 10 [~/Ruby] 求められた数値は… 1 - 2 + 3 - 4 + 5 - 6 + 7 - 8 + 9 - 10は -5 です ◯確かめ◯ irsv{c106048}% bc -l [~/Ruby] 1-2+3-4+5-6+7-8+9-10 -5 よって、正しい。 e. 導き出された結果の考察 stepを使い、計算式が間違っていないことがわかった。 f. 参考文献 西村まどか先生のHP "http://roy/~madoka/2007/r2/07/07-06-step.html"より 3. 感想 今回はルビオッチのような育成ゲームを作成することができました。今日習った downto do -- end を取り入れたり、defを取り入れて作成していきました。Bの 問題を作成していくうちに、どんどんプラスしていきたくなっていき、いろいろ 取り入れてみました。コマンドライン入力をわすれかけていたので前回自分で作 成したプログラムを参考にし作成できました。来週も頑張ります。