講評: よくできています。平均なども出してみるのはどうでしょうか。 ---- 10 月 17 日 第 3 回レポート 「Value が配列のとき」 学籍番号: c106XXXX 氏名: XXXXXXXX 語学クラス: XXXX語選択XX 系: XXXX系 1.A. auの携帯電話の機種の情報を hash 配列 keitai とした。 keitai の key と value はそれぞれと最高値(円)と最安値(円)とカタチにとっ た。 その1: key 「W53CA」 value 「22890, 10290, "折りたたみ"」 その2: key 「W53S」 value 「17640, 6300, "折りたたみ"」 その3: key 「W52CA」 value 「10500, 9450, "折りたたみ"」 その4: key 「W52SH」 value 「17640, "折りたたみ"」 その5: key 「W52S」 value 「5040, 10290, "スライド"」 hash 配列で表記すると以下のようになる。 keitai["W53CA"] = 22890, 10290, "折りたたみ" keitai["W53S"] = 17640, 6300, "折りたたみ" keitai["W52CA"] = 10500, 9450, "折りたたみ" keitai["W52SH"] = 17640, 10920, "折りたたみ" keitai["W52S"] = 5040, 10290, "スライド" 【参照HP】 価格.com 〜au機種一覧〜 http://kakaku.com/keitai/ B. アルファベット → 16進数 → 10進数 の順 M → 0x4D → 4×16の1乗 + D(13)×16の0乗 = 0d77 irsv{c106179}% bc -l [~/Ruby] 4*16 64 64+13 77 quit o → 0x6F → 6×16の1乗 + F(15)×16の0乗 = 0d111 irsv{c106179}% bc -l [~/Ruby] 6*16 96 96+15 111 quit r → 0x72 → 7×16の1乗 + 2×16の0乗 = 0d114 irsv{c106179}% bc -l [~/Ruby] 7*16 112 112+2 114 quit i → 0x69 → 6×16の1乗 + 9×16の0乗 = 0d105 irsv{c106179}% bc -l [~/Ruby] 6*16 96 96+9 105 quit A → 0x41 → 4×16の1乗 + 1×16の0乗 = 0d65 irsv{c106179}% bc -l [~/Ruby] 4*16 64 64+1 65 quit z → 0x7A → 7×16の1乗 + A(10)×16の0乗 = 0d122 irsv{c106179}% bc -l [~/Ruby] 7*16 112 112+10 122 quit u → 0x75 → 7×16の1乗 + 5×16の0乗 = 0d117 irsv{c106179}% bc -l [~/Ruby] 7*16 112 112+5 117 quit s → 0x73 → 7×16の1乗 + 3×16の0乗 = 0d115 irsv{c106179}% bc -l [~/Ruby] 7*16 112 112+3 115 quit a → 0x61 → 6×16の1乗 + 1×16の0乗 = 0d97 irsv{c106179}% bc -l [~/Ruby] 6*16 96 96+1 97 quit 【参照HP】 ・「Cyber Librarian」 2進数、16進数と10進数 http://www.asahi-net.or.jp/~ax2s-kmtn/ref/bdh.html ・西村先生のHP 「ASCII コード表」 http://roy/~madoka/2007/r1/05/05-03-ascii.html 2.1) hash-for.rb a.考えた設定 携帯電話の販売価格を並べ替えるプログラム。 b.プログラムコード #!/usr/koeki/bin/ruby keitai = Hash.new keitai["W53CA"] = 22890, 10290, "折りたたみ" keitai["W53S"] = 17640, 6300, "折りたたみ" keitai["W52CA"] = 10500, 9450, "折りたたみ" keitai["W52SH"] = 17640, 10920, "折りたたみ" keitai["W52S"] = 5040, 10290, "スライド" print("携帯電話の販売価格を比較することができます。\n\n") print("販売価格の安い順を…\n\n( 1.最高値 2.最安値 )で比較\n\n") STDERR.print("どちらにしますか? : ") select = gets.to_i print("\n\n** 機種 *** 価格 ****** カタチ **** \n\n") while true if select == 1 keitai.keys.sort{ |kisyu,nedan| keitai[kisyu][0] <=> keitai[nedan][0] }.each{ |spec| taka = keitai[spec][0] katati = keitai[spec][2] printf(" %s\t %5d 円 %-10s 式\n",spec, taka, katati) } break elsif select == 2 keitai.keys.sort{ |kisyu,nedan| keitai[kisyu][1] <=> keitai[nedan][1] }.each{ |spec| yasu = keitai[spec][1] katati = keitai[spec][2] printf(" %s\t %5d 円 %-10s 式\n",spec, yasu, katati) } break else print("選択肢にありません。\n") break end end c.変更点 sesame.rbをもとに作成した。 ・if文を使い、ユーザーが選んだ項目で並べ替えて表示させるようにした。 d.結果画面 irsv{c106179}% ./hash-for.rb [~/Ruby] 携帯電話の販売価格を比較することができます。 販売価格の安い順を… ( 1.最高値 2.最安値 )で比較 どちらにしますか? : 2 ** 機種 *** 価格 ****** カタチ **** W53S 6300 円 折りたたみ 式 W52CA 9450 円 折りたたみ 式 W52S 10290 円 スライド 式 W53CA 10290 円 折りたたみ 式 W52SH 10920 円 折りたたみ 式 e.考察 予想どおり選んだ項目で安い順に並んだ。 f.参照HP 西村先生のHP 第 03 回: 得意先の情報を分析しよう http://roy/~madoka/2007/r2/03/index.html 2) hash-array-calc.rb a.考えた設定 携帯電話の平均販売価格を計算して表示させるプログラム。 b.プログラムコード #!/usr/koeki/bin/ruby keitai = Hash.new keitai["W53CA"] = 22890, 10290, "折りたたみ" keitai["W53S"] = 17640, 6300, "折りたたみ" keitai["W52CA"] = 10500, 9450, "折りたたみ" keitai["W52SH"] = 17640, 10920, "折りたたみ" keitai["W52S"] = 10290, 5040, "スライド" print("※販売価格の最安値、最高値から平均価格を出しています。\n\n") print("** 機種 ** 平均販売価格 *** カタチ **** \n") keitai.keys{ }.each{ |spec| katati = keitai[spec][2] sa = keitai[spec][0] + keitai[spec][1] heikin = sa/2 printf(" %s\t %5d 円\t %-10s 式\n",spec, heikin, katati) } e.変更点 sesame.rbをもとに作成した。 ・ sa = keitai[spec][0] + keitai[spec][1] heikin = sa/2 最高値と最安値を足して2で割り、平均価格を出した。 d.結果画面 irsv{c106179}% ./hash-array-calc.rb [~/Ruby] ※販売価格の最安値、最高値から平均価格を出しています。 ** 機種 ** 平均販売価格 *** カタチ **** W52CA 9975 円 折りたたみ 式 W53S 11970 円 折りたたみ 式 W53CA 16590 円 折りたたみ 式 W52S 7665 円 スライド 式 W52SH 14280 円 折りたたみ 式 e.考察 irsv{c106179}% bc -l [~/Ruby] 10500+9450 19950 19950/2 9975.00000000000000000000 quit irsv{c106179}% bc -l [~/Ruby] 17640+6300 23940 23940/2 11970.00000000000000000000 quit きちんと平均価格が出た。 f.参照HP 西村先生のHP 第 03 回: 得意先の情報を分析しよう http://roy/~madoka/2007/r2/03/index.html 3) hash-each.rb a.考えた設定 hash-array-calc.rbと同様の設定で、 for 文を使って表示させる。 b.プログラムコード #!/usr/koeki/bin/ruby keitai = Hash.new keitai["W53CA"] = 22890, 10290, "折りたたみ" keitai["W53S"] = 17640, 6300, "折りたたみ" keitai["W52CA"] = 10500, 9450, "折りたたみ" keitai["W52SH"] = 17640, 10920, "折りたたみ" keitai["W52S"] = 10290, 5040, "スライド" print("※販売価格の最安値、最高値から平均価格を出しています。\n\n") print("** 機種 ** 平均販売価格 *** カタチ **** \n") for kisyu, kakaku in keitai sa = kakaku[0] + kakaku[1] heikin = sa/2 katati = kakaku[2] printf(" %s\t %5d 円\t %-10s 式\n",kisyu, heikin, katati) end c.変更点 hash-array-calc.rbをもとにした。 ・for kisyu, kakaku in keitai for文を使った。 d.結果画面 irsv{c106179}% ./hash-each.rb [~/Ruby] ※販売価格の最安値、最高値から平均価格を出しています。 ** 機種 ** 平均販売価格 *** カタチ **** W52CA 9975 円 折りたたみ 式 W53S 11970 円 折りたたみ 式 W53CA 16590 円 折りたたみ 式 W52S 7665 円 スライド 式 W52SH 14280 円 折りたたみ 式 e.考察 予想通りの結果が得られた。 計算課程はhash-array-calc.rbと同じため省略。 f.参照HP 西村先生のHP 第 03 回: 得意先の情報を分析しよう http://roy/~madoka/2007/r2/03/index.html 3.感想 西村先生のHPを参考に今回の課題を完成させた。 データを自分の好きな順番に並べ替えられる sort は便利だと思った。 データファイルのの読み込みや書き込みをすれば、もっと複雑なプログラムが作れると思う。