Subject: #02 method From: c109075@e.koeki-u.ac.jp To: ruby-10-06@e.koeki-u.ac.jp Date: Fri, 08 Oct 2010 14:59:48 +0900 (JST) X-Mailer: Mew version 4.2 on Emacs 23.1 / Mule 6.0 (HANACHIRUSATO) 氏名:sz 学籍番号: C1090756 クラス: 英語4 1、どんな計算をするメソッドを作るか プレイヤーが、カラオケで歌った曲の平均点数を求めるメソッドを作る。また、カ ラオケ料金と食事代を合わせた額から値引きした額を差し引いて、最終的な支払額 を求めるメソッドを作る。 2、作成したプログラム #!/usr/koeki/bin/ruby def average(score) # scoreは数値がいっぱい入っている配列。averageは平均を求める関数 sum = 0.0 # 割り算すると実数が出るので、浮動小数点数にする for x in score sum += x end sum/score.length # lengthは、配列の長さを返す end points=[] # []は、空の配列 a=0 # aはpointsの添字 print "あなたは富士テレビの「そっくりものまね大会」という番組に抽選で出場することが決定しました!!\n" sleep(1.5) print"そこで、あなたは自分が歌う曲の練習をするために「カラのオケ」といういつも行くカラオケショップにやって来ました。今回の来店で100回目です。この店では分単位で使用料金が増えていき、食事は注文できます。ですが、料金計算は全て自分で計算するという面倒なシステムになっています。\n" sleep(5) print"今回は集中するために、あなたは1人でカラオケに来ています。それでは、練習スタートー! … … \n\n" while true print "さあ、今歌った曲の点数は何点でしたか? :" sleep(2.5) line=gets if line == nil break end points[a] = line.chomp!.to_f a += 1 end printf("\n\n平均点の結果発表〜〜!\nあなたが歌った曲の平均点は %d 点です\n", average(points)) # average(=points)は、入力された歌の点数(points)の平均点数を出す sleep(1) def karaoke(time,price,discount) # timeはルーム使用時間、priceは使用料金、discountは料金値引きを表す。karaokeはtimeとpriceとdiscountを用いて求められた最終的な料金を表す charge = time*3+price-discount charge.to_i end print "\n店員「閉店の時間となりましたのでお会計に移らせていただきます」\n" print "店員「何分間プレイしましたか? 」 (分):" t = gets.to_i # tとは、timeのこと。 print "店員「食事代にいくら使いましたか?」 (円):" p = gets.to_i # pとは、priceのこと。 print "店員「おめでとうございます。今回の来店で記念すべき100回目となりましたので、割り引きさせていただきます。いくら、割り引きしてほしいですか?」 (円):" d = gets.to_i # dとは、discountのこと。 x = t*3+p-d printf("\n支払の合計額は %d 円になります。またのご来店お待ちしております。\n",karaoke(t,p,d)) # プレイヤーが入力したt、p、dをchargeの式に代入して最終的な支払合計額を求める。 3、実行結果 pan{c109075}% ./karaoke.rb [~/Ruby] あなたは富士テレビの「そっくりものまね大会」という番組に抽選で出場することが決定しました!! そこで、あなたは自分が歌う曲の練習をするために「カラのオケ」といういつも行くカラオケショップにやって来ました。今回の来店で100回目です。この店では分単位で使用料金が増えていき、食事は注文できます。ですが、料金計算は全て自分で計算するという面倒なシステムになっています。 今回は集中するために、あなたは1人でカラオケに来ています。それでは、練習スタートー! … … さあ、今歌った曲の点数は何点でしたか? :78 さあ、今歌った曲の点数は何点でしたか? :34 さあ、今歌った曲の点数は何点でしたか? :90 さあ、今歌った曲の点数は何点でしたか? :51 さあ、今歌った曲の点数は何点でしたか? :5 さあ、今歌った曲の点数は何点でしたか? :^D 平均点の結果発表〜〜! あなたが歌った曲の平均点は 51 点です 店員「閉店の時間となりましたのでお会計に移らせていただきます」 店員「何分間プレイしましたか? 」 (分):120 店員「食事代にいくら使いましたか?」 (円):1000 店員「おめでとうございます。今回の来店で記念すべき100回目となりましたので、割り引きさせていただきます。いくら、割り引きしてほしいですか?」 (円):300 支払の合計額は 1060 円になります。またのご来店お待ちしております。 4、プログラムの説明 * def average(score) scoreは数値をたくさん入れている配列。関数averageで全点数の平均を求める。 defはメソッドを定義するときに用いられ、たとえばdef f(x)となっていれば、こ れは「メソッドfを呼ぶときには引く数を1つだけつけなさい」ということを表し ている。引数とはxに与える変数のことをいう。その後、メソッド名(引数)とすれ ばメソッドを参照することができる。 * points[a] = line.chomp!.to_f lineでその行の点数を読み取り、chomp!で改行を切り取る。割り算をするときに、 少数点以下が出るのでto_fにする。 *def karaoke(time,price,discount) これは、「メソッドkaraokeを呼び出すときには引数を3つつけなさい」というこ とを意味している。3つの引数とは、time、price、discountのことである。defで メソッドを定義する。 *charge.to_i chargeに代入されたtime*3+price-discountという式を読みこむ。読みこまれた数 値が整数の場合に計算する。 *printf("\n支払の合計額は %d 円になります。またのご来店お待ちしております。\n",karaoke(t,p,d)) %dにはchargeによって求められた数値が入る。karaoke(t,p,d)というメソッド定 義がchargeにある式を参照することにより支払合計額が求められる。 5、感想 今回の授業で「def」という新しいメソッドを習って、使い方は関数に似ていて自 作の式と変数を当てはめて計算する時に用いられることが分かった。また、この 「def」というメソッドは数学はもちろんのこと経営や統計などでも用いることが できるためとても重要で便利なメソッドだと思った。一方で、今回のプログラム に関しては、自分では納得のいくものが作れたと思う。配列も利用しながら作成 することができ良かった。作った式は簡単なものだったが変数を3つ作れたのでま あまあ良かったと思う。内容も少しストーリー風にしておもしろく作れた。だが、 あまり実用的なものにはならなかったので、今度は実用性のあるプログラムに挑 戦してみたい。