第2回 基礎プログラミング II レポート課題 氏名:笹原千珠子 学籍番号:c109080A 語学クラス:英語3 コース(系):政策マネジメント ---- 1.A. 花札のきまりごとを hash 配列の card にした。 card の key と value は花札の月とその月の植物にした。 1:key 松 の対になるのが value 1月 2:key 梅 の対になるのが value 2月 3:key 桜 の対になるのが value 3月 4:key 藤 の対になるのが value 4月 5:key 菖蒲 の対になるのが value 5月 Hash の表し方は card["松"] = "1月" card["梅"] = "2月" card["桜"] = "3月" card["藤"] = "4月" card["菖蒲"] = "5月" もう一つの表し方に card = { "松" => "1月", "梅" => "2月", "桜" => "3月", "藤" => "4月", "菖蒲" => "5月" } がある。 参考文献 ウェブページ 花札 - Wikipedia 3.絵柄 http://ja.wikipedia.org/wiki/%E8%8A%B1%E6%9C%AD 1.B. a.0d 2010 16で割っていき、余りを下から並べる。 2010 / 16 = 125 余り 10 16 / 16 = 7 余り 13 7 / 16 = 0 余り 7 余りを下から並べると 7 13 10 これを16進数で表すと 7 D A 答えは 0x 7DA b.0d 2010 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 余りを下から並べると 11111011010 答えは 0b 11111011010 これをさらに16進数になおすには 右から4つずつ区切り16進数に変換する 111/1101/1010 7/ D/ A 答えは 0x 7DA 参考文献 ウェブページ 2進数、16進数と10進数 http://www.asahi-net.or.jp/~ax2s-kmtn/ref/bdh.html 2. 選んだものC. hash_registre.rb a. 花札で知りたい月の植物を入力するとその植物がどの月の植物かわかるプログラ ム。 入力した植物が登録されていないときは、新しくその植物の月を記録する。 b. #!/usr/koeki/bin/ruby $KCODE = 'e' #日本語を使うことを教える card = Hash.new("その植物は登録されていません\n") #登録されていない文章が入力された場合に表示 card["松"] = "1月" #それぞれの情報 card["梅"] = "2月" card["桜"] = "3月" card["藤"] = "4月" card["菖蒲"] = "5月" STDERR.print("花札にある1月から5月までの植物に対応する月を表示します\n") STDERR.printf("どの植物の月を表示しますか?漢字で入力して下さい: \n") while true #この下の行動を繰り返す month = gets.chomp #入力された文字をとってくる if month == nil # Ctrl - d で while 文を抜ける break else month = month.chomp #入力された文字を入れる end if card.key?(month) == false #入力された文字が登録されていなかったら printf("%s\t%s\n", month, card[month]) STDERR.print("登録するので月を教えて下さい Ctrl - d で終わります :") newmonth = gets.chomp #改めて入力された文字を変数に入れる printf("%s\t%s\n", month, newmonth) else printf("%sは%sです\n",month, card[month]) end #if の終了 end #while の終了 c. hash_pair.rb のプログラムを書き変えて key を使って登録されていないものを入力できるようにしたかった 参考文献:ウェブページ 基礎プログラミング II 第2回 なになにといえばこれこれ 第 2 回目次 講義ノート 西村まどか http://roy/~madoka/2010/r2/02/ 3.あるかないか http://roy/~madoka/2010/r2/02/02_04_theme_03_existornot.html 4.対にないものが呼び出されたとき http://roy/~madoka/2010/r2/02/02_05_theme_04_initialize.html d. 入力されたものが登録されている場合 pan{c109080}% ./hash_register.rb [~/Ruby] 花札にある1月から5月までの植物に対応する月を表示します どの植物の月を表示しますか?漢字で入力して下さい: 松 松は1月です その植物は登録されていません 登録するので月を教えて下さい Ctrl - d で終わります :./hash_register.rb:31: private method `chomp' called for nil:NilClass (NoMethodError) 登録されていない場合 pan{c109080}% ./hash_register.rb [~/Ruby] 花札にある1月から5月までの植物に対応する月を表示します どの植物の月を表示しますか?漢字で入力して下さい: 紅葉 紅葉 その植物は登録されていません 登録するので月を教えて下さい Ctrl - d で終わります :10月 紅葉 10月 その植物は登録されていません 登録するので月を教えて下さい Ctrl - d で終わります :./hash_register.rb:31: private method `chomp' called for nil:NilClass (NoMethodError) e. 登録されていてもいなくても、最後にきちんと終わらなかった。 while 文の中にあるのでずっと繰り返されているのかと思ったが、登録されていな いものが入力されたときに while から抜けるようにしているのに同じような文 が出るのがよくわからなかった。 新しく登録したものが最後に全部出て終わるようにしたかったが、やりかたがわか らなかった。 3. アマゾンのメールで これを買った人におすすめの商品 というところに使われて いると思った。 それと、インターネットでの投票で参加者が新しく項目を追加する機能があるものに使わ れていると思った。 今回は、花札を題材に使ったが、花札は1月から12月までと期間が決まっている ので、後から自由に追加できる hash には向いていない題材だと思った。 次回の課題ははもう少し先の問題までできるようにしたい。 共同学習者:金田麻美