第 5 回 何度も呼び出そう レポート課題 氏名:井上 宏美 学籍番号:c1110223 語学クラス:英語3 コース:政策マネジメント 1.筆記問題 A.私の名前は井上宏美なので、アルファベット表記は Inoue Hiromiとなる。 これを下のASCIIコード表を参考に変換すると、 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 nul soh stx etx eot enq ack bel bs ht lf vt ff cr so si 1 dle dc1 dc2 dc3 dc4 nak syn etb can em sub esc fs gs rs us 2 ! " # $ % & ' ( ) * + , - . / 3 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 4 @ A B C D E F G H I J K L M N O 5 P Q R S T U V W X Y Z [ \ ] ^ _ 6 ` a b c d e f g h i j k l m n o 7 p q r s t u v w x y z { | } ~ del I = 0x49 n = 0x6e o = 0x6f u = 0x75 e = 0x65 H = 0x48 i = 0x69 r = 0x72 o = 0x6f m = 0x6d i = 0x69 となる。 これを16進数から10進数に直す。この場合16をかける。 0x49 = 4*16の1乗 + 9*16の0乗 = 64 + 9 = 73 =0d73 0x6e = 6*16の1乗 + 14*16の0乗 = 96 + 14 = 110 =0d110 0x6f = 6*16の1乗 + 15*16の0乗 = 96 + 15 = 111 =0d111 0x75 = 7*16の1乗 + 5*16の0乗 = 112 + 5 = 117 =0d117 0x65 = 6*16の1乗 + 5*16の0乗 = 96 + 5 = 101 =0d101 0x48 = 4*16の1乗 + 8*16の0乗 = 64 + 8 = 72 =0d72 0x69 = 6*16の1乗 + 9*16の0乗 = 96 + 9 = 105 =0d105 0x72 = 7*16の1乗 + 2*16の0乗 = 112 + 2 = 114 =0d114 0x6f = 6*16の1乗 + 15*16の0乗 = 96 + 15 = 111 =0d111 0x6d = 6*16の1乗 + 13*16の0乗 = 96 + 13 = 109 =0d109 0x69 = 6*16の1乗 + 9*16の0乗 = 96 + 9 = 105 =0d105 という結果になる。 上記の結果を全て足すと、 pan{c111022}% bc -l [~/Ruby] 73 + 110 + 111 + 117 + 101 + 72 + 105 + 114 + 111 + 109 + 105 1128 quit 以上の結果から、0d1128となる。 次に0d1128を16進数に変換する。 1128 / 16 = 70 ... 8 70 / 16 = 4 ... 6 4 / 16 = 0 ... 4 よって、答えは0x468になる。 つまり、名前の文字コードを足すと 0d1128 = 0x468となる。 16進数から10進数にしても答えは、変わらない。 以下の様になる。 1 16の2乗|16の1乗|16の0乗 # 16に何乗するか ------------------------- 2 256| 16| 1 # 1の答えを表示 3 4| 6| 8 # 上記で計算した16進数の答え ------------------------- 4 1024| 96| 8 # 2と3のを掛けた答え 1024 + 96 + 8 = 1128 よって、 0x468 は、 10進数 1128になることが分かった。 以上の結果から16進数と10 進数で計算した結果同じになったので 計算はあっていることが分かる。 B. アルバイトに行くまでの行動をプログラム風に書き直した。 def baito(sengan , kigae , hamigaki) 洗面所で sengan をする 終わったら部屋で kigae をする ha = hamigaki end #返すものは ha hamigaki (13g, 2分, 1分) #歯みがきをするので呼び出す print("さぁ、行くか"\n") 2.プログラム問題 A. i.考えた設定 基数baseと指数indexを入力すると、答えが表示されるプログラムを作成する。 ii.作成したプログラム def_power.rb #!/usr/koeki/bin/ruby #coding: euc-jp def power(x,y) #power(base,index) x ** y #巾乗の式 end STDERR.print("基数の数値をいれてください。\n") base = gets.chomp!.to_i #基数を入力する STDERR.print("指数の数値をいれてください。\n") index = gets.chomp.to_i #指数を入力する printf("%d の %d 乗は %d です\n", base, index, power(base,index)) iii.もとにしたプログラムからの変更点 授業中に作成したdef_fact.rbから、巾乗の式に直した。 また、数値を入力するようにうながすために、STDERRを二つ追加した。 iv.プログラムを実行した結果画面 pan{c111022}% ./def_power.rb [~/Ruby] 基数の数値をいれてください。 2 指数の数値をいれてください。 3 2 の 3 乗は 8 です pan{c111022}% ./def_power.rb [~/Ruby] 基数の数値をいれてください。 4 指数の数値をいれてください。 6 4 の 6 乗は 4096 です pan{c111022}% ./def_power.rb [~/Ruby] 基数の数値をいれてください。 3 指数の数値をいれてください。 5 3 の 5 乗は 243 です v.導き出された結果の考察 pan{c111022}% bc -l [~/Ruby] 2 * 2 * 2 8 quit pan{c111022}% bc -l [~/Ruby] 4 * 4 * 4 * 4 * 4 *4 4096 quit pan{c111022}% bc -l [~/Ruby] 3 * 3 * 3 * 3 * 3 243 以上の結果より、これらの数値は正しいと言える。 B. i.考えた設定 ラーメンと餃子を買ったときの合計の値段を求めるプログラムを考えた。 ii.作成したプログラム two_methods.rb #!/usr/koeki/bin/ruby #coding: euc-jp def ramen(r) #メソットを設定する 700 * r end # def の 終わり def gyoza(g) #メソットを設定する if g >=2 #仮に餃子(g)を2つより多く注文したら 450 * g * 0.7 #餃子を2つ注文すると3割引きにして提供する else 450 * g end # if の 終わり end # def の 終わり STDERR.print("ラーメンと餃子を注文したい!\n") STDERR.print("合計の金額はいくらになるかな?\n") STDERR.print("餃子を2つ以上注文すると3割引きになるよ!\n") STDERR.print("ラーメンは何杯買う??\n") #画面に標準出力をさせるように表示させる ramen1 = gets.to_i # ラーメンを何杯買うかの数値は整数なのでto_i STDERR.print("餃子はどれくらい?\n") gyoza1 = gets.to_i # 餃子を何皿買うかの数値は整数なのでto_i total = ramen(ramen1)+ gyoza(gyoza1) #メソットでラーメンと餃子の合計を求める printf("合計は%d 円になるみたいだね。\n",total) #表示させるものはラーメンと餃子の合計金額が出る iii.もとにしたプログラムからの変更点 if文を餃子を2つ以上注文すると3割引きに変更した。 また、メソット名をラーメンと餃子に変更した。 iv.プログラムを実行した結果画面 pan{c111022}% ./two_methods.rb [~/Ruby] ラーメンと餃子を注文したい! 合計の金額はいくらになるかな? 餃子を2つ以上注文すると3割引きになるよ! ラーメンは何杯買う?? 2 餃子はどれくらい? 3 合計は2345 円になるみたいだね。 pan{c111022}% ./two_methods.rb [~/Ruby] ラーメンと餃子を注文したい! 合計の金額はいくらになるかな? 餃子を2つ以上注文すると3割引きになるよ! ラーメンは何杯買う?? 4 餃子はどれくらい? 1 合計は3250 円になるみたいだね。 v.導き出された結果の考察 pan{c111022}% bc -l [~/Ruby] 700 * 2 + 450 * 3 * 0.7 2345.0 quit pan{c111022}% bc -l [~/Ruby] 700 * 4 + 450 * 1 3250 quit pan{c111022}% bc -l [~/Ruby] 700 * 1 + 450 * 6 * 0.7 2590.0 quit 以上の結果より、割り引きされている場合とされていない場合の金額は、正しく 計算、実行されたと言える。 割り引きの場合は、小数点が含まれるが実行画面でも正しく表示されることが分 かった。 C. i.考えた設定 働く時間をカウントするシュミレーションを考えた。 ii.作成したプログラム def_sim.rb #!/usr/koeki/bin/ruby #coding: euc-jp def work(t) #メソットを設定する if t >= 60 #仮に t が 60よりも大きければ time = 8 #変数 8 を代入する else #違うければ time = 5 #変数 5 を代入する end # if の終わり end # deg の終わり age =55 #現在の年齢が55歳だとして total = 0 #最初は0 i = 0 #時間をカウントする変数 STDERR.print("1ヵ月に働くシュミレーションをします。\n") STDERR.print("何日働きますか?\n") STDERR.print("1日5時間労働をして25時間以上働くと、\n") STDERR.print("その後1日8時間労働をすることが出来ます。\n") data = gets.to_i #時間を整数に直して代入 while i < data #入力する時間分だけ繰り返す printf(" %d回目までに働いた時間\n",i+1) total += work(age) #totalにwork(t)の計算を代入 printf("%d時間です。\n",total) age += 1 #次のために1足す i += 1 #次の時間のために1足す print("\n\n") end #whileの 終わり iii.もとにしたプログラムからの変更点 授業中に作成したプログラムから体重ではなく、働いた時間に変更した。 25時間以上働くと1日8時間働くように変更した。 iv.プログラムを実行した結果画面 pan{c111022}% ./def_sim.rb [~/Ruby] 1ヵ月に働くシュミレーションをします。 何日働きますか? 1日5時間労働をして25時間以上働くと、 その後1日8時間労働をすることが出来ます。 14 1回目までに働いた時間 5時間です。 2回目までに働いた時間 10時間です。 3回目までに働いた時間 15時間です。 4回目までに働いた時間 20時間です。 5回目までに働いた時間 25時間です。 6回目までに働いた時間 33時間です。 7回目までに働いた時間 41時間です。 8回目までに働いた時間 49時間です。 9回目までに働いた時間 57時間です。 10回目までに働いた時間 65時間です。 11回目までに働いた時間 73時間です。 12回目までに働いた時間 81時間です。 13回目までに働いた時間 89時間です。 14回目までに働いた時間 97時間です。 pan{c111022}% ./def_sim.rb [~/Ruby] 1ヵ月に働くシュミレーションをします。 何日働きますか? 1日5時間労働をして25時間以上働くと、 その後1日8時間労働をすることが出来ます。 3 1回目までに働いた時間 5時間です。 2回目までに働いた時間 10時間です。 3回目までに働いた時間 15時間です。 v.導き出された結果の考察 pan{c111022}% bc -l [~/Ruby] 5 + 5 + 5 + 5 + 5 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 97 quit pan{c111022}% bc -l [~/Ruby] 5 + 5 + 5 15 quit 以上の結果よりプログラムの計算は正しいということが出来る。 3.感想 操作を繰り返すものとしては、機械では自動ドアが身近なもとだと思う。 今回は、階乗のしくみを学んだが、いまいち関数と言われると苦手意識があるせ いか時間がかかってしまった。プログラムも何度もエラーになってしまったが、 諦めずに最後の問題までとり組めたので良かった。 進数計算は、16進数や10進数に変換したりする手順が混ざってしまい、少し見づ らくなってしまったのが、最後には答えを求めることが出来た。 4.参考文献 http://roy/~madoka/2012/r2/05/r2_05_01_theme_01_diet.html 西村まどか先生 第 5 回 (何度も呼び出そう) 「脱メタボリック計画」 http://roy/~madoka/2012/r2/05/r2_05_07_theme_05_factorial.html 西村まどか先生 第 5 回 (何度も呼び出そう) 「階乗計算」 http://roy/~madoka/2012/r2/05/r2_05_09_theme_07_quicksort.html 西村まどか先生 第 5 回 (何度も呼び出そう) 「トランプの並べ替え」 Ruby プログラミング基礎講座 広瀬雄二著 p104 16進数と10進数の変換