第 5 回 何度も呼び出そう レポート課題 氏名:齋藤康平 学籍番号:c1110677 語学クラス:英語2 コース:政策マネジメント 1.筆記問題 A.自分の名前 SAITO KOHEI をASCIIコードを使い16進数で表示する。 S=0x53 A=0x41 I=0x49 T=0x54 O=0x4f K=0x4b O=0x4f H=0x48 E=0x45 I=0x49 となる。 16進数を一桁ずつ区切り、それぞれ足す。16進数の足し算は、16ごとに繰り上げ る。 (S + A) = 0x53 + 0x41 = 0x94 0x94 + I = 0x94 + 0x49 = 0xdd 0xdd + T = 0xdd + 0x54 = 0x131 0x131 + O = 0x131 + 0x4f = 0x180 0x180 + K = 0x180 + 0x4b = 0x1cb 0x1cb + O = 0x1cb + 0x4f = 0x21a 0x21a + H = 0x21a + 0x48 = 0x262 0x262 + E = 0x262 + 0x45 = 0x2a7 0x2a7 + I = 0x2a7 + 0x49 = 0x2f0 よって答えは0x2f0となる。 次に10進数に変換してから10進数で計算し、その後16進数に戻し、答えが同じか どうか確かめる. 16進数10進数に直す。 S=0x53= 83 A=0x41= 65 I=0x49= 73 T=0x54= 84 O=0x4f= 79 K=0x4b=75 O=0x4f=79 H=0x48=72 E=0x45=69 I=0x49=73 となる。 10進数の合計を求める。 83 + 65 + 73 + 84 + 79 + 75 + 79 + 72 + 69 + 73 = 752 確かめ算 pan{SAITO Kohei}% bc -l 83+65+73+84+79+75+79+72+69+73 752 これを16進数に直す。 752 / 16 = 47 余り0 47 / 16 = 2 余りf(15) 2 / 16 = 0 余り2 答えは 0x2f0 となり16進数の計算結果と同じ答えが出たのでこの答えは 正しい。 B.毎日の洗濯の手順をプログラム風に書き直した。 def wash(cloth, cleaner, water) cloth を入れる。 cleaner を取り出す。 dish = cloth に cleaner をかける。 dish = dish に water をかける。 end wash(1000g, 20g, 水 40 L) print("洗濯終わり\n") 2.プログラム問題 選択した問題 A a)考えた設定 基数と進数の計算をするプログラム def_power.rb を作成した。 b)作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp def power(x, y) #名前 引数 処理内容 x ** y #基数と指数の計算式 end STDERR.print("基数を入力: ") base = gets.chomp.to_i #基数の数を入力出来るようにする STDERR.print("指数を入力: ") index = gets.chomp.to_i #指数の数を入力出来るようにする printf("%d の %d 乗は %d です。\n", base, index, power(base, index)) #power(base,index) は def power(x,y)と同じ c)元にしたプログラムからの変更点 題4回のレポート課題で作成した def_twoparam.rb のプログラムを元に、関数の 計算式を基数と指数の計算式に変更した。 d)結果画面 pan{c111067}% ./def_power.rb [~/Ruby] 基数を入力: 3 指数を入力: 5 3 の 5 乗は 243 です。 確かめ算 pan{c111067}% bc -l [~/Ruby] 3*3*3*3*3 243 考察 最初にプログラムを起動したとき、printf文に改行するための \n を付け忘れた ので文章の最後に % がついていた。\n を加えたところ、正常に起動した。 計算結果は確かめ算と答えが一致していたのでこのプログラムは正常に起動した といえる。 参考文献 基礎プログラミング II 第 4 回 (繰り返しは引っ張りだそう) 「どんな関数が きてもだいじょうぶ」 http://roy/~madoka/2012/r2/04/r2_04_03_theme_03_method.html 作成者 西村まどか 選択した問題 B a)考えた設定 洗剤とティッシュぺーパーを購入した金額の合計を求めるプログラムtwo_power.rb を作成した。このプログラムでは洗剤を4個までは198円、5個以上は228円に値段 が変わるよう設定した。 b)作成したプログラム #!/usr/koeki/bin/ruby #coding:euc-jp def price(a, b) #名前 引数 処理内容 198 * a + 228 * b if a > 4 # a が値段が個数によって変わることを説明する。 198 *4 + 238 * (a -4) + 228 * b else 198 * a + 228 * b end end STDERR.print("洗剤の個数は?: ") washer = gets.chomp.to_i #洗剤の個数を入力できるようにする。 STDERR.print("ティッシュペーパーの個数は?: ") paper = gets.chomp.to_i #ティッシュペーパーの個数を入力できるようにする printf("洗剤を %d 個、 ティッシュペーパーを %d 個 購入した。\n", washer,paper) printf("合計金額: %d 円 \n" , price(washer,paper)) # price(washer,paper) は def price(a,b)と同じ c)元にしたプログラムからの変更点 A問題と同様 def_twoparam.rb のプログラムを元に、購入した商品の合計金額求 めるプログラムと、個数によってねだんが変わるプログラムを追加した。 d)結果画面 洗剤を4個買ったときと5つ買ったときの計算結果を求めた。 1) pan{c111067}% ./two_power.rb [~/Ruby] 洗剤の個数は?: 4 ティッシュペーパーの個数は?: 3 洗剤を 4 個、 ティッシュペーパーを 3 個 購入した。 合計金額: 1476 円 確かめ算 pan{c111067}% bc -l [~/Ruby] 198+198+198+198+228+228+228 1476 2) pan{c111067}% ./two_power.rb [~/Ruby] 洗剤の個数は?: 5 ティッシュペーパーの個数は?: 3 洗剤を 5 個、 ティッシュペーパーを 3 個 購入した。 合計金額: 1714 円 確かめ算 pan{c111067}% bc -l [~/Ruby] 198+198+198+198+238+228+228+228 1714 e)考察 最初プログラムを起動したとき、洗剤を5個以上購入したときの計算で洗剤の値 段が全て238円で計算されていた。原因は 計算式が a >4 となっていて、4個ま での金額と5個以上の計算を分けていなかったからだと分かった。なので、計算 式を 198 *4 + 238 * (a -4) + 228 * b とし、198円のときの式と238円のとき の計算を分けて入力したところ、正常に起動した。 二通りの計算結果を出し、どちらも答えが正しく表示されていたので、このプロ グラムは正しいといえる。 参考文献 基礎プログラミング II 第 4 回 (繰り返しは引っ張りだそう) 「どんな関数が きてもだいじょうぶ」 http://roy/~madoka/2012/r2/04/r2_04_03_theme_03_method.html 作成者 西村まどか 感想 今回のプログラム作成では、自分の計算力の低さが目だったと思う。特に、プロ グラム問題の B問題で 個数によって値段が変わるような計算式を作るとき、何 の疑問も持たず、一まとめにして計算式を入力していた。なので計算力を身に着 けるよう努力しようと思った。 機械的な操作を繰り返すものとして音楽プレーヤーのリピート機能や、メトロノー ムの針が左右に動くことなどが挙げられると思った。 共同学習者 遠藤拓真 佐藤智久