第 5 回 何度も呼び出そう レポート課題 氏名:渡辺 龍 学籍番号:c1102057 語学クラス:中国語 3クラス コース(系):地域共創コース 1.筆記問題 A.進数計算 自分の名前を ASCIIコード表を参考に16進数になおすと、 w = 0x57 a = 0x61 t = 0x74 a = 0x61 n = 0x6e a = 0x61 b = 0x62 e = 0x65 r = 0x52 y = 0x79 u = 0x75 となる。 上記のものを全て足すと 37 + 61 = b8 b8 + 74 = 12c 12c + 61 = 18d 18d + 6e = 1fb 1fb + 61 = 25c 25c + 62 = 2be 2be + 65 = 323 323 + 52 = 375 375 + 79 = 3ee 3ee + 75 = 463 結果 0x463 となる。 0x57 = 87 0x61 = 97 0x74 = 116 0x61 = 97 0x6e = 110 0x61 = 97 0x62 = 98 0x65 = 101 0x52 = 82 0x79 = 121 0x75 = 117 上記全てを計算すると合計 1123 となる。 16) 1123 ------- 16) 70 … 余り3 ------- 16) 4 … 余り6 ------- 0 …余り4 となる。それぞれを16進数に直すと463となる。 結果、0x463 = 0d1123(0x463) となり答えは一致していると言える。 B.毎朝のランニング def ran(kutu,road,zikan) kutu を履く。 road を走る。 asa = kutu を履き road を走る。 asa = asa に 時間をかける。 end # def を閉じる。 ran(1足 、履くのに5秒、1本の道を走る) # 準備のため呼び出す ranning(1本の道を走る、時間30分) # 走る時間を計算するため呼び出す print("今日もよく走ったな!!\n") 2.プログラム問題 A.def_combination.rb a.考えた設定(A) 7人いる国会議員の中から議会に出す人数(7人未満の人数)を選択してもらう。 その選択人数から何通りの組合せが出来るかを計算するプログラム。 b.作成したプログラム(A) #!/usr/koeki/bin/ruby def factorial(x) # メソットの設定。変数はxとする if x == 1 # if 条件指定。この場合 x が 1 だった時。 1 else # if の次のに使用する条件指定。 x * factorial(x-1) # x でない場合に factorial(x-1) を掛ける。 end # if と else それぞれの条件指定を閉じるもの。 end # def を閉じるもの。 def senntaku(a,b) # メソットの設定。変数は (a,b) とする。 factorial(a) / (factorial(b) * factorial(a-b)) # それぞれのメソットを計算。組合せを計算する式。a / (a-b) = ? end # def を閉じるもの。 STDERR.print("国会議員の中から、議会出席者を選んで下さい。議会に選出できるのは7人未満とします。\n") STDERR.print("議会に出席させる人数を入力して下さい。\n") giin = gets.to_i # 入力を求める。入力したものを giin に代入。人数は整数のため to_i を使用。 ninnzuu = 7 # 議員人数を表している。 printf("%d 人選んだ場合の組合せは %d 通りになります。\n",giin,senntaku(ninnzuu,giin)) c.実行結果(A) 二つ実行した結果を載せた。 (1) pan{c110205}% ./def_combination.rb [~/Ruby] 国会議員の中から、議会出席者を選んで下さい。議会に選出できるのは7人未満とします。 議会に出席させる人数を入力して下さい。 6 6 人選んだ場合の組合せは 7 通りになります。 (2) pan{WATANABE Ryu}% ./def_combination.rb [~/Ruby] 国会議員の中から、議会出席者を選んで下さい。議会に選出できるのは7人未満とします。 議会に出席させる人数を入力して下さい。 3 3 人選んだ場合の組合せは 35 通りになります。 d.考察(A) プログラムの実行結果は正しいか?また指定人数以外のものを入力された場合は? 確かめ算 (1) pan{c110205}% bc -l [~/Ruby] (7*6*5*4*3*2*1)/(6*5*4*3*2*1) 7.00000000000000000000 quit (2) pan{c110205}% bc -l [~/Ruby] (7*6*5)/(3*2*1) 35.00000000000000000000 quit プログラムは正しく計算できていた。 指定人数以外の場合は? pan{WATANABE Ryu}% ./def_combination.rb [~/Ruby] 国会議員の中から、議会出席者を選んで下さい。議会に選出できるのは7人未満とします。 議会に出席させる人数を入力して下さい。 9 ./def_combination.rb:5:in `factorial': stack level too deep (SystemStackError) from ./def_combination.rb:11:in `factorial' from ./def_combination.rb:19:in `senntaku' from ./def_combination.rb:31 結果はエラーになってしまった。きちんと再入力できるようにしたかったが、私 の力不足で失敗の連続だった。次回までに作れるようにきちんと復習したいと思 う。 B.two_menthods.rb(B) a.考えた設定(B) チョコと牛乳それぞれの価格を指定し、購入した金額の合計を求めるプログラム。 また牛乳を3本以上購入した場合2割り引きとなる。 b.作成したプログラム(B) #!/usr/koeki/bin/ruby print("チョコと牛乳を購入した場合の値段の合計を計算します。\n") print("ちなみに牛乳を3本以上購入した場合2割り引きとなります。\n") print("\n") # 改行 def choc(c) # メソットの設定。変数の設定。 100 * c # チョコの個数 * 100。100円はチョコの価格。 end # def を閉じるもの。 def milk(m) # メソットの設定。変数の設定。 if m >= 3 # if 条件指定。m > 3 は牛乳が3本以上の場合。m は牛乳の変数。 100 * m * 0.8 # 3本以上だった場合は 0.8 で2割り引きにする。 # 100(牛乳の価格) * m(牛乳) * 0.8(2割り引き) = ? という式になる。 else # 条件指定。else を使用するのは if の次の条件指定のため。 100 * m # 100(牛乳の価格) * m(牛乳) = ? という式。 end # if else を閉じるもの。 end # def を閉じるもの。 STDERR.print("チョコを何個購入しますか?\n") kosuu = gets.to_i #入力を求める。入力したものを kosuu に代入。個数は整数のため to_i を使用。 STDERR.print("牛乳を何本購入しますか?\n") honsuu = gets.to_i #入力を求める。入力したものを honsuu に代入。本数は整数のため to_i を使用。 sam = choc(kosuu) + milk(honsuu) # sma に計算した結果を代入。choc と milk を加算して計算。 printf("合計は %d 円です。\n",sam ) c.実行結果 二つ結果を載せた。 (1) pan{c110205}% ./two_methods.rb [~/Ruby] チョコと牛乳を購入した場合の値段の合計を計算します。 ちなみに牛乳を3本以上購入した場合2割り引きとなります。 チョコを何個購入しますか? 5 牛乳を何本購入しますか? 1 合計は 600 円です。 (2) 2割り引きした結果 pan{c110205}% ./two_methods.rb [~/Ruby] チョコと牛乳を購入した場合の値段の合計を計算します。 ちなみに牛乳を3本以上購入した場合2割り引きとなります。 チョコを何個購入しますか? 4 牛乳を何本購入しますか? 4 合計は 720 円です。 d.考察 プログラムの計算に間違いはないか?また牛乳は正確に2割り引きされているのか? 確かめ算 (1) pan{c110205}% bc -l [~/Ruby] 5*100+100*1 600 quit 正しく計算できていた。 (2) 2割り引きは出来ているのか? pan{c110205}% bc -l [~/Ruby] 100*4+(100*4*0.8) 720.0 quit 確かめた結果正確に計算できた。 3.感想 コンビニのインターホン(ファミリーマートなど)だと思います。 4.参考文献 西村まどか先生講義ノート http://roy/~madoka/2011/r2/05/ 協力者 松田 大輝 君 細田 洋平 君