第二回 なになにといえばこれこれ レポート課題 氏名:余語結佳 学籍番号:c1101974 語学クラス:英語2 コース:地域共創 1 A 花言葉をhash配列 flower としました。 flower の key は 花 value は 花言葉にしました。 1 : key 「ばら」 に対して value は 「情熱」 2 : key 「藤」 に対して value は 「恋に酔う」 3 : key 「ユリ」 に対して value は 「あなたはわたしをだませない」 4 : key 「ひまわり」 に対して value は 「あこがれ」 5 : key 「金木犀」 に対して value は 「変わらぬ魅力」 6 : key 「クロッカス」 に対して value は 「あなたを待っています」 7 : key 「さくら」 に対して value は 「精神の美しさ」 8 : key 「マーガレット」に対して value は 「秘めた愛」 9 : key 「うめ」 に対して value は 「気高い心」 10 : key 「いちょう」 に対して value は 「しとやか」 11 : key 「いちご」 に対して value は 「誘惑」 12 : key 「ねこやなぎ」 に対して value は 「自由気まま」 13 : key 「わさび」 に対して value は 「目覚め」 14 : key 「ラベンダー」 に対して value は 「期待」 15 : key 「菊」 に対して value は 「私を信じて下さい」 これに対応する Hash の表し方は flower["ばら"] = "情熱" flower["藤"] = "恋に酔う" flower["ユリ"] = "あなたはわたしをだませない" flower["ひまわり"] = "あこがれ" flower["金木犀"] = "変わらぬ魅力" flower["クロッカス"]="あなたを待っています" flower["さくら"]="精神の美しさ" flower["マーガレット"]="秘めた愛" flower["うめ"]="気高い心" flower["いちょう"]="しとやか" flower["いちご"]="誘惑" flower["ねこやなぎ"]="自由気まま" flower["わさび"]="目覚め" flower["ラベンダー"]="期待" flower["菊"]="私を信じて下さい" また、もうひとつの表し方は {"ばら" => "情熱","藤" => "恋に酔う","ユリ" => "あなたはわたしをだませな い","ひまわり" => "あこがれ","金木犀" => "変わらぬ魅力","クロッカス" => "あなたを待っています","さくら" => "精神の美しさ","マーガレット" => "秘 めた愛","うめ" => "気高い心","いちょう" => "しとやか","いちご" => "誘惑 ","ねこやなぎ"=> "自由気まま","わさび" => "目覚め","ラベンダー" => "期待 ","菊" => "私を信じて下さい",} ですが,見やすいように下のように表記しても大丈夫です。 { "ばら" => "情熱" "藤" => "恋に酔う" "ユリ" => "あなたはわたしをだませない" "ひまわり" => "あこがれ" "金木犀" => "変わらぬ魅力" "クロッカス" => "あなたを待っています" "さくら" => "精神の美しさ" "マーガレット" => "秘めた愛" "うめ" => "気高い心" "いちょう" => "しとやか" "いちご" => "誘惑" "ねこやなぎ"=> "自由気まま" "わさび" => "目覚め" "ラベンダー" => "期待" "菊" => "私を信じて下さい" } 1 B a. 0d 2010 = 0x ?? 0d 2010 は10進数。 0bだと2進数だが、0dという接頭語はないはずなので10進数です。 ぱっと見た段階では「0d」も「0b」も似ているので、この問題文の 「0d 2010」 は2進数だと間違えそうになったので注意が必要です。 変換をする 0x は16進数ですので、計算方法は 10進数から16進数 という計算をします。 16 ) 2010 … 10 ------- 16 ) 125 … 13 ------- 16 ) 7 … 7 ------- 0 余りは 16、13、7 ですが、これは10進数の表記のままなので16進数に変換しま す。 10 … a 13 … d 7 … 7 余りはしたから読んで行くので、 答えは 0d 2010 = 0x 7da です。 b. 0d 2010 = 0b ?? 変換をする 0b は2進数ですので、計算方法は 10進数から2進数 という計算をします。 2 ) 2010 … 0 ------- 2 ) 1005 … 1 ------- 2 ) 502 … 0 ------- 2 ) 251 … 1 ------- 2 ) 125 … 1 ------- 2 ) 62 … 0 ------- 2 ) 31 … 1 ------- 2 ) 15 … 1 ------- 2 ) 7 … 1 ------- 2 ) 3 … 1 ------- 2 ) 1 … 1 ------- 0 余りをしたから並べて行けば 11111011010 なので 答えは 0d 2010 = 0b 11111011010 です。 これを4桁ごと区切ると 0111 1101 1010 です。 0111 は 7 1101 は d 1010 は a 答え 0x7da で、Aの答えも7daなので正しいといえる。 2 i.考えた設定 Aの hash_for.rb をしました。 プログラムを実行すると、flowerハッシュに登録されているkeyとvalueが対応表 として一覧で表示されます。 ii.作成したプログラム(#は解説) #!/usr/koeki/bin/ruby $KCODE = 'e' #文字化けしないように必須 print"このプログラムは花言葉を知ることができるものになっています。\n\n" flower = Hash.new #flowerをハッシュにしますよ、という宣言 flower["ばら"] = "情熱" flower["藤"] = "恋に酔う" flower["ユリ"] = "あなたはわたしをだませない" flower["ひまわり"] = "あこがれ" flower["金木犀"] = "変わらぬ魅力" flower["クロッカス"]="あなたを待っています" flower["さくら"]="精神の美しさ" flower["マーガレット"]="秘めた愛" flower["うめ"]="気高い心" flower["いちょう"]="しとやか" flower["いちご"]="誘惑" flower["ねこやなぎ"]="自由気まま" flower["わさび"]="目覚め" flower["ラベンダー"]="期待" flower["菊"]="私を信じて下さい" #keyは花の名前、valueは花に対する花言葉。 #ちなみに""がないと文字化けしてしまうので忘れないようにする。 #p flower #flowerにはいっているものすべてを出力。 #確認で使うため実際は省略 print"\e[31m 花言葉対応表\e[m\n" #\e[31でピンクに着色開始 #\e[mで着色終了 for hana,kotoba in flower #繰り返しのfor文。 #以下の操作(flowerハッシュにはいっているkey(hana),value(kotoba)を全て 表示する)を終えるまで繰り返す。 printf("%s の花言葉は %s です \n",hana,kotoba) end iii.もとからの 変更点 ○元にしたプログラムは hash_item.rb とhash_pair.rb で、それぞれのいいとこ 取りをしているので、変更点というより「組み合わせている」の表現の方が正し いかもしません。 ○ハッシュは今回の「花言葉」のテーマに合うようにflowerにかえました。 ○hash_pair.rb の中で繰り返しのfor文が使われていましたが、もとでは for item,price in shop printf("%s\t%d\n",item,price) end となっていて item は入力してもらった商品名 price は入力してもらった価格 shop はこのプログラム内のハッシュとなっていました。 これらを、 for hana,kotoba in flower printf("%s の花言葉は %s です \n",hana,kotoba) end のように item は flower ハッシュの key である hana変数 price はflower ハッシュの value である kotoba変数 shop は flower ハッシュ に変更しました。 iv.結果画面 pan{YOGO Yuka}% ./hash_for.rb [~/Ruby] このプログラムは花言葉を知ることができるものになっています。 花言葉対応表 藤 の花言葉は 恋に酔う です ねこやなぎ の花言葉は 自由気まま です クロッカス の花言葉は あなたを待っています です わさび の花言葉は 目覚め です さくら の花言葉は 精神の美しさ です ひまわり の花言葉は あこがれ です マーガレット の花言葉は 秘めた愛 です いちご の花言葉は 誘惑 です いちょう の花言葉は しとやか です ばら の花言葉は 情熱 です ラベンダー の花言葉は 期待 です ユリ の花言葉は あなたはわたしをだませない です うめ の花言葉は 気高い心 です 金木犀 の花言葉は 変わらぬ魅力 です 菊 の花言葉は 私を信じて下さい です v.考察 ○Hashのkeyとvalueを打ち込むさいに""を忘れてしまい flower[ばら] = 情熱 と入力していました。 そのまま実行すると pan{c110197}% ./hash_for.rb [~/Ruby] ./hash_for.rb:9: Invalid char `\244' in expression ./hash_for.rb:9: Invalid char `\320' in expression ./hash_for.rb:9: Invalid char `\244' in expression ./hash_for.rb:9: Invalid char `\351' in expression ./hash_for.rb:9: Invalid char `\276' in expression ./hash_for.rb:9: Invalid char `\360' in expression ./hash_for.rb:9: Invalid char `\307' in expression ./hash_for.rb:9: Invalid char `\256' in expression というエラーメッセージがでてきたため間違いに気付くことができました。 基礎的なところではあるが、忘れてしまうと次に進めないため注意が必要です。 ○変更点で述べたfor文について もとのプログラムでは入力してもらったものをそれぞれの変数に代入していて、 私のプログラムではあらかじめ登録してある対を全て表示したいので、少し違っ ていてとまどいました。 ですが、もとのプログラムのpriceも、for文の個所でいきなり変数指定をしてい ますし、 題名:基礎プログラミング II 第 2 回 (なになにといえばこれこれ) 「Hash の対を表示するには」 作者:西村まどか http://roy/~madoka/2011/r2/02/r2_02_07_theme_06_forprint.html にも書いてあるとおり、Hashの対を表示するには for キー名, 値 in ハッシュ配列名 行う操作 end をすれば良いわけです。 そこで、 keyにあたる「キー名」にはhana変数をいれ、 valueにあたる「値」にはkotoba変数をいれたら上手く繰り返しをしてくれまし た。 <2つめ> i.考えた設定 Bの hash_choice.rb をしました。 プログラムを実行すると、知りたい花言葉の花名の入力を求めて来るように設定 します。 ii.作成したプログラム(#は解説) #!/usr/koeki/bin/ruby $KCODE = 'e' #文字化けしないように必須 print"このプログラムは花言葉を知ることができるものになっています。\n\n" flower = Hash.new("未登録") #flowerをハッシュにしますよ、という宣言 #↑存在しないkeyが入力された場合、対になるvalueだってもちろんない。 #なので、存在しないkeyが入力されたら、 #ここで設定されている初期値代入すれば良い。 flower["ばら"] = "情熱" flower["藤"] = "恋に酔う" flower["ユリ"] = "あなたはわたしをだませない" flower["ひまわり"] = "あこがれ" flower["金木犀"] = "変わらぬ魅力" flower["クロッカス"]="あなたを待っています" flower["さくら"]="精神の美しさ" flower["マーガレット"]="秘めた愛" flower["うめ"]="気高い心" flower["いちょう"]="しとやか" flower["いちご"]="誘惑" flower["ねこやなぎ"]="自由気まま" flower["わさび"]="目覚め" flower["ラベンダー"]="期待" flower["菊"]="私を信じて下さい" #p flower #flowerにはいっているものすべてを出力 while true #ユーザーがexitを入力するまで繰り返すためのwhile print("\n花言葉を知りたい花の名前を入力してください。(終了は「exit」):\n") select = gets.chomp #入力された花名をselectに代入 #p flower.key?(select) #↑selectの中身がflowerハッシュのkeyにあるか検索している。 #確認のためなので最終的にはコメント扱いにして表示はしない。 if select == "exit" #もしユーザーがexitと入力したら print"終了します。\n" exit #強制終了 する else #もしユーザーがexit以外(花名)を入力したら if flower.key?(select) == false #↑selectに代入された文字がflowerハッシュの中にない場合は #「shop.key?(item)=false」となる。 #だからこれは「もし false == falseだったら」というif文ということ。 printf("\n %s は %s です。ごめんなさい。\n", select,flower[select]) #↑flower[select]は、flowerハッシュの中でselectの対に値するvalueを代入するようにしています。 #ですが、この場合存在しないselectを入力されているので、valueもないので、初期値が代入されます。 else #もしflower.key?(select)の検索結果、folseでなかったら(tureの場合) printf("\n %s のイメージは %s です。\n",select,flower[select]) #↑flower[select]は、flowerハッシュの中でselectの対に値するvalueを代入するようにしています。 end #if-end end #1つめの if select == "exit" のend end #whlie-end iii.もとからの 変更点 ○ hash_item.rb とhash_pair.rb を参考にAのプログラムをもとに作成しました。 対応表はここでは必要なくなっているので、for文は削除しています。 ○花の名前を入力すると if flower.key?(select) == false で、flowerハッシュの中にselect変数に代入した花があるか検索しています。 「もし、検索結果がfalseだったら」という構文 「もし、検索結果がtureだったら」という構文をそれぞれつけくわえています。 ○(これは考察の内容とかぶりますが)、一度花言葉を見ただけで終わりではつま らないので、whileで繰り返す構文もつけくわえました。 exitで繰り返しを抜けるようになっています。 iv.結果画面 ○ハッシュにあるものを入力した場合 pan{c110197}% ./hash_choice.rb [~/Ruby] このプログラムは花言葉を知ることができるものになっています。 花言葉を知りたい花の名前を入力してください。(終了は「exit」): ばら ばら のイメージは 情熱 です。 花言葉を知りたい花の名前を入力してください。(終了は「exit」): 金木犀 金木犀 のイメージは 変わらぬ魅力 です。 花言葉を知りたい花の名前を入力してください。(終了は「exit」): いちご いちご のイメージは 誘惑 です。 花言葉を知りたい花の名前を入力してください。(終了は「exit」): exit 終了します。 ○ないものを入力した場合 pan{c110197}% ./hash_choice.rb [~/Ruby] このプログラムは花言葉を知ることができるものになっています。 花言葉を知りたい花の名前を入力してください。(終了は「exit」): アマリリス アマリリス は 未登録 です。ごめんなさい。 花言葉を知りたい花の名前を入力してください。(終了は「exit」): チューリップ チューリップ は 未登録 です。ごめんなさい。 花言葉を知りたい花の名前を入力してください。(終了は「exit」): exit 終了します。 v.考察 最初は、一回花言葉を調べたら終了するプログラムにしていましたが、それでは つまらなかったのでwhileで繰り返すようにしました。 終了条件はexitにして、それを入力されたらexitで強制終了するように設定しま した。 3.感想 今回は授業にまったくついて行けなかったので、授業が終わってから西村先生の ページと神田先生のページを参考に自分で復習をしました。 時間はとてもかかってしまいましたが、Hashとは何かを掴むことができたのでよ かったです。 Hashは配列よりもわかりやすく、使いやすいという印象をうけました。 視覚的にも flower["ばら"] = "情熱" flower["藤"] = "恋に酔う" flower["ユリ"] = "あなたはわたしをだませない" flower["ひまわり"] = "あこがれ" flower["金木犀"] = "変わらぬ魅力" flower["クロッカス"]="あなたを待っています" ・ ・ ・ のようにぱっと見てわかりやすいですし、 keyとvalueは対になっているということを理解して、落ち着いて学習をしたら理 解を深めることができました。 苦労した点は、授業ではpで出力していたものをどうやってprintで表記したら良 いか迷った点です。ひとつひとつためしに実行して、何度もエラーメッセージは 出てきましたが、手探りでも最終的に成功してこのプログラムを組むことが出来 たのでよかったと思います。 これは実際に使おうと思うと、伝票管理、在庫管理などに使えるのではないかと 思います。完ぺきにHashと理解しきって自分の手足のように使えるようになれば 本当に便利で日常的にも使えるものだと思います。 授業についていけなかったのは、今冷静になって考えるとスピードが速く、一つ 聴きそびれると済し崩しでわからなくなっていったのだろうな、と思うので、次 回の授業ではしっかりとついていけるようにがんばろうと思いました。 採点お願いいたします。 4. 参考文献 題名:基礎プログラミング II 第 2 回 「なになにといえばこれこれ」の全ペー ジ。 ここでは目次ページのみ貼ります。 作者:西村まどか http://roy/~madoka/2011/r2/02/ 題名:プログラミングのレポートに必要な項目 作者:西村まどか http://roy/~madoka/2011/rpt/report.html 題名:基礎プログラミングI第9回 作者:神田直弥 http://roy/~naoya/ruby/9.html 題名:基礎プログラミングI第11回 作者:神田直弥 http://roy/~naoya/ruby/11.html 題名:基礎プログラミングII第3回 作者:神田直弥 http://roy/~naoya/rubyII/3.html 題名:花言葉 -wikipedia- http://ja.wikipedia.org/wiki/%E8%8A%B1%E8%A8%80%E8%91%89#.E5.85.B7.E4.BD.93.E4.BE.8B 題名:FFJ誕生花 http://www.ffj.jp/