6 月 6 日のレポートについて 語学クラス:XXXX語XX 系: XXXX系 学籍番号:C106XXXX 氏名: XXXXXXXX 1. 過程を示しながら答えよ。 1. 0xabc = 0b?? 1文字ずつ16進数から2進数に変換する。 0x a = 0b 1010 0x b = 0b 1011 0x c = 0b 1100 これを繋げて 0x abc = 0b 101010111100 (答) 2. 0b11010001 + 0b1 - 0b1100 = 0d?? まず各2進数を10進数に変換する。 0b 11010001 = 0d 209 1×2**7 + 1×2**6 + 1×2**4 + 1×2**0 = 128 + 64 + 16 + 1 = 209 0b 1 = 0d 1 0b 1100 = 0d 12 1×2**3 + 1×2**2 = 8 + 4 = 12 これらを整理して 209 + 1 - 12 = 198 よって 0b 11010001 + 0b 1 - 0b 1100 = 0d 198 (答) 参考データ 〜 the 16 進数のまとめ 〜 http://roy/~madoka/2007/r1/04/04-12-binary2.html 2. できるところまで答えよ。考察では bc -l を使って確認する。 必ず計算して調べること。自作のデータもプログラムも忘れずに添付する。 1. 飯森山にあるレンタルビデオ屋の売り上げ伝票をまとめたデータ iimori.dat について、その日の売り上げと客単価を計算させる プログラム。貸し出しは 1 日 1 本あたり 100 円である。データ は自分で作成する。6 行以上のデータとする。 rental.rb (C+) a. 作成したプログラム 〜 rental.rb 〜 #!/usr/koeki/bin/ruby a = 0 #人数の初期化 sum = 0 #合計金額(日数)の初期化 #2つは初期値の設定 while iimori = gets if /(\S+)\s+(\S+)\s+(\d+)/ =~ iimori #3列目の数値を計算するため sum += $3.to_i #整数なので i a += 1 end end average = sum/a #平均を求めるため合計÷顧客数 printf("客単価は %d 円です。\n",average) printf("また、本日の売り上げは %d 円となりました。\n",sum) 〜 iimori.dat 〜 シャルルマーニュ ドラえもん 400 ジャンヌ・ダルク タイタニック 700 フィリップ スイングガールズ 500 フビライ・ハン 天空の城ラピュタ 800 ボニファティウス8世 ドラゴンボール 1000 羽柴秀吉 ホームアローン 500 マホメット 座頭市 800 インノケンティウス3世 ターミネーター 400 b. もとにしたプログラムからの変更点 変更点はお金なので小数点を省いて考えた。あと、datを日数でやろうとし たのだが、*がうまく作動しなかったようで結局金額をそのまま打ち込んだ。 c. プログラムを実行した結果画面 irsv{c106113}% ./rental.rb iimori.dat [~/Ruby] 客単価は 637 円です。 また、本日の売り上げは 5100 円となりました。 d. 導き出された結果の考察 合計金額 400 + 700 + 500 + 800 + 1000 + 500 + 800 + 400 = 1600 + 2300 + 1200 = 5100 客単価 5100 ÷ 8 = 637.5 値段を整数にするプログラムを書いたので切り捨てて結果 637 円と表示。 e. 参考文献 (参照した本、ホームページなど) 〜 データから平均を求めよう 〜 http://roy/~madoka/2007/r1/08/08-04-addition.html 2. 2 つのランチメニュー (A: 650 円, B: 550 円) しかない黒森の オープンカフェ。片方を残し、片方を新メニューに入れ替えたい。 売り上げ伝票 kuromori.dat から、総売り上げ、客単価、どちらの ランチメニューの注文が多いかが分かる プログラム cafe.rb (B+)。 データは自分で作ってよい。データ数は少なくとも 6 行以上。 a.作成したプログラム 〜 cafe.rb 〜 #!/usr/koeki/bin/ruby x = 0 #初期値の設定 sum = 0 #初期値の設定 a = 0 #初期値の設定 b = 0 #初期値の設定 while total = gets if /(\S+)\s+(\d+)\s+(\d+)\s+(\d+)/ =~ total sum += $4.to_i #4つ目の(\d+)を計算。 a += $2.to_i #2つ目の(\d+)を計算。 b += $3.to_i #3つ目の(\d+)を計算。 x += 1 end end average = sum/x #売り上げの平均算出 printf("今日の売り上げは %d 円、顧客数は %d 人でした。\n", sum, x) printf("客単価は %d 円でした。\n", average) printf("本日は…\n") printf("A が %d セット\n",a) printf("B が %d セット それぞれ御注文頂きました!\n",b) if a > b #Aの数量の方が多ければ下記の文章を表示させる。 print("また、今回は A セットの御注文を多く頂きました。\n") elsif a < b #Bの数量の方が多ければ下記の文章を表示させる。 print("また、今回は B セットの御注文を多く頂きました。\n") else #どちらにも当てはまらない、すなわちA=Bのとき下記の文章を表示。 print("また、今回は A セットも B セットも同じ数の御注文を頂きました。\n") end 〜 kuromori.dat 〜 顧客A 1 0 650 顧客B 1 0 650 顧客C 0 1 550 顧客D 1 0 650 顧客E 0 1 550 顧客F 1 0 650 顧客G 0 1 550 顧客H 1 0 650 顧客I 0 1 550 顧客J 0 1 550 顧客K 0 1 550 顧客L 1 0 650 顧客M 1 0 650 顧客N 0 1 550 顧客0 1 0 650 顧客P 1 0 650 顧客Q 0 1 550 顧客R 0 1 550 顧客S 1 0 650 顧客T 1 0 650 顧客U 0 1 550 顧客V 1 0 650 顧客W 1 0 650 顧客X 1 0 650 顧客Y 0 1 550 顧客Z 0 1 550 b.もとにしたプログラムからの変更点 最初にやったプログラムをちょっと書き変えてみた。 人数表示どうやろうか迷ったあげく、AとBで注文した人を0と1で分けた。 c.プログラムを実行した結果画面 α:上記のプログラムで実行した場合 irsv{c106113}% ./cafe.rb kuromori.dat [~/Ruby] 今日の売り上げは 15700 円、顧客数は 26 人でした。 客単価は 603 円でした。 本日は… A が 14 セット B が 12 セット それぞれ御注文頂きました! また、今回は A セットの御注文を多く頂きました。 β:上記のプログラムでBセットを多くした場合。 ※顧客Aと顧客BにBセットを注文させた。 irsv{c106113}% ./cafe.rb kuromori.dat [~/Ruby] 今日の売り上げは 15500 円、顧客数は 26 人でした。 客単価は 596 円でした。 本日は… A が 12 セット B が 14 セット それぞれ御注文頂きました! また、今回は B セットの御注文を多く頂きました。 γ:上記のプログラムでAセットとBセットを多くした場合。 ※顧客AのみBセットを注文させた。 irsv{c106113}% ./cafe.rb kuromori.dat [~/Ruby] 今日の売り上げは 15600 円、顧客数は 26 人でした。 客単価は 600 円でした。 本日は… A が 13 セット B が 13 セット それぞれ御注文頂きました! また、今回は A セットも B セットも同じ数の御注文を頂きました。 d.導き出された結果の考察 確認計算 α: 650 × 14 = 9100 550 × 12 = 6600 9100 + 6600 = 15700 β: 650 × 12 = 7800 550 × 14 = 7700 7800 + 7700 = 15500 γ: 650 × 13 = 8450 550 × 13 = 7150 8450 + 7150 = 15600 おk。 とりあえず、プログラムでifやelse使ってAやBどちらのセットが多く 注文されたかというのを作ったので確かめるべく3つdatを変えて実行 してみた。最初$2や$3でやってしまいきちんと動かなかったのでaやbに したらきちんと実行されてよかった。 3. 感想。一番頑張ったことを中心に、前向きな感想にすること。 進数変換はほぼ大丈夫になった。特に迷うこと無くこなせる状況になっ たと思う。プログラムのほうが難しく、授業でやったaverageを駆使し頑 張った。特に2-2は自分的にはやりがいがあった気がする。昔やったelsif やelseが出てくるとは思わなかった。もっと簡潔にプログラム作れる人は 作れるのだろうけれども自分にはこれが精一杯だった。もっと練習して簡 単にプログラム組めるようになれたらいいなと思った。