第7回 基礎プログラミング I レポート課題 氏名:佐竹聡美 学籍番号:c1090816 語学クラス:英語1 コース:社会福祉 ---------------------------------------------------- 1、筆記問題 A,0b11110110 = 0x?? まず、2進数から16進数に変換する。右から4桁ごとに区切る。 「1111」と「0110」に分かれる。 「1111」 1 * 2の3乗 = 8 1 * 2の2乗 = 4 1 * 2の1乗 = 2 1 * 2の0乗 = 1 8 + 4 + 2 + 1 = 15 10進数の 15 は16進数にすると f になる。 「0110」 0 * 2の3乗 = 0 1 * 2の2乗 = 4 1 * 2の1乗 = 2 0 * 2の0乗 = 0 0 + 4 + 2 + 0 = 6 10進数の 6 は16進数にすると 6 になる。 よって、0b11110110 = 0xf6 となる。 B,0d256 = 0x?? まず、10進数から2進数に変換する。 256 / 2 = 128あまり0 128 / 2 = 64あまり0 64 / 2 = 32あまり0 32 / 2 = 16あまり0 16 / 2 = 8あまり0 8 / 2 = 4あまり0 4 / 2 = 2あまり0 2 / 2 = 1あまり0 1 / 2 = 0あまり1 よって、0d256 = 0b100000000 これを16進数に変換する。Aと同じように右から4桁ごとに区切る。 「0001」、「0000」、「0000」に分かれる。 「0001」 0 * 2の3乗 = 0 0 * 2の2乗 = 0 0 * 2の1乗 = 0 0 * 2の0乗 = 1 0 + 0 + 0 + 1 = 1 「0000」 0 * 2の3乗 = 0 0 * 2の2乗 = 0 0 * 2の1乗 = 0 0 * 2の0乗 = 0 0 + 0 + 0 + 0 = 0 「0000」 0 * 2の3乗 = 0 0 * 2の2乗 = 0 0 * 2の1乗 = 0 0 * 2の0乗 = 0 0 + 0 + 0 + 0 = 0 よって、0d256 = 0b100000000 = 0x100 となる。 ----------------------------------------------------------------- 2、プログラム問題 a.考えた設定 電池の売り上げ伝票をまとめたデータについて、その日の売り上げと客単価を計 算させるプログラム。 b.作成したプログラム #!/usr/koeki/bin/ruby syurui = Array.new #種類を選ぶ okane = Array.new #お金を選ぶ p = 0 #配列の番号 total = 0 #合計 open("battery.dat","r") do |e| while line = e.gets #変数にデータを1行ずつ入れて行き、データ #が無くなったら終了 if /(\S+)\s+(\d+)/ =~ line#文字列、空白、数字だったら以下のように作動する syurui[p] = $1 #$1はデータの種類の列 okane[p] =$2.to_f #$1はデータのお金の列 #to_fは小数、 $ で文字列を指定 if syurui[p] == "A" #もし 種類 が A に等しければ x = 400 * okane[p] elsif syurui[p] == "B" #種類は B に等しければ x = 300 * okane[p] else #それ以外だったら次の動作をする x = 50 * okane[p] end #ifに対するend total += x p += 1 end #ifに対するend end #whileに対するend end #openに対するend k = 0 printf("売上数\n") while k < syurui.length #lengthは配列に対してその個数を返し、 # k よりも大きくなったら終了 printf("%-10s\t%d\n",syurui[k],okane[k]) k += 1 end #whileに対するend tanka_d = total / 7 printf("売り上げ %d 円です。\n",total) printf("客単価は %2.1f 円です。\n", tanka_d) c.作成したデータ #タイプ #(パック)数売上げ A 1 B 12 C 8 A 4 B 2 B 3 C 1 d.もとにしたプログラムからの変更点 授業で作ったプログラムwrite_ticket.rbをもとにした。 ・stop は syuruiに変更。 ・dist は okaneに変更。 ・合計を出すために total を付け足した。 ・求める売り上げの」項目が3つあったために、elsif,elseを付け足した。 ・tanka_d = total / 7 は合計を電池のデータ7つで割り、単価が出る。 e.プログラムを実行した結果画面 pan{c109081}% ./open_battery.rb [~/Ruby] 売上数 A 1 B 12 C 8 A 4 B 2 B 3 C 1 売り上げ 7550 円です。 客単価は 1078.6 円です。 f.導き出された結果の考察 <各売上げの計算> pan{c109081}% bc -l [~/Ruby] 1*400 400 12*300 3600 8*50 400 4*400 1600 2*300 600 3*300 900 1*50 50 quit <合計> pan{c109081}% bc -l [~/Ruby] 400+3600+400+1600+600+900+50 7550 quit 売上げが7550円になった。 <客単価> pan{c109081}% bc -l [~/Ruby] 7550/7 1078.57142857142857142857 quit 客単価は1078.571428…で小数点第2を四捨五入し、1078.6になった。 よって、実行した結果と結果の考察の計算が一致したのでこのプログラムが正し いことが分かった。 ------------------------------------------------------------------------- 3、感想 授業で作ったプログラムをもとにどこを変更し、客単価を出すところを1番頑張っ た最初はどうしたらいいか悩んだが、友達と協力し完成させることが出来た。求 めるのが3つあったため前の授業を使って、計算を求めることが出来て良かった。 <今回学んだこと・分かったこと> ・\d+.\d+ → 数値列何か1文字数値列すなわち 「小数値」 ・=~ → AはBに含まれる ・\S+ → 空白文字以外の文字列が1個以上並んでいるものを探す ・\s+ → 空白文字が1個以上並んでいるものを探す <参考文献> 基礎プログラミング I 第7回 正規表現と Ruby 言語でのプログラミング http://roy/~madoka/2010/r1/07/ ・「データ取り出しプログラム」 http://roy/~madoka/2010/r1/07/07_02_theme_01_egrep.html ・「空白を利用してデータを取りだすには」 http://roy/~madoka/2010/r1/07/07_07_theme_06_tab.html ・「データを読み込むようにするには」 http://roy/~madoka/2010/r1/07/07_09_theme_08_fileread.html ・「候補駅を選べるようにするには」 http://roy/~madoka/2010/r1/07/07_11_theme_09_candidate.html ・「券売機のしくみ」 http://roy/~madoka/2010/r1/07/07_13_theme_11_vendingmachine.html <共同学習者> * 酒井 春香 *小松由里