6 月 6 日のレポートについて 語学クラス:XXXX語 XX 系: XXXX系 学籍番号: C106XXXX 氏名: XXXXXXXX 1、 A. 0xabc = 0b?? 西村先生のHPを参考に、abcを16進法に当てはめる。 a → 1010 b → 1011 c → 1100 となる。 すなわち、 0b = 101010111100 B. 0b11010001 + 0b1 - 0b1100 = 0d?? それぞれを10進法に変換する。 0b11010001は 1×2*7 =128 1×2*6 =64 0×2*5 =32 1×2*4 =16 0×2*3 =8 0×2*2 =4 0×2*1 =2 1×2*0 =1 それぞれで求めた値をたしていく。 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 241 0b11010001 = 209 0b1は 1×2*0 = 1 0d = 1 0b1100は 1×2*3 =8 1×2*2 =4 0×2*1 =0 0×2*0 =0 それぞれで求めた値を足す。 8 + 4 + 0 + 0 = 12 0d=12 10進法に変換した、それぞれの値を0b11010001 + 0b1 - 0b1100 の式に当てはめ て計算すると 209 + 1 − 12 = 198 すなわち 0d = 198 ●参考文献 西村先生のHP http://roy/~madoka/2007/r1/04/04-12-binary2.html 16進数のまとめより http://www.asahi-net.or.jp/~AX2S-KMTN/ref/bdh.html 2進数、16進数と10進数より 2、 A ●作成したプログラム #!/usr/koeki/bin/ruby n = 0 #人数の初期化 sum = 0 #合計の初期化 while rental = gets if /(\S+)\s+(\S+)\s+(\d+)/=~ rental sum += $3.to_f n += 1 end end average = sum/n #人数÷合計 printf("今回の売上は %d 円です。\n" , sum*100) printf("今回の客単価は %5.1f円です。\n" , average*100) ●作成したプログラムの説明 5行目の(\d+)は数字を切り出す。 6行目は $3 に入っている数字を、小数になっても処理できるようにする。 11行目は借りたビデオの本数×100で合計を表す。 12行目は一人当たり何本のビデオを借りたか表し、100を×ことで客単価を表す。 ●データの張りつけ 小野寺 慶三 オノデラ ケイゾウ 12 森 美枝 モリ ミエ 3 鈴木 繁子 スズキ シゲコ 8 田澤 祥子 タザワ ショウコ 19 相田 あゆみ アイタ アユミ 4 佐藤 唯 サトウ ユイ 16 中里 さと ナカザト サト 6 ●プログラムを実行した結果画面 irsv{c106145}% ./rental.rb iimori.dat [~/Ruby] 今回の売上は 6800 円です。 今回の客単価は 971.4円です。 ●bc -lで確認した結果 レンタル本数×1本当たりの値段(100円)を7人分計算する。 プログラムを実行した結果画面の通り、6800円が出れば、プログラムは正しい。 irsv{c106145}% bc -l 12*100+3*100+8*100+19*100+4*100+16*100+6*100 6800 6800と出たので、プログラムは正しい。 売上を人数で割って客単価を計算する。 プログラムを実行した結果画面の通り、971.4円と出れば、プログラムは正しい。 6800/7 971.42857142857142857142 971.4と出たので、プログラムは正しい。 B ●作成したプログラム #!/usr/koeki/bin/ruby n = 0 #人数の初期化 sum = 0 #合計の初期化 a = 0 #Aランチを注文した人の人数の初期化 b = 0 #Bランチを注文した人の人数の初期化 while cafe = gets if /(\S+)\s+(\S+)\s+(\S+)\s+(\d+)/=~ cafe sum += $4.to_f # f は小数点以下も表すことが出来る。 lunch = $3 n += 1 if lunch == "A" a += 1 end if lunch == "B" b += 1 end end end average = sum/n printf("本日の総売上は %d です。\n" , sum) printf("本日の客単価は %5.1f円です。\n" , average) printf("メニューAは %d 個売れ、メニューBは %d 個売れました。\n" , a, b) if a > b print("Aセットの方が多いです。\n") end if a == b print("AセットとBセットの注文数は同じです。\n") end if a < b print("Bセットの方が多いです。\n") end ●作成したプログラムの説明 20行目は小数と5桁まで表すことが出来る。小数点を1にすることで、小数点を四 捨五入することが出来る。 ●データの張りつけ 小野寺 慶三 オノデラ ケイゾウ A 650 森 美枝 モリ ミエ B 550 鈴木 繁子 スズキ シゲコ A 650 田澤 祥子 タザワ ショウコ A 650 相田 あゆみ アイタ アユミ B 550 佐藤 唯 サトウ ユイ B 550 中里 さと ナカザト サト B 550 ●プログラムを実行した結果画面 irsv{c106145}% ./cafe.rb kuromori.dat [~/Ruby] 本日の総売上は 4150 です。 本日の客単価は 592.9円です。 メニューAは 3 個売れ、メニューBは 4 個売れました。 Bセットの方が多いです。 ●bc -lで確認した結果 7人分のランチをそれぞれのメニューで足す。 プログラムの4150円が出れば、プログラムは正しい。 irsv{c106145}% bc -l [~/Ruby] 650+550+650+650+550+550+550 4150 4150と出たので、プログラムは正しい。 総売上÷人数で客単価を出す。 プログラムの592.9円が出れば、プログラムは正しい。 4150/7 592.85714285714285714285 四捨五入すると592.9になるので、プログラムは正しい。 C ●作成したプログラム #!/usr/koeki/bin/ruby sum = 0 #合計の初期化 paper = 0 money = 0 cost = 0 while copy = gets if /(\S+)\s+(\S+)\s+(\d+)/=~ copy sum = $3.to_i if sum < 30 #30枚以下の条件 paper += 10 * sum end if sum >= 30 #30枚以上の条件 money += 7 * sum end end end printf("10円でのコピー代は %d 円 です。\n" ,paper) printf("7円でのコピー代は %d 円 です。\n" ,money) cost = paper + money printf("コピー代は %d 円 です。\n" ,cost) ●データの張りつけ 07:11 小野寺 慶三 12 08:34 森 美枝 34 09:45 鈴木 繁子 66 10:22 田澤 祥子 4 11:01 相田 あゆみ 22 12:58 佐藤 唯 9 15:19 中里 さと 10 ●実行した結果画面 irsv{c106145}% ./copy.rb copy.dat [~/Ruby] 10円でのコピー代は 570 円 です。 7円でのコピー代は 700 円 です。 コピー代は 1270 円 です。 ●bc -lで確認した結果 irsv{c106145}% bc -l 30枚以下のコピーをとった人のコピー枚数をたす。そのコピー枚数を10円で かけ、合計をだす。プログラムでは570円になったので、570になればプログラムは正しい。 (12+4+22+9+10)*10 570 570になったので正しい。 30枚以上のコピーをとった人のコピー枚数をたす。そのコピー枚数を7円えかけ、 合計をだす。プログラムでは700円になったので、700になればプログラムは正し い。 (34+66)*7 700 700になったので正しい。 30枚以下のコピーをとった人と、30枚以上のコピーをとった人のコピーの合計金 額をたす。プログラムでは、1270円になったので、1270になれば正しい。 570+700 1270 1270になったので正しい。 3、 今回のレポートで頑張ったところは、プログラムの作成だ。 $や(\S+)の使い方が前より分るようになった。(\S+)の数や、$にいれる数字が間 違うと全く動かず、苦労したが作成できたのでよかった。 今回は、前回よりもスムーズにプログラムを作成することが出来たので、この調 子で頑張りたい。