第6回 基礎プログラミング I レポート課題 氏名: xxxxxxxx 学籍番号:c109xxx 語学クラス:中国語 コース(系):政策 1.筆記問題 A. 誕生日1990年8月29日 二進数 0d1990 1990/2 = 995余り0 995/2 = 497余り1 497/2 = 248余り1 248/2 = 124余り0 124/2 = 62余り0 62/2 = 31余り0 31/2 = 15余り1 15/2 = 7余り1 7/2 = 3余り1 3/2 = 1余り1 1/1 = 0余り1 0d1990 = 0b111110001100 d8 8/2 = 4余り0 4/2 = 2余り0 2/2 = 1余り0 1/2 = 0余り1 0d8 = 0b1000 0d29 29/2 = 14余り1 14/2 = 7余り0 7/2 = 3余り1 3/2 = 1余り1 1/2 = 0余り1 0d29 = 0b11101 上記より誕生日を二進数で表すと11111000110年1000月11101日になる。 16進数 0d1990 = 0b11111000110 1990/16 = 124余り6 124/16 = 7余り12 7/16 = 0余り7 0X=7126 12は16進数でCなので 0x=7C26 0d8 = 0b1000 下の表から 0d8 = 0x8 0d29 = 0b11101 後から4つずつ区切り下の表を見ると。 1101 = D 1 = 1 0x8 = D1 10進数 0 1 2 3 4 5 6 7 8 9 10 11 12 13 2進数 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 16進数 0 1 2 3 4 5 6 7 8 9 A B C D よって16進数で誕生日を表すと7C26年8月D1日となる。 ASCII表より k = 6b i = 69 n = 6e a = 61 y = 79 u = 75 u = 75 B. きょうじゅう に たべましょう (今日中に食べましょう) きょうじゅ うに たべましょう (教授ウニ食べましょう) きょう じゅうに たべましょう (今日12食べましょう) C. 車のメーカーをhash 配列 car とした。 car の key は車種、value は メーカー,価格,燃費とした。 1:key「ワゴンR」に対して value は「"スズキ","118","23"」 2:key「プレオ」に対して value は「"スバル","22""103","24"」 3:key「ムーブ」に対して value は「"ダイハツ","120","22"」 4:key「パッソ」に対して value は「"トヨタ","140","21"」 5:key「ベンツ」に対して value は「"メルセデスベンツ","1000","8」 これに対応する配列の表し方は car["ワゴンR"] = ["スズキ","118","23"] car["プレオ"] = ["スバル","22","103","24"] car["ムーブ"] = ["ダイハツ","120","22"] car["パッソ"] = ["トヨタ","140","21"] car["ベンツ"] = ["メルセデスベンツ","1000","8] もう一つの表し方は {"ワゴンR" =>["スズキ","118","23"] ,"プレオ" => ["スバル","22","103","24"] ,"ムーブ" =>["ダイハツ","120","22"] ,"パッソ" => ["トヨタ","140","21"] ベンツ=> ["メルセデスベンツ","1000","8],} 2.プログラム問題 a.プログラム本体 #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語コード EUC で出力する。 car = Hash.new # Hash配列 car["ワゴンR"] = "スズキ","118","23" car["プレオ"] = "スバル","103","24" car["ムーブ"] = "ダイハツ","120","22" car["パッソ"] = "トヨタ","140","21" car["ベンツ"] = "メルセデスベンツ","1000","8" for make , en in car # 全ての Hash を出力し、項目の一覧表を作る。 printf("「%s」は『%s』の車です。 この車は 価格が%d 万円で燃費は %dkm です。\n\n",make,en[0],en[1],en[2]) end 実行結果 pan{c109056}% ./hash_any_print.rb [~/Ruby] 「ベンツ」は『メルセデスベンツ』の車です。 この車は 価格が1000 万円で燃費は 8km です。 「ワゴンR」は『スズキ』の車です。 この車は 価格が118 万円で燃費は 23km です。 「パッソ」は『トヨタ』の車です。 この車は 価格が140 万円で燃費は 21km です。 「ムーブ」は『ダイハツ』の車です。 この車は 価格が120 万円で燃費は 22km です。 「プレオ」は『スバル』の車です。 この車は 価格が103 万円で燃費は 24km です。 考察 車種、メーカー、値段、燃費が全て正しくでたのでこのプログラムは正しいとい える。 B. 考えた設定:価格の安い順に並べるプログラム プログラム本体 #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語コード EUC で出力する。 car = Hash.new # Hash配列 car["ワゴンR"] = "スズキ","118","23" car["プレオ"] = "スバル","103","24" car["ムーブ"] = "ダイハツ","120","22" car["パッソ"] = "トヨタ","140","21" car["ベンツ"] = "メルセデスベンツ","900","8" car.keys.sort{|a,b| car[a][1]<=> car[b][1]}.each{|en| printf("『%s』の価格は %d 万円です。\n",en,car[en][1])} 実行結果 pan{c109056}% ./hash_any_sort.rb [~/Ruby] 『プレオ』の価格は 103 万円です。 『ワゴンR』の価格は 118 万円です。 『ムーブ』の価格は 120 万円です。 『パッソ』の価格は 140 万円です。 『ベンツ』の価格は 900 万円です。 考察 安い順に並んだのでこのプログラムは正しい。 C. 考えた設定:燃費の平均をだす。 プログラム本体 #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語コード EUC で出力する。 total = 0 # total の初期値を0にした。 car = Hash.new # Hash配列 car["ワゴンR"] = "スズキ",118,23 car["プレオ"] = "スバル",103,24 car["ムーブ"] = "ダイハツ",120,22 car["パッソ"] = "トヨタ",140,21 car["ベンツ"] = "メルセデスベンツ",900,10 car.keys.sort{|a,b| car[a][2]<=> car[b][2]}.each{|en| printf("『%s』の燃費は\ %d kmです。\n",en,car[en][2])} for make , nenpi in car total += nenpi[2] end average = total.to_f/car.length # 平均を求める。 printf("\n平均燃費は %4.1f kmです。\n",average) 実行結果 pan{c109056}% ./hash_any_calc.rb [~/Ruby] 『ベンツ』の燃費は 10 kmです。 『パッソ』の燃費は 21 kmです。 『ムーブ』の燃費は 22 kmです。 『ワゴンR』の燃費は 23 kmです。 『プレオ』の燃費は 24 kmです。 平均燃費は 20.0 kmです。 確かめ算 pan{c109056}% bc -l [~/Ruby] (10+21+22+23+24)/5 20.00000000000000000000 考察 確かめ算よりこのプログラムは正しいことがわかった。 D. 考えた設定:datを読みこみ燃費の平均をだす。 プログラム本体 #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語コード EUC で出力する。 total = 0 car = Hash.new # Hash配列 open("hash_any_data.dat","r") do |c| while kuruma = c.gets if/(\S+)\s+(\S+)\s+(\d+)\s+(\d+)/ =~kuruma car[$1] = [$2, $3.to_i, $4.to_i] end end end car.keys.sort{|a,b| car[a][2]<=> car[b][2]}.each{|en| printf("『%s』の燃費は\ %d kmです。\n",en,car[en][2])} for make , nenpi in car total += nenpi[2] end average = total.to_f/car.length printf("\n平均燃費は %4.1f kmです。\n",average) 実行結果 pan{c109056}% ./hash_any_read.rb [~/Ruby] 『ベンツ』の燃費は 8 kmです。 『パッソ』の燃費は 21 kmです。 『ムーブ』の燃費は 22 kmです。 『ワゴンR』の燃費は 23 kmです。 『プレオ』の燃費は 24 kmです。 平均燃費は 19.6 kmです。 確かめ算 pan{c109056}% bc -l [~/Ruby] (8+21+22+23+24)/5 19.60000000000000000 考察 確かめ算より小数点第一位まで表示すると19.6なのでこのプログラムは正しいと いえる。 感想 今回は前回よりhashの使い方がわかってきた。平均をだすプログラムを 作るのが難しく大変だった。簡単なミスが多くプログラムがなかなか起動しなく て疲れた。 何度も繰り返す昔話 桃太郎 お婆さんが川へ洗濯にいく → 桃を拾う 桃を拾う → 桃を割る 桃を割る → 桃太郎が産まれる 桃太郎が産まれる → 桃太郎が鬼退治にいく 桃太郎が鬼退治にいく → キジ、猿、犬を手に入れる キジ、猿、犬を手に入れる → 鬼ヶ島にいく 鬼ヶ島にいく → 鬼を倒す 鬼を倒す → ハッピーエンド 参考文献 第2回 なになにといえばこれこれ http://roy/~madoka/2010/r2/02/ 第3回 情報の構造を分析しよう http://roy/~madoka/2010/r2/03/ 著者:西村まどか先生 共同学習者 遠藤裕貴、久保田英一郎、横山君