11 月 14 日 第 7 回レポート 「Method を自分で作ろう」 学籍番号:C106XXXX 氏名 :XXXXXXXX 語学クラス:英語 XX 系 :社会系 1 A ●考えた設定 喉が乾いたので、100円の飲み物を自動販売機で購入する。 持っている所持金は1000円。 所持金がなくなった時点で終了する。 def drink(kazu) 100 * kazu end def money(kazu) 1000 - 100 * kazu end STDERR.print("喉が乾いたよ〜\n") STDERR.print("自動販売機発見!!\n") sum = 10 # 飲み物の合計 i = 0 # 飲んだ回数 funds = 1000 # 所持金 printf("飲み物の合計: %5.1f [円]\n", drink(sum,i)) printf("残りの金額 : %6.0f [円]\n\n", money(funds,i)) while money(funds,i) > 10 printf("自動販売機で飲み物を%d買ったよ!!\n",i += 1) printf("飲み物の合計: %5.1f [本]\n", drink(sum,i)) printf("残りの金額: %6.0f [本]\n\n", money(funds,i)) end printf("所持金がなくなった!!!\n") printf("働こう!\n") ●参考文献 西村先生のHP ほたるの数と米の収穫量 http://roy/~madoka/2007/r2/05/05-08-firefly.html 2 A a. 考えた設定 kterm で入力した文字を、表示させるプログラム b. 作成したプログラムコード #!/usr/koeki/bin/ruby if ARGV[0] == nil STDERR.print("文字を入力して下さい。\n") exit(1) end n = 0 answer = Array.new while true if ARGV[n] == nil break else answer[n] = ARGV[n] n += 1 end end number = 0 #while n > number # if number == 0 # printf(" %s",answer[number]) # else # printf(" %s",answer[number]) # end number += 1 #end #print("\n") i = 0 n.times do printf("%s",answer[i]) i += 1 end print("\n\n") c. もとにしたプログラムからの変更点 先週、自分で作ったプログラム multi2.rb に phonecall.rb のプログラムを参考に 5.times do → n.times do の変数を変更した。 d. プログラムを実行した結果画面 ●コマンドラインにより、入力した場合 irsv{c106145}% ./onephrase.rb こ が ら し [~/Ruby] こがらし ●コマンドラインで、入力しなかった場合 irsv{c106145}% ./onephrase.rb [~/Ruby] 文字を入力して下さい。 e. 導き出された結果の考察 プログラムで作成したとおりに、実行された。 f. 参考文献 西村先生のHP 電話番号サービス http://roy/~madoka/2007/r2/07/07-02-times.html B a. 考えた設定 ルビ緒が転んだ。 ユーザーの治療によって、ルビ緒の痛みの度合いが異なるプログラム。 b. 作成したプログラムコード #!/usr/koeki/bin/ruby def hurt(ache) ache.times do print("いたっっ\t") end print("\n") sleep(0.7) end def treatment(cure) STDERR.print("[1]\t消毒をする。\n") STDERR.print("[2]\t包帯をまく。\n") STDERR.print("[3]\t薬を塗る。\n") end def fall(pain,remedy) p x = 5 * pain - remedy return x end printf("ルビ緒が転んだよ!!\n") printf("治療をしてあげて下さい。\n") sleep 2 heal = 1 treat = 1 day = 0 #printf("よく鳴くと大きくなるよ\n") STDERR.printf("どこが痛いの?: ") cure = gets.chomp printf("%sが痛い!!\n",cure) while true hurt(heal) treatment(cure) answer = gets.chomp!.to_i heal += day * answer p treat += fall(day,answer) if heal > 5 break end if treat > 5 break end hurt(answer) day += 1 end hurt(treat) # 最終段階の体重が鳴き声になる i = 0 while i < 1 printf("%c[%dm \n",0x1b,36+i) i += 1 end if treat > 9 puts "-" * 79 printf("%sがしみるよ〜!!\n",cure,0x1b,36+i) puts "-" * 79 elsif treat <= 5 puts "☆" * 10 printf("%sはよくなってきたみたい☆\n",cure,0x1b,36+i) puts "☆" * 10 else puts "+" * 79 printf("%sが痛いよ〜!!\n",cure,0x1b,36+i) puts "+" * 79 end c. もとにしたプログラムからの変更点 rubiocci.rb を参考に変数を変更した。 puts " " の中を、それぞれの痛みで変更した。 また、最後の表示される文章に色をつけることで、プログラムを見やすくした。 d. プログラムを実行した結果画面 ◯ その1 irsv{c106145}% ./method.rb [~/Ruby] ルビ緒が転んだよ!! 治療をしてあげて下さい。 どこが痛いの?: 腕 腕が痛い!! いたっっ [1] 消毒をする。 [2] 包帯をまく。 [3] 薬を塗る。 1 -1 0 いたっっ いたっっ [1] 消毒をする。 [2] 包帯をまく。 [3] 薬を塗る。 1 4 4 いたっっ いたっっ いたっっ [1] 消毒をする。 [2] 包帯をまく。 [3] 薬を塗る。 1 9 13 いたっっ いたっっ いたっっ いたっっ いたっっいたっっ いたっっ いたっっ いたっっ いたっっいたっっ いたっっ いたっっ ------------------------------------------------------------------------------- 腕がしみるよ〜!! ------------------------------------------------------------------------------- ◯ その2 irsv{c106145}% ./method.rb [~/Ruby] ルビ緒が転んだよ!! 治療をしてあげて下さい。 どこが痛いの?: 腕 腕が痛い!! いたっっ [1] 消毒をする。 [2] 包帯をまく。 [3] 薬を塗る。 2 -2 -1 いたっっ いたっっ いたっっ [1] 消毒をする。 [2] 包帯をまく。 [3] 薬を塗る。 3 2 1 いたっっ いたっっ いたっっ いたっっ いたっっ いたっっ いたっっ [1] 消毒をする。 [2] 包帯をまく。 [3] 薬を塗る。 3 7 8 いたっっ いたっっ いたっっ いたっっ いたっっいたっっ いたっっ いたっっ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 腕が痛いよ〜!! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ e. 導き出された結果の考察 プログラムで作成した通りに実行された。 色をつけると、綺麗に仕上がると思った。 f. 参考文献 西村先生のHP るびおっち http://roy/~madoka/2007/r2/07/07-11-rubiocci.html 以前、自分で作成したプログラム king.rb C a. 考えた設定 1 - 2 + 3 - ...と入力した数値までの整数の和を求めるプログラム。 b. 作成したプログラムコード #!/usr/koeki/bin/ruby if ARGV[0] == nil STDERR.print("整数の和を求めます。\n") STDERR.print("整数を入力して下さい。\n") exit(1) end n = 0 i = ARGV[0].to_i sum1 = 0 sum2 = 0 for number in 1 .. i result = number % 2 # iを2で割った余り if number == 1 printf(" %d",number) # 入力した数値が1の場合、符号をつけない。 elsif result == 1 printf("+ %d",number) # 入力した数値の余りが1の場合、+をつける。 elsif result == 0 printf("- %d",number) # 入力した数値の余りが0の場合、−をつける。 end end 1.step(i, 2) do |odd| # 奇数の和 # printf("+ %d", odd) sum1 += odd end #print("\n") 2.step(i+1, 2) do |odd| # 偶数の和 # printf("- %d", odd) sum2 += odd end result = i % 2 while if result == 1 # 入力した数値の余りが1の場合 printf("\n= %d\n", sum2 - sum1) # 偶数 − 奇数 else result == 0 # 入力した数値の余りが0の場合 printf("\n= %d\n", sum1 - sum2) # 奇数 − 偶数 end end c. もとにしたプログラムからの変更点 西村先生のHP なわとびの数を参考に for jump in totaljump do → for number in 1 .. i と変数を変更し 1 〜 i とし、どの数が入力されても対応されるようにした。 また、工夫しだいでいろいろを参考に 奇数と偶数の変数をそれぞれ変更した。 d. プログラムを実行した結果画面 ● 10を入力した場合 irsv{c106145}% ./intsum.rb 10 [~/Ruby] 1- 2+ 3- 4+ 5- 6+ 7- 8+ 9- 10 = -5 ● 3を入力した場合 irsv{c106145}% ./intsum.rb 3 [~/Ruby] 1- 2+ 3 = 2 ● 何も入力しない場合 irsv{c106145}% ./intsum.rb [~/Ruby] 整数の和を求めます。 整数を入力して下さい。 e. 導き出された結果の考察 10 を入力した場合の確かめ irsv{c106145}% bc -l [~/Ruby] 1 - 2 + 3 - 4 + 5 - 6 + 7 - 8 + 9 - 10 -5 3 を入力した場合の確かめ irsv{c106145}% bc -l [~/Ruby] 1 - 2 + 3 2 計算は正しかった。 f. 参考文献 西村先生のHP 工夫しだいでいろいろ http://roy/~madoka/2007/r2/07/07-12-step-countdown.html なわとびの数 http://roy/~madoka/2007/r2/07/07-07-array-for.html 3 今回のレポートでは、奇数と偶数の数値を計算させるのが難しかった。 しかし、数値を入力するだけで計算してくれるので、便利だと思った。 今回のレポートでは、前回作ったプログラムを応用して作る ことが出来たので良かった。