第 5 回 何度も呼び出そう レポート課題 氏名:伊藤詩野 学籍番号:c1110186 語学クラス:中国語3 コース:社会福祉コース 1.筆記問題 A. *基礎プログラミング I 第 5 回 (配列の構造) 「ASCII コード表」西村まどか を参考にしました。 URL:http://roy/~madoka/2012/r1/05/r1_05_01_theme_01_asciicode.html それぞれをASCIIコードで16進数に変換する。 i = 0x69 t = 0x74 o = 0x6f s = 0x73 h = 0x68 i = 0x69 n = 0x6e o = 0x6f ox = 69 + 74 + 6f + 73 + 68 + 69 + 6e + 6f = ??? 16進数の計算方法がわからなかったので、先に名前の16進数をそれぞれ10進数に 変換した。 i = 0x69 = 6*16^1 +)9*16^0 = 96+9 = 105 = 0d105 t = 0x74 = 7*16^1 =+)4*16^0 = 112+4 = 116 = 0d116 o = 0x6f = 6*16^1 = 15*16^0 = 96+15 = 111 = 0d111 s = 0x73 = 7*16^1 = 3*16^0 = 112+3 = 115 = 0d115 h = 0x68 = 6*16^1 = 8*16^0 = 96+8 = 104 = 0d104 n = 0x6e = 6*16^1 = 14*16^0 = 96+14 = od120 10進数に変換した「itoshino」をすべて足すと… od = pan{c111018}% bc -l [~/Ruby] 105+116+111+115+105+104+120+111 887 od887 = ox??? 名前を足した16進数での合計を求めるため、10進数の和を16進 数に変換する。 *10進数を16進数に変換するには、商が0になるまで値を16で割り、下から表示* pan{c111018}% bc -l [~/Ruby] 887 / 16 = 55....7 55 / 16 = 3....7 3 / 16 = 0....3 よって、od887 = ox377 pan{c111018}% bc -l [~/Ruby] 3*16^2=768 7*16^1=112 7*16^0= 7 768 + 112 + 7 = 887 一致したので、od887 = 0x377 は正しい。 B. アルバイトでの仕事の過程をプログラム風に書く。 print("いらっしゃいませ〜n") def arbeit(order, food, pay) order でお客様に注文を伺う food で料理を運ぶ pay 会計 job = order をとり、eat を運ぶ job = pay 料金をお支払いただく def service(heart, smile, enjoy) heart を持って、サービスを提供する smile でお客様に接する enjoy 仕事をする service = heart smile enjoy end food(注文をとる,料理を運ぶ,レジを打つ,) # 接客するとき必要なものを呼び出す word(注文お伺い致します,おまたせ致しました,ありがとうございました) # 接客するとき必要なものを呼び出す print("またのご来店をっ!n") 2.プログラム問題 問題 A ◯プログラム名:def_power.rb ◯参考にしたプログラムと変更点 参考にしたプログラムは、講義で作成した def_fact.rb 。 ・基礎プログラミング II 第 4 回 (繰り返しは引っ張りだそう) 「どんな関数がきてもだいじょうぶ」 西村まどか URL:http://roy/~madoka/2012/r2/04/r2_04_03_theme_03_method.html ・基礎プログラミング II 第 4 回 (繰り返しは引っ張りだそう) 「これを代入した答はなあに」 西村まどか URL:http://roy/~madoka/2012/r2/04/r2_04_04_theme_04_stderr.html def_fact.rb に第4回で学んだこと (上記参照)を活かしながら、作成した。 変更点は、関数power の仮引数を、x y の2つ用意した部分。 ◯プログラム #!/usr/koeki/bin/ruby #coding: euc-jp print("◆ 階乗計算をします\n") print("\n") def power(x, y) x ** y end STDERR.print("基数 : ") base = gets.chomp.to_i STDERR.print("指数 : ") index = gets.chomp.to_i print("\n") printf("◆ %d の %d 乗は %d です", base, index, power(base, index)) ◯実行結果 パターン1 pan{c111018}% ./def_power.rb [~/Ruby] ◆ 階乗計算をします 基数 : 3 指数 : 4 ◆ 3 の 4 乗は 81 です% パターン2 pan{c111018}% ./def_power.rb [~/Ruby] ◆ 階乗計算をします 基数 : 2 指数 : 6 ◆ 2 の 6 乗は 64 です% ◯考察 実行結果の答えを確かめる。 パターン1 pan{c111018}% bc -l [~/Ruby] 3 * 3 * 3 * 3 81 quit パターン2 pan{c111018}% bc -l [~/Ruby] 2 * 2 * 2 * 2 * 2 * 2 64 quit 答えが一致したため、このプログラムは正常である。 問題 B ◯プログラム名:two_methods.rb ◯設定:ルビ男くんは町内会の子ども会の買いだし担当です。 コーラとお菓子を購入したときの合計を計算するプログラム。 コーラ(1.5L)1つ178円、8本(箱)買うと3割引きになる。 ◯参考にしたプログラムと変更点 参考にしたプログラムは、講義で作成した def_metabolic.rb。 今回は、def-end 内で関数(drink)の定義として、3割引きする計算(*0.7)をし た後、お菓子それぞれを def-end を用いて計算し、合計を計算した。 ◯プログラム #!/usr/koeki/bin/ruby #coding: euc-jp def drink(d) # 関数を drink とし引数を d とする if d >= 8 # 8個以上の場合 178 * d * 0.7 # 3割引きにする else # または 178 * d # 178円 × 購入数 end end def potato(p) # 関数を potato とし引数を p とする p * 98 # 98 × 購入数 end def chocolate(c) # 関数を chocolate とし引数を c とする c * 126 # 126 × 購入数 end def biscuit(b) # 関数を biscuit とし引数を b とする b * 142 # 142 × 購入数 end print("------ 広告の品 ------\n") print("今がお買い得 ! 8本買うと、3割引き!! \n") print("\n") print("\n") print("コーラ 178円 \n") STDERR.print("購入数 : ") nomimono = gets.to_i print("\n") print("------- お菓子 ------\n") print("ポテトチップス 98円\n") print("チョコレート 126円\n") print("クッキー 142円\n") STDERR.print("ポテトチップス 購入数 : ") potechi = gets.to_i STDERR.print("チョコレート 購入数 : ") choco = gets.to_i STDERR.print("クッキー 購入数 : ") cookie = gets.to_i total = drink(nomimono)+potato(potechi)+chocolate(choco)+biscuit(cookie) # 合計金額を算出する printf("合計金額 %d円 \n",total) # 結果を表示 ◯実行結果 ・パターン1 pan{c111018}% ./two_methods.rb [~/Ruby] ------ 広告の品 ------ 今がお買い得 ! 8本買うと、3割引き!! コーラ 178円 購入数 : 12 ------- お菓子 ------ ポテトチップス 98円 チョコレート 126円 クッキー 142円 ポテトチップス 購入数 : 6 チョコレート 購入数 : 5 クッキー 購入数 : 6 合計金額 3565円 ・パターン2 pan{c111018}% ./two_methods.rb [~/Ruby] ------ 広告の品 ------ 今がお買い得 ! 8本買うと、3割引き!! コーラ 178円 購入数 : 8 ------- お菓子 ------ ポテトチップス 98円 チョコレート 126円 クッキー 142円 ポテトチップス 購入数 : 4 チョコレート 購入数 : 3 クッキー 購入数 : 2 合計金額 2050円 ・パターン3 pan{c111018}% ./two_methods.rb [~/Ruby] ------ 広告の品 ------ 今がお買い得 ! 8本買うと、3割引き!! コーラ 178円 購入数 : 2 ------- お菓子 ------ ポテトチップス 98円 チョコレート 126円 クッキー 142円 ポテトチップス 購入数 : 3 チョコレート 購入数 : 2 クッキー 購入数 : 3 合計金額 1328円 ◯考察 実行結果の答えを確かめる パターン1 pan{c111018}% bc -l [~/Ruby] 178 * 12 * 0.7 + 98 * 6 + 126 * 5 + 142 * 6 3565 quit パターン2 pan{c111018}% bc -l [~/Ruby] 178 * 8 * 0.7 + 98 * 4 + 126 * 3 + 142 * 2 2050 quit パターン3 pan{c111018}% bc -l [~/Ruby] 178 * 2 + 98 * 3 + 126 * 2 + 142 * 3 1328 quuit パターン1~パターン3 の答えが一致したので、このプログラムは正しい。 3.感想 機械的な操作を繰り返すものは、電卓などの計算機能をもつもの。数字は変わ るが、計算ということを繰り返していると思ったから。 筆記問題2でも扱ったが、私たちの日常的な習慣をプログラムにできるのは面 白いと思った。そう考えると、私たちも何気ない毎日も規則性があり、人間も 機械のようだと感じた。今回で講義の 1/3 が終わったが、今後も頑張りたい。 4.参考文献 ・基礎プログラミング II 第 4 回 (繰り返しは引っ張りだそう) 「どんな関数がきてもだいじょうぶ」 西村まどか URL:http://roy/~madoka/2012/r2/04/r2_04_03_theme_03_method.html ・基礎プログラミング II 第 4 回 (繰り返しは引っ張りだそう) 「これを代入した答はなあに」 西村まどか URL:http://roy/~madoka/2012/r2/04/r2_04_04_theme_04_stderr.html ・基礎プログラミング II 第 5 回 (何度も呼び出そう) 「ひとつずつ確かめよう」 西村まどか URL:http://roy/~madoka/2012/r2/05/r2_05_08_theme_06_onebyone.html ・基礎プログラミング II 第 5 回 (何度も呼び出そう) 「これもだめで、あれもだめ」 西村まどか URL:http://roy/~madoka/2012/r2/05/r2_05_06_theme_04_exit.html ・基礎プログラミング II 第 5 回 (何度も呼び出そう) 「脱メタボリック計画」 西村まどか URL:http://roy/~madoka/2012/r2/05/r2_05_01_theme_01_diet.html 5.共同学習者  浅沼佑香さん 村上茉奈美さん 佐藤祐子さん 6.添付ファイル ・def_power.rb ・two_methods.rb