講評: mymethod.rb を改造して、エラーが出たのはどのような 症状だったのか、mymethod_failed.rb みたいなものも 考察につけて、コードを公開して、英語を訳しておけば、 もう少し得点が高かったと思います。 --- 10 月 31日 第5回レポート 「Methodを自分で作ろう」 学籍番号 :C106XXXX 氏名 :XXXXXXXX 語学クラス:XX語XX 系 :環境系 1 A. 「サッカー選手とかけて、定員を超過した会社と解きます。」 「その心は?」 「どちらも蹴ります。」 「野球選手とかけて、全くわからない問題と解きます。」 「その心は?」 「どちらも投げます。」 B. → ある寒い冬にガクンは灯油を買いに行こうとした。しかし、ガソリンも 残り少なかったので一緒に補充しようと思った。よって勇敢にガクンは三 川のペ◯ラスへ灯油とガソリンを買いに行った。灯油1L78円、ガソリン 1L145円である。 ・ 78x + 145y もし現実的に想定して灯油2缶(36L)、ガソリン28Lであれば… 78 * (18 * 2) + 145 * 28 = 6868 ……たけぇよorz また、友達に灯油頼まれたとかで灯油が5缶、ガソリンは15Lでいいとすれ ば… 78 * (18 * 5) + 145 * 15 = 9195 もうこれは手数料も徴収だぜ! 確認計算 irsv{c106113}% bc -l [~] 78 * (18 * 2) + 145 * 28 6868 78 * (18 * 5) + 145 * 15 9195 → とある場所までバスと電車とタクシーを使った。スピードはバスは安全 運転だったので平均30km/h、電車は障害物がなくすんなり進んだので平均 80km/h、タクシーは微妙な運転だったので50km/hとする。 但し、乗り換えの時間等は常にドアが閉まる直前で滑べりこめる素晴ら しいプロフェッショナルだったので考えない。 ・ 30x + 80y + 50z ◯×会社に行くとして、バス20分、電車1時間、タクシー30分と すると、◯×会社までの距離はどのくらいか? 30 * 1 / 3 + 80 * 1 + 50 * 1 / 2 = 115 また、◯×大学に行くとして、バス30分、電車2時間かかるとすると 30 * 1 / 2 + 80 * 2 = 175 確認計算 irsv{c106113}% bc -l [~] 30 * 1 / 3 + 80 * 1 + 50 * 1 / 2 115.00000000000000000000 30 * 1 / 2 + 80 * 2 175.00000000000000000000 2 A. twoparam.rb a.考えた設定 → 1のBの灯油とガソリンのストーリ(?)のレジのようなものにした。 b.作成したプログラムコードそのもの #!/usr/koeki/bin/ruby def f (x) 78 * x #後に78 * xを計算させる。 end STDERR.print("灯油1L78円です。何L買いますか?(1缶は18L)\n") a = gets.chomp.to_i # xに当てはまる数値を入力。 printf("灯油 %d L( %d 缶)お買上げありがとうございます。\n", a, a / 18) #何缶買うかも出すように変更。 printf("灯油の合計金額は %d 円となります。続いて…\n", f(a)) def g (y) 145 * y #後に145 * yを計算させる。 end STDERR.print("ガソリンは1L145円です。何L詰めましたか?\n") b = gets.chomp.to_i # yに当てはまる数値を入力。 printf("ガソリン %d Lお買上げありがとうございます。\n", b) printf("ガソリンの合計金額は %d 円となります。\n",g(b)) print("お客様のお買上げ金額は…\n") printf("%d円となります。御利用ありがとうございました。\n", f(a) + g(b)) #f(a)+f(b)では計算結果がまともではなかったのでf(a)+g(b)に変更。 c.もとのプログラムからの変更点 → 授業でやったfunc.rbを改良した。 d.実行画面 irsv{c106113}% ./twoparam.rb [~/Ruby] 灯油1L78円です。何L買いますか?(1缶は18L) 36 灯油 36 L( 2 缶)お買上げありがとうございます。 灯油の合計金額は 2808 円となります。続いて… ガソリンは1L145円です。何L詰めましたか? 28 ガソリン 28 Lお買上げありがとうございます。 ガソリンの合計金額は 4060 円となります。 お客様のお買上げ金額は… 6868円となります。御利用ありがとうございました。 irsv{c106113}% ./twoparam.rb [~/Ruby] 灯油1L78円です。何L買いますか?(1缶は18L) 90 灯油 90 L( 5 缶)お買上げありがとうございます。 灯油の合計金額は 7020 円となります。続いて… ガソリンは1L145円です。何L詰めましたか? 15 ガソリン 15 Lお買上げありがとうございます。 ガソリンの合計金額は 2175 円となります。 お客様のお買上げ金額は… 9195円となります。御利用ありがとうございました。 e.結果の考察 → 上記と同じように計算したので確認済みである。 何缶買ったかなどを表示させるようにしてみた。 実際に使えそうなプログラムでありそうな気がする。 f.参考文献 〜 西村's HP 基礎プログラミングII 第5回 http://roy/~madoka/2007/r2/05/05-05-stderr.html B. mymethod.rb a.考えた設定 → 自分の考えていた設定は、初期値を自分で決定して、初期値入力 の確認文を流し、xの値を決めて、いわゆる単純なかけ算となるが 初期値を自分で決めたdefを使用するプログラムを制作しようとした。 b.プログラムコード #!/usr/koeki/bin/ruby STDERR.print("関数(初期値)を指定してください。\n") def f(x) a = gets.chomp.to_i # a の値を決定。 a * x end STDERR.print("関数の値を求めますYO。値をどうぞ!\n") x = gets.chomp.to_i # x の値を決定。 printf(" %d \n",f(x)) c.もとにしたプログラムからの変更点 → 仕組み的には最初のプログラムとほぼかわらない。 が、違う点は初期値を自分で設定するという作業の入った プログラムにしようとした。 d.プログラム実行した結果画面 irsv{c106113}% ./mymethod.rb [~/Ruby] 関数(初期値)を指定してください。 関数の値を求めますYO。値をどうぞ! 3 4 12 irsv{c106113}% ./mymethod.rb [~/Ruby] 関数(初期値)を指定してください。 関数の値を求めますYO。値をどうぞ! 4 5 20 e.結果の考察 → 今回、一応初期値を設定して、xを入力して、計算させるというのは できたことはできた。のだが、メッセージをどこで流すとかが色々試し てみたがエラー文が出てうまくいかなかった。 このプログラムをうまく作動させようと書き変えれば書き変えるほど エラーが出るのでどのようにすればいいかがわからなかったので途中で 終わってしまっている。 f. →最初のプログラムと同じ 3. 感想 → 今回は、謎解きが一番の難関だった気がしなくもない。 というか自分のは謎解きになっているのかどうかすらも怪しい。 また、プログラムのほうは、結果だす画面でf(x)+f(y)にすると 結果がf(y)+f(y)のようになってしまって一瞬焦った。 最初のプログラムのほうは自分的に簡単なプログラムではあるが 項目を複数とかにすると使えるのではないだろうかと思った。