第 4 回 繰り返しは引っ張りだそう レポート課題 氏名:森桂太 学籍番号:c110190 語学クラス:中国語 コース(系):社会福士コース 1.筆記問題 A.なぞときを一題以上考えよ。 「完全犯罪 とかけて、負け続けのプロ野球選手 と解く」 「その心は?」 「どちらも 後 ・ 跡 がない 。」 「もうすぐ建設が終わる店 とかけて、 作文を一段落書き終えるところ と解く 」 「その心は?」 「どちらも そろそろ 開業 ・ 改行 するでしょう。」 B. 2 変数による数式の設定を 2 例書き出せ。また、それに対する数値を入れ、 解答を得よ。 ・ルビ緒はコンビニでおでんの玉子と糸蒟蒻を買って代金がいくらかかるか調べ た。玉子の値段は 1 個 80 円、糸蒟蒻の値段は 1 個 60 円である。 80 * x + 60 * y となる。 そこで、玉子3個、糸蒟蒻4個買うと、 80 * 3 + 60 * 4 = 480 となる。 pan{c110190}% bc -l [~/Ruby] 80 * 3 + 60 * 4 480 ・ルビ緒は自給自足の為家畜をブタとニワトリを買った。その代金がいくらか かるか調べた。ブタの値段は 1 頭 3000 円 、ニワトリ 1 羽 1500 円である。 3000 * x + 1500 * y となる。 そこで、ブタを 4 頭、ニワトリ 2 羽買うと、 3000 * 4 + 1500 * 2 = 15000 となる。 pan{c110190}% bc -l [~/Ruby] 3000 * 4 + 1500 *2 2.作成したプログラム A.上記の例を使ってもよい。変数が 2 つ以上定義されている def -- end を用 いた数値の計算を導く。 def shopping(orange, apple) orange * apple end STDERR.print("みかん何円ですか?: ") a = gets.to_i STDERR.print("いくつ買いましたか?: ") b = gets.to_i STDERR.print("りんご何円ですか?: ") a = gets.to_i STDERR.print("いくつ買いましたか?: ") b = gets.to_i printf("合計 %d 円となります。\n",shopping(a,b)) B.変数のうち 1 つを固定した計算を考えてみる $KCODE = 'e' item = Hash.new("非取扱商品") item["りんご"] = 20 STDERR.print("購入する品物:") customer = gets.chomp if item.key?(customer) == false printf("%s はありません\n", customer) printf("%s は %s です。\n",customer,item[customer] ) else STDERR.print("購入する個数:") weight = gets.chomp.to_i price = item["りんご"] * weight printf("%s\t(%d 個)\t %d 円\n", customer,weight,price ) end 3.もとにしたプログラムからの変更点 A.のプログラムは、先輩のプログラムを参考にし、printf("") の項目を変え、 また二つの品物をそれぞれの個数分の値段を合計し表示させるよう書き変えました。 B.は以前授業で作った item = Hash ,item[""] から STDERR.print("") で配列 にある品物の重量、値段を求めるプログラムを商品の名前を入力し、個数分値段を求めるプログラムに変更。 4.プログラム説明 Aのプログラムは、def shopping(orange, apple) で何についてのプログラムか というメソッドの定義。 orange * apple で両方の値を合計するよう指示。 STDERR.print(": ") に何を尋ねる内容を書く。a = gets.to_i で尋ねる内容は 数字と指示。その次STDERR.print(": ") で個数を尋ねる。最後に printf("合計 %d 円\n",shopping(a,b)) と個数と値段をかけて表示せよと指示。 Bのプログラムは知りたい商品を STDERR.print(":") で尋ね、情報が無い場合に item = Hash.new("") で非取扱商品 と出るよう指示。情報があった場合、 STDERR.print("購入する個数:") で個数分の値段が求められる。 5.プログラム実行結果 ・プログラムA pan{c110190}% ./def_oneparam_a.rb [~/Ruby] みかん何円ですか?: 30 いくつ買いましたか?: 5 合計 150 円となります。 りんご何円ですか?: 20 いくつ買いましたか?: 4 合計 80 円となります。 pan{c110190}% ./def_oneparam_a.rb [~/Ruby] みかん何円ですか?: mmm いくつ買いましたか?: aaa 合計 0 円となります。 りんご何円ですか?: ooo いくつ買いましたか?: 111 合計 0 円となります。 ・プログラムB pan{c110190}% ./def_oneparam_a.rb [~/Ruby] 購入する品物:みかん 購入する個数:10 みかん (10 個) 300 円 pan{c110190}% ./def_oneparam_a.rb [~/Ruby] 購入する品物:りんご 購入する個数:20 りんご (20 個) 600 円 pan{c110190}% ./def_oneparam_a.rb [~/Ruby] 購入する品物:momo momo はありません momo は 非取扱商品 です。 6.考察 プログラムA ・defと定義や ()) で合計を足すと指示を書きこまないとエラーが起きること が分かりました。また、数字以外の入力はすべて 0円 となった。 ・改善点は二つの項目ごと入力しか出来ず面倒で効率があまりよくないところ。 プログラムB ・求めた個数と個数分の値段を表示し、配列にデータが無い場合、又は日本語 入力されなかった場合、非取扱商品と表示。 ・改善点はデータに無い商品への対応が単調になったところ。 7.まとめ 先生の講義ページや友達からの助言、先輩方のページなどの手本としたおかげで、 プログラムが何とかできました。しかし、自分の応用力がないことが課題となり ました。 8.参考文献 先輩のプログラム http://roy/~madoka/2010/r2/04/rpt/c109149.txt 西村先生の講義ページ http://roy/~madoka/2011/r2/04/r2_04_03_theme_03_method.html http://roy/~madoka/2011/r2/04/r2_04_04_theme_04_stderr.html http://roy/~madoka/2011/r2/04/r2_04_05_theme_05_print.html 9.感想 エラーが頻繁に起き、結果が出るまで大変でした。