第 4 回 繰り返しは引っ張りだそう レポート課題 氏名:佐藤 祐子 学籍番号:C1110832 語学クラス:中国語3 コース:地域共創コース //はじめに// 前回のレポートで起動しなかった原因が分かり、作り直したので今回のレポート と一緒に添付します。 //作成したプログラム// #!/usr/koeki/bin/ruby #coding: euc-jp mol = Hash.new mol["イングリッシュ"] = 25,"直毛短毛種","南米(改良)" mol["クレステッド"] = 28,"頭部につむじをもつ短毛種","不明" mol["ぺルビアン"] = 24,"直毛長毛種","ペルー" mol["テディ"] = 21,"縮れ毛の短毛種","アメリカ" mol["アビシニアン"] = 32,"中毛種","イギリス" for name, toku in mol printf("%sは約%dcmの%sであり、原産地または改良地は%sです。\n",name,toku[0],toku[1],toku[2]) end print("\n") printf("体が小さい順に並べ替えます。\n") print("\n") mol.keys.sort{|a,b| mol[a][0]<=>mol[b][0]}.each{|name| printf("%sの体長は約%dcmです。\n",name,mol[name][0])} print("\n") printf("5匹連なって歩くと…\n") print("\n") total = 0 for name,toku in mol total += toku[0] end sleep 2 printf("長さは%dcmになります!\n",total) //改善した部分// * 数字の部分の " を全て外した。 * 合計の初期値を 0 と定義した。 //実行結果// pan{c111083}% ./hash_ary_calc.rb [~/Ruby] イングリッシュは約25cmの直毛短毛種であり、原産地または改良地は南米(改良)です。 クレステッドは約28cmの頭部につむじをもつ短毛種であり、原産地または改良地は不明です。 ぺルビアンは約24cmの直毛長毛種であり、原産地または改良地はペルーです。 テディは約21cmの縮れ毛の短毛種であり、原産地または改良地はアメリカです。 アビシニアンは約32cmの中毛種であり、原産地または改良地はイギリスです。 体が小さい順に並べ替えます。 テディの体長は約21cmです。 ぺルビアンの体長は約24cmです。 イングリッシュの体長は約25cmです。 クレステッドの体長は約28cmです。 アビシニアンの体長は約32cmです。 5匹連なって歩くと… 長さは130cmになります! //考察// pan{c111083}% bc -l [~/Ruby] 21+24+25+28+32 130 確かめ算をしたところ答えが合ったため、このプログラムは正しく動作したとい える。 //本日の課題// 1、筆記問題 A 「埼玉とかけて、山本リンダと解く」 「その心は?」 「ウラワ(浦和)!ウラワ!ウラ・ウラワ〜♪」 //参考文献// なぞかけ三昧 http://www.d1.dion.ne.jp/~ma_nishi/nazokake.html B (a)モンスターボールとハイパーボールを買ったときの合計金額を知りたい。 モンスターボールは1個200円、ハイパーボールは1200円である。 [解答1] モンスターボールを15個とハイパーボールを8個買った場合 200 * 15 + 1200 * 8 = 12600 bc -lで調べたところ、 pan{c111083}% bc -l [~] 200*15+1200*8 12600 答えは一致した。 [解答2] モンスターボールを5個、ハイパーボールを10個買った場合 200 * 5 + 1200 * 10 = 13000 bc -lで調べたところ、 pan{c111083}% bc -l [~] 200*5+1200*10 13000 答えは一致した。 (b)ショートケーキとモンブランを買ったときの合計金額が知りたい。 ショートケーキは1個450円、モンブランは520円である。 [解答1] ショートケーキを3個、モンブランを6個買った場合 450 * 3 + 520 * 6 = 4470 bc -lで調べたところ、 pan{SATO Yuko}% bc -l [~] 450*3+520*6 4470 答えは一致した。 [解答2] ショートケーキを12個、モンブランを8個買った場合 450 * 12 + 520 * 8 = 9560 bc -lで調べたところ、 pan{c111083}% bc -l [~] 450*12+520*8 9560 答えは一致した。 2、プログラム問題 A、前問で使用したショートケーキとモンブランの例を使って、合計を求めるよ うなmethodを含むプログラム def_twoparam.rbを作成した。 //作成したプログラム// #!/usr/koeki/bin/ruby #coding: euc-jp def price(x,y) # method を price(x,y) と定義する 450 * x + 520 * y # 計算の値を固定 end # defの終わり STDERR.print("ショートケーキの個数を入れてください:") # 入力部分 a = gets.to_i # 入力された文字列を整数にする STDERR.print("モンブランの個数を入れてください:") b = gets.to_i printf("ショートケーキ%d個、モンブラン%d個の合計は%d円です\n",a,b,price(a,b)) # 合計部分 //もとにしたプログラムからの変更点// 授業で作成した def_func.rb を基に作成した。 * method を price(x,y)と変更 * print文を使い、内容に合わせた結果表示画面を作成した。 //実行結果// (1) pan{c111083}% ./def_twoparam.rb [~/Ruby] ショートケーキの個数を入れてください:5 モンブランの個数を入れてください:6 ショートケーキ5個、モンブラン6個の合計は5370円です (2) pan{c111083}% ./def_twoparam.rb [~/Ruby] ショートケーキの個数を入れてください:7 モンブランの個数を入れてください:3 ショートケーキ7個、モンブラン3個の合計は4710円です (3) pan{c111083}% ./def_twoparam.rb [~/Ruby] ショートケーキの個数を入れてください:12 モンブランの個数を入れてください:25 ショートケーキ12個、モンブラン25個の合計は18400円です //考察// bc -lを使ってそれぞれ確認してみたところ、 (1) pan{c111083}% bc -l [~] 450*5+520*6 5370 (2) pan{c111083}% bc -l [~] 450*7+520*3 4710 (3) pan{c111083}% bc -l [~] 450*12+520*25 18400 それぞれ答えが一致していたため、このプログラムは正しく作動したといえる。 //参考文献// 授業で作成したプログラム def_func.rb 西村まどか 基礎プログラミングII 第4回 「どんな関数がきてもだいじょうぶ」 http://roy/~madoka/2012/r2/04/r2_04_03_theme_03_method.html B、前問の設定で、予算を5000円と固定する。ショートケーキの個数を入力した とき、予算内でモンブランがあと何個買えるのかを表示するプログラム def_budget.rb を作成した。 //作成したプログラム// #!/usr/koeki/bin/ruby #coding: euc-jp def kosu(x) # method を kosu(x) と定義する 450 * x + 520 * y = 5000 # 全体の計算 k = 5000 - (450 * x) # 5000円からショートケーキの金額を引いた値 y = k / 520 # ショートケーキの分を引いた差額からモンブランの個数を出 す値 end printf("予算は5000円です。\n") # 予算は5000円というprint分 STDERR.print("ショートケーキの個数を入力してください:\n") # ショートケー キの個数を入力 a = gets.to_i # 入力した値を整数にする print("\n") # 1行空ける printf("ショートケーキを%d個買うと予算内でモンブランは%d個買えます\n",a,kosu(a)) # 結果表示文 //もとにしたプログラムからの変更点// 前問で作成したプログラムをもとに作成した。 * method を内容に合わせて kosu とした。 * 計算の部分を内容に合わせて変更 * print文も予算の表示を追加 //実行結果// (1) pan{SATO Yuko}% ./def_budget.rb [~/Ruby] 予算は5000円です。 ショートケーキの個数を入力してください: 6 ショートケーキを6個買うと予算内でモンブランは4個買えます (2) pan{c111083}% ./def_budget.rb [~/Ruby] 予算は5000円です。 ショートケーキの個数を入力してください: 3 ショートケーキを3個買うと予算内でモンブランは7個買えます //考察// bc -lを使って確認したところ、 (1) pan{c111083}% bc -l [~] 5000-(450*6) 2300 2300/520 4.42307692307692307692 (2) pan{c111083}% bc -l [~] 5000-(450*3) 3650 3650/520 7.01923076923076923076 答えが一致した事から、このプログラムは正しく作動したといえる。 //参考文献// 前問で作成したプログラム def_twoparam.rb 西村まどか 基礎プログラミングII 第4回 「手作りルールの最後の値」 http://roy/~madoka/2012/r2/04/r2_04_09_appendix_01_method.html //感想// 今まで小・中・高と算数、数学を学んで来たが、このmethodを作るときの仕組み は算数、数学でやってきたことの組み合わせを用いたものだなと思った。 頭では分かっているのに、それをプログラムにしてパソコンに読みこませるとい うことは思っていたよりも難しいということが分かった。ふつうに考えて出来る 計算が、プログラムではその過程を事細かく定義しなければならないのが大変だっ た。しかし、実行されれば面白かった。 //共同作業者// 浅沼 佑香 伊藤 詩野