第2回 基礎プログラミング II レポート課題 氏名:笹木郁哉 学籍番号:c1090791 語学クラス:英語1 コース(系):地域 1.A 自動車の車種を hash 配列 car にしました。 car の key とvalue はそれぞれ車種名とメーカーにしました。 その1 : key 「セルシオ」 に対して、 value は 「トヨタ」 その2 : key 「シーマ」 に対して、 value は 「日産」 その3 : key 「レジェンド」 に対して、 value は 「ホンダ」 その4 : key 「センティア」 に対して、 value は 「マツダ」 その5 : key 「プラウディア」 に対して、 value は 「三菱」 その6 : key 「LS600h」 に対して、 value は 「レクサス」 これに対応する hash の表し方は、 car["セルシオ"] = "トヨタ" car["シーマ"] = "日産" car["レジェンド"] = "ホンダ" car["センティア"] = "マツダ" car["プラウディア"] = "三菱" car["LS600h"] = "レクサス" また、もう一つの表し方は、 {"セルシオ" => "トヨタ","シーマ" => "日産","レジェンド" => "ホンダ", "センティア" => "マツダ","プラウディア" => "三菱","LS600h" => "レクサ ス"} と、このような形になる。 1.B a. 0d2010 = 0x?? まず始めに0dは10進数を、0xは16進数を表す。 10進数を16進数に変換するには、10進数を商が0になるまで 16で割っていき、その余りを見る。 2010 / 16 =125...10(A) 125 / 16 = 7...13(D) 7 / 16 = ...7 0x7DA よって答えは、0d2010 = 0x7DA b. 0d2010 = 0b?? まず始めに0dは10進数を、0bは2進数を表す。 10進数を2進数に変換するには、10進数を商が0になるまで 2で割っていき、その余りを見る。 2010 / 2 = 1005...0 1005 / 2 = 502...1 502 / 2 = 251...0 251 / 2 = 125...1 125 / 2 = 62...1 62 / 2 = 31...0 31 / 2 = 15...1 15 / 2 = 7...1 7 / 2 = 3...1 3 / 2 = 1...1 1 / 2 = 0...1 下から順に、0b11111011010となる。 計算の確認 2進数を4桁ごとに区切り、対応している数字を16進数表示する。 0111 0 * 2 3 = 0 1 * 2 2 = 4 1 * 2 1 = 2 1 * 2 0 = 1 0 + 4 + 2 + 1 = 7 1101 1 * 2 3 = 8 1 * 2 2 = 4 0 * 2 1 = 0 1 * 2 0 = 1 8 + 4 + 0 + 1 = 13 1010 1 * 2 3 = 8 0 * 2 2 = 0 1 * 2 1 = 2 0 * 2 0 = 0 8 + 0 + 2 + 0 = 10 確かめ算を行なった結果、両方の答えが一致する。 2. a.考えた設定 車の車種名を入力すると、そのディーラーの名前が表示される プログラムを作成した。 b.作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # このプログラムの漢字コードは EUC である car = Hash.new car["セルシオ"] = "トヨタ" car["シーマ"] = "日産" car["レジェンド"] = "ホンダ" car["センティア"] = "マツダ" car["プラウディア"] = "三菱" car["LS600h"] = "レクサス" for dealer in car.keys printf("%s は、%s の 高級車です。 \n", dealer ,car[dealer]) end c.変更点 授業で作成したhash_data.rbとhash_pair.rbを 参考にした。 d.実行結果 pan{c109079}% ./hash_for.rb [~/Ruby] センティア は、マツダ の 高級車です。 プラウディア は、三菱 の 高級車です。 レジェンド は、ホンダ の 高級車です。 シーマ は、日産 の 高級車です。 セルシオ は、トヨタ の 高級車です。 LS600h は、レクサス の 高級車です。 e.考察 作成したプログラムと実行結果が正しく実行する 事が出来た事から正しいと言える。 B b #!/usr/koeki/bin/ruby $KCODE = 'e' car = Hash.new("登録なし\n") car["セルシオ"] = "トヨタ" car["シーマ"] = "日産" car["レジェンド"] = "ホンダ" car["センティア"] = "マツダ" car["プラウディア"] = "三菱" car["LS600h"] = "レクサス" # car STDERR.print("検索したい車種名: ") dealer = gets.chomp if car.key?(dealer) == true printf("%s は、%s の 高級車です。 \n", dealer, car[dealer]) else print("表にありません\n") end c.上記と同様。 d. pan{c109079}% ./hash_choice.rb [~/Ruby] 検索したい車種名: セルシオ セルシオ は、トヨタ の 高級車です。 e. 作成したプログラムと実行結果が正しく実行する 事が出来た事から正しいと言える。 b. #!/usr/koeki/bin/ruby $KCODE = 'e' car = Hash.new dealer = Hash.new car = { car["セルシオ"] = "トヨタ", car["シーマ"] = "日産", car["レジェンド"] = "ホンダ", car["センティア"] = "マツダ", car["プラウディア"] = "三菱", car["LS600h"] = "レクサス" } STDERR.print("検索したい車種名を入れてください: ") car_a = gets.chomp if car.key?(car_a) == true printf("%s は、%s の 高級車です。 \n", car_a, car[car_a]) else print("データにありません\n") print("新しくデータを加えます\n") while true STDERR.print("登録したい車種名を入れてください(終了ならq): ") dealer_a = gets.chomp if dealer_a == "q" break end STDERR.print("登録したいディーラーを入力してください: ") dealer[dealer_a] = gets.chomp end for dealer_b in dealer.keys printf("%s は、%s の 高級車です。 \n", dealer_b, dealer[dealer_b]) end end c. 上記と同様 d. pan{c109079}% ./hash_register.rb [~/Ruby] 検索したい車種名を入れてください: クラウン データにありません 新しくデータを加えます 登録したい車種名を入れてください(終了ならq): クラウン 登録したいディーラーを入力してください: トヨタ 登録したい車種名を入れてください(終了ならq): q クラウン は、トヨタ の 高級車です。 e. 作成したプログラムと実行結果が正しく実行する 事が出来た事から正しいと言える。 共同学習者 横山広樹 参考文献 http://www.asahi-net.or.jp/~ax2s-kmtn/ref/bdh.html 2進数、16進数と10進数