6 月 6 日のレポートについて 語学クラス:XXXX語 系 :XXXX系 学籍番号 :c106XXXX 氏名 :XXXXXXXXx 1. [A] 0x abc = 0b ?? まず、16 進数表示から 10 進数表示にする過程は・・・ 第 4 回の授業「プログラミングの方法」より、「2 進数, 16 進数変換 (2)」 の表を参考にして解読する。 c×16の0乗+b×16の1乗+a×16の2乗 = c+b×16+a×256 = 12+176+2560 = 2748 よって、0d 2748 次に、10 進数表示から 2 進数表示にする過程は・・・ 0d 2748 2 ) 2748 ・・・ 余り 0 --------- 2 ) 1374 ・・・ 余り 0 --------- 2 ) 687 ・・・ 余り 1 --------- 2 ) 343 ・・・ 余り 1 --------- 2 ) 171 ・・・ 余り 1 --------- 2 ) 85 ・・・ 余り 1 --------- 2 ) 42 ・・・ 余り 0 --------- 2 ) 21 ・・・ 余り 1 --------- 2 ) 10 ・・・ 余り 0 --------- 2 ) 5 ・・・ 余り 1 --------- 2 ) 2 ・・・ 余り 0 --------- 1 よって、0x abc = 0b 101010111100 答えが正しいか確かめるために・・・ 第 4 回の授業「プログラミングの方法」より、「2 進数, 16 進数変換 (2)」 の表を参考にして解読する。 0b 101010111100 は、1010 と 1011 と 1100 に分けることができる。 よって、答えは 0b 101010111100 = 0x abc [B] 0b 11010001 + 0b 1 − 0b 1100 = 0d ?? まず、各 2 進数表示の値を 10 進数表示に直すと・・・ 0b 11010001 1×2の0乗+0×2の1乗+0×2の2乗+0×2の3乗+1×2の4乗+0×2の5乗 +1×2の6乗+1×2の7乗 = 1+0+0+0+16+0+64+128 = 209 よって、0d = 209 0b 1 1×2の0乗 = 1 よって、0d = 1 0b 1100 0×2の0乗+0×2の1乗+1×2の2乗+1×2の3乗 = 0+0++8 = 12 よって、0d = 12 0d 209 + 0d 1 − 0d 12 = 0d 198 よって、0b 11010001 + 0b 1 - 0b 1100 = 0d 198 2. [A] A) その日の売り上げと客単価を計算させるプログラ厶について B) 作成したデータ iimori.dat 名前 furigana 本数 日数 鈴井 suzui 1 1 森崎 morisaki 4 5 安田 yasuda 8 4 佐藤 satou 7 6 大泉 ooizumi 2 1 音尾 otoo 13 7 川島 kawasima 1 2 田村 tamura 8 5 徳井 tokui 11 7 福田 fukuda 9 7 土屋 tutiya 4 3 加藤 katou 14 7 奥村 okumura 6 3 引地 hikiti 12 8 加納 kanou 1 1 新井 arai 18 7 石田 isida 20 10 井上 inoue 2 2 陣内 jinnnai 11 6 C) その日の売り上げと客単価を計算し、結果を表示する。 D) 作成したプログラム rental.rb #!/usr/koeki/bin/ruby e = 0 # 人数 e の初期化 sum = 0 # 和 sum の初期化 average = 0 # 平均 average の初期化 while line = gets # while -- end の条件 # while 変数 = gets 正規表現を探す処理 if /\S+\s+\S+\s+(\d+)\s+(\d+)/ =~ line # if -- end の条件 # if /(\S+)\s+(\S+)\s+(\S+)/ =~ 変数 # /(優先された文字列 1)優先されない文字列(優先された文字列 2)優先されない文字列 ... / =~ 変数 sum += $1.to_f * $2.to_f * 100 # $1 は 優先された文字列 1 を引き取る # $2 は 優先された文字列 2 を引き取る e += 1 # 人数 += 数値 end end average = sum/e # 平均 = 合計 ÷ 人数 printf("この日1日の売り上げ金額は合計 %d 円です。 \n", sum) # printf("変換指定子",変数) printf("この日1日の客単価は %d 円です。\n",average) # printf("変換指定子",変数) E) rental.rb を実行した結果 irsv{c106110}% ./rental.rb iimori.dat [~/Ruby] この日1日の売り上げ金額は合計 99100 円です。 この日1日の客単価は 5215 円です。 ★確かめ算★ 売り上げ総数 irsv{c106110}% bc -l [~/Ruby] (1*1*100)+(4*5*100)+(8*4*100)+(7*6*100)+(2*1*100)+(13*7*100)+(1*2*100)+(8*5*100)+(11*7*100)+(9*7*100)+(4*3*100)+(14*7*100)+(6*3*100)+(12*8*100)+(1*1*100)+(18*7*100)+(20*10*100)+(2*2*100)+(11*6*100) 99100 客単価 irsv{c106110}% bc -l [~/Ruby] 99100/19 5215.78947368421052631578 F) 参考にしたプログラム 今日の授業でやったデータから平均を求めるには」の average.rb を参考にした。 [B] A) その日の総売り上げと客単価を調べ、新メニュー導入を検討するプログラム について B) 作成したデータ kuromori.dat ランチメニュー A A B B B A B B A A A B A A A B A A B A C) その日の売り上げと客単価を計算し、結果を表示する。 D) 作成したプログラム cafe.rb #!/usr/koeki/bin/ruby lanchiA = 0 # lanchiA の初期化 lanchiB = 0 # lanchiB の初期化 kyakutannka = 0 # 客単価 の初期化 souwa = 0 # 総売り上げ の初期化 r = 0 # 人数 r の初期化 while line = gets # while -- end の条件 # while 変数 = gets 正規表現を探す処理 if /(\w)/=~ line # if -- end の条件 # if /パターン/=~ 変数 if $1 == "A" # if -- end の条件 # もし $1 が A に等しければ lanchiA += 1 # elsif $1 == "B" # $1 は B に等しければ lanchiB += 1 # end r +=1 # 人数 += 変数 end end souwa = lanchiA*650 + lanchiB*550 # 総売り上げ = lanchiA × 650 + lanchiB × 550 kyakutannka = souwa/r # 客単価 = 総売り上げ ÷ 人数 if lanchiA > lanchiB # if -- end の条件 # A が B より大きいのならば print("ランチメニューは lanchiA の方が人気です。lanchiB を新しくしましょう。 \n") elsif lanchiA == lanchiB # A が B に等しければ print("ランチメニューの注文はどちらも同数です。どちらを新しくしますか? あなた次第です。\n") else # それ以外ならば print("ランチメニューは lanchiB の方が人気です。lanchiA を新しくしましょう。 \n") end printf("今日1日の総売り上げ金額は合計 %d 円でした。\n",souwa) # printf("変換指定子",変数) printf("今日1日の客単価は %d 円でした。\n",kyakutannka) # printf("変換指定子",変数) E) cafe.rb を実行した結果 irsv{c106110}% ./cafe.rb kuromori.dat [~/Ruby] ランチメニューは lanchiA の方が人気です。lanchiB を新しくしましょう。 今日1日の総売り上げ金額は合計 12200 円でした。 今日1日の客単価は 610 円でした。 ★確かめ算★ 総売り上げ irsv{c106110}% bc -l [~/Ruby] (12*650)+(8*550) 12200 客単価 irsv{c106110}% bc -l [~/Ruby] 12200/20 610.00000000000000000000 F) 参考にしたプログラム 今までの授業でやった西村先生のプログラム全て。 3. 感想 プログラムを作る際に、今までの授業で行なってきたことを思い出しながら作成 することができた。完全には思い出せないことも、どこに書いてあったかすぐに 探し出すことができたため、確実に頭に入っているのだと考えることができる。 この調子でさらに理解を深めていきたい。