第5回 基礎プログラミング II レポート課題 氏名:成澤龍空 学籍番号:c1071658 語学クラス:英語 コース(系):経営系 A.NARISAWARYUSUKE は、 N = 0x4E A = 0x41 R = 0x52 I = 0x49 S = 0x53 A = 0x41 W = 0x57 R = 0x52 Y = 0x59 U = 0x55 S = 0x53 U = 0x55 S = 0x53 U = 0x55 K = 0x4B E = 0x45 となるので、 N = 4 * 16 ** 1 + 14 * 16 ** 0 = 64 + 14 = 78 A = 4 * 16 ** 1 + 1 * 16 ** 0 = 64 + 1 = 65 R = 5 * 16 ** 1 + 2 * 16 ** 0 = 80 + 2 = 82 I = 4 * 16 ** 1 + 9 * 16 ** 0 = 64 + 9 = 73 S = 5 * 16 ** 1 + 3 * 16 ** 0 = 80 + 3 = 83 A = 4 * 16 ** 1 + 1 * 16 ** 0 = 64 + 1 = 65 W = 5 * 16 ** 1 + 7 * 16 ** 0 = 80 + 7 = 87 A = 4 * 16 ** 1 + 1 * 16 ** 0 = 64 + 1 = 65 R = 5 * 16 ** 1 + 2 * 16 ** 0 = 80 + 2 = 82 Y = 5 * 16 ** 1 + 9 * 16 ** 0 = 80 + 9 = 89 U = 5 * 16 ** 1 + 5 * 16 ** 0 = 80 + 5 = 85 S = 5 * 16 ** 1 + 3 * 16 ** 0 = 80 + 3 = 83 U = 5 * 16 ** 1 + 5 * 16 ** 0 = 80 + 5 = 85 K = 4 * 16 ** 1 + 11 * 16 ** 0 = 64 + 11 = 75 E = 4 * 16 ** 1 + 5 * 16 ** 0 = 64 + 5 = 69 これをすべて足すと、 78 + 65 + 82 + 73 + 83 + 65 + 87 + 65 + 82 + 89 + 85 + 83 + 85 + 75 + 69 = 1166 なので0d1166となる。 またこれを16で割ると、 1166 / 16 = 72 余り 14 72 / 16 = 4 余り 8 4 / 16 = 0 余り 4 なので、0x48Eとなる。 上の結果を元にアルファベットの数字を足し合わせると、 4 14 4 1 ----------- 8 15 5 2 ----------- 14 1 4 9 ----------- 1 2 10 5 3 ----------- 1 7 13 4 1 ----------- 1 11 14 5 7 ----------- 2 1 5 4 1 ----------- 2 5 6 5 2 ----------- 2 10 8 5 9 ----------- 3 0 1 5 5 ----------- 3 5 6 5 3 ----------- 3 10 9 5 5 ----------- 3 15 14 4 11 ----------- 4 4 9 4 5 ----------- 4 8 14 となり一致するので合っている。 B. def drink(cup,tea,suger) cup を取る tea を入れる suger を入れる drink = cup に tea を入れる drink = cup に suger を入れる end drink(1杯,100g,ティーパック1袋) cake(1個,150g,ホール1切れ) print("休憩しよう。\n") 2 A. 設定 全国少年サッカー大会の総エントリーチー厶数から全国大会出場チーム数の組み 合わせを求めるプログラムを作成した 作成したプログラム(def_combination.rb) #!/usr/koeki/bin/ruby print("全国少年サッカー大会事務局\n") def f(t) if t == 1 1 else t * f(t-1) end end def combination(a,b) if a == b 1 elsif b == 0 0 elsif b > a print("\n入力エラー") print("\n総エントリーチームより全国大会出場チームの方を多く入力ししています。") elsif 3130 < a print("チーム数は3130以下で入力して下さい。") else f(a)/(f(b)*f(a-b)) end end STDERR.print("総エントリーチーム数 :") a = gets.to_i printf("\n%d から %dチームは %d通りの組み合わせです。 \n\n",a,b,combination(a,b)) 実行結果 pan{c107165}% ./def_combination.rb [~/Ruby] 全国少年サッカー大会事務局 総エントリーチーム数 :4 全国大会出場チーム数 :2 4 から 2チームは 6通りの組み合わせです。 考察 bc -l で確かめ算をしてみると、 pan{c107165}% bc -l [~/Ruby] (4 * 3 * 2) / (2 * 2) 6.00000000000000000000 となり正しい。 t * f(t-1) が階乗の計算で f(a)/(f(b)*f(a-b)) が組み合わせの計算になる。 B. 設定 前回のレポートのプログラムのA問題を使い、プリッツの値段を段階的に変える プログラムを作成した。 作成したプログラム(two_methods.rb) #!/usr/koeki/bin/ruby def pokky(x) 80 * x end def toppo(y) 110 * y end def pritz(z) if 59 < z y = 70 * z elsif 39 < z y = 80 * z elsif 19 < z y = 90 * z else y = 100 * z end end print("\nプリッツまとめ買いセール中!!") print("\n20個毎に単価を10円値下げします。(60個以上は全て70円となります。):\n") STDERR.print("購入する個数を入力して下さい。\n") STDERR.print("ポッキー(1個80円): \n") a = gets.chomp.to_i STDERR.print("トッポ(1個110円): \n") b = gets.chomp.to_i STDERR.print("プリッツ(1個100円): \n") c = gets.chomp.to_i STDERR.printf("\nポッキーの合計金額: %d 円\n",pokky(a)) STDERR.printf("トッポの合計金額: %d 円\n",toppo(b)) STDERR.printf("プリッツの合計金額: %d 円\n",pritz(c)) printf("\n全ての合計金額は %d 円です。\n",pokky(a)+toppo(b)+pritz(c)) 実行結果 pan{c107165}% ./two_methods.rb [~/Ruby] まとめ買いセール中。 20個毎に単価を10円値下げします。(60個以上は全て70円となります。): 購入する個数を入力して下さい。 ポッキー(1個80円): 2 トッポ(1個110円): 3 プリッツ(1個100円): 60 ポッキーの合計金額: 160 円 トッポの合計金額: 330 円 プリッツの合計金額: 4200 円 全ての合計金額は 4690 円です。 考察 bc -l で確かめ算をしてみると、 pan{c107165}% bc -l [~/Ruby] 80 * 2 + 110 * 3 + 70 * 60 4690 となるので正しい。 def pritz(z) に if 文を加えることで作成することができた。 感想 機械的な動作を繰り返すものとして工場での労働が挙げられる。特に流れ作業系 ではまるで機械になったかのような錯角を覚える(もちろん経験済みです)。 参考文献 http://www.asahi-net.or.jp/~ax2s-kmtn/ref/bdh.html 2進数、16進数と10進数 http://roy/~madoka/2010/r1/05/05_01_theme_01_asciicode.html 基礎プログラミング I 第5回 配列の構造 「ASCII コード表」 TA 大沼 拓海 さん