第2回 なになにといえばこれこれ レポート課題 氏名:畠山貴衣 学籍番号:c1101709 語学クラス:英語6 コース(系):政策マネジメントコース 1.筆記問題 --------------------------------------------------------------------- A.四字熟語の意味を Hash 配列 jukugo としました。 jukugo の key と value はそれぞれの四字熟語とその意味にとりました。 その 1 : key 「周知徹底」 に対して valueは 「広く知れ渡らせること」 その 2 : key 「本末転倒」 に対して valueは 「物事の根本ととそうでないこ とを取り違えること」 その 3 : key 「温故知新」 に対して valueは 「古きを知り新しきを得る」 その 4 : key 「天真爛漫」 に対して valueは 「飾らない自然のままの姿があ ふれ出ている様」 その 5 : key 「南山不落」 に対して valueは 「永遠に崩れ落ちないこと」 これに対応する Hash の表し方は、 jukugo[周知徹底] = "広く知れ渡らせること" jukugo[本末転倒] = "物事の根本ととそうでないことを取り違えること" jukugo[温故知新] = "古きを知り新しきを得る" jukugo[天真爛漫] = "飾らない自然のままの姿があふれ出ている様" jukugo[南山不落] = "永遠に崩れ落ちないこと" また、もう1つの表し方は、 {"周知徹底" => "広く知れ渡らせること" , "本末転倒" => "物事の根本ととそうでないことを取り違えること", "温故知新" => "古きを知り新しきを得る", "天真爛漫" => "飾らない自然のままの姿があふれ出ている様", "南山不落" => "永遠に崩れ落ちないこと"} である。 ---------------------------------------------------------------------- B a. 0d 2010 = 0x7da 16)2010 10 ----- 16) 125 13 ----- 16) 7 7 ----- 0 わきの数字をしたから読むと、 7 13 10 ここの数字は10進数なので、表で確認して (表は神田先生の前期のページ参照:http://roy/~naoya/ruby/9.html) 7 → 7 13 → d 10 → a となる。 よってこの答えは、 0d 2010 = 0x7da となる。 b. 0d 2010 = 0b11111011010 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 2010 = 0b11111011010 2進数を16進数に変換 11111011010 を下から4桁づつに分けて、2進数の表を見て変換する。 (表は神田先生の前期のページ参照:http://roy/~naoya/ruby/9.html) 0111 → 7 1101 → d 1010 → a よって、2010を16進数に変換すると、 0x7da となる。 ----------------------------------------------------------------- 2.プログラム問題 Eまで挑戦したが、どうしてもデータを読みこまない理由が分らなかったため、 未完成ですが提出します。 Dまでは完成したので、すべて添付します。 ---------------------------------------------------------------- A [1]作成したプログラム #!/usr/koeki/bin/ruby #$KCODE = 'e' jukugo = Hash.new #Hash配列を jukugo とする。 jukugo["周知徹底 :"] = " 広く知れ渡らせること" jukugo["本末転倒 :"] = " 物事の根本ととそうでないことを取り違えること" jukugo["温故知新 :"] = " 古きを知り新しきを得る" jukugo["天真爛漫 :"] = " 飾らない自然のままの姿があふれ出ている様" jukugo["南山不落 :"] = " 永遠に崩れ落ちないこと" #key を namae とする。 #value を mean とする。 for namae, mean in jukugo printf("%s%s\n",namae,mean) end [2]実行結果 pan{c110170}% ./hash_for.rb [~/Ruby] 温故知新 : 古きを知り新しきを得る 周知徹底 : 広く知れ渡らせること 本末転倒 : 物事の根本ととそうでないことを取り違えること 天真爛漫 : 飾らない自然のままの姿があふれ出ている様 南山不落 : 永遠に崩れ落ちないこと [3]考察 自分が入力した5つの項目が間違わずに表示されているため、このプログラムは 問題ないと言える。 今回は見やすいように空欄をプログラム内にいれました。 ----------------------------------------------------------------------- B [1]作成したプログラム #!/usr/koeki/bin/ruby #$KCODE = 'e' jukugo = Hash.new #Hash配列を jukugo とする。 jukugo["周知徹底"] = " : 広く知れ渡らせること" jukugo["本末転倒"] = " : 物事の根本ととそうでないことを取り違えること" jukugo["温故知新"] = " : 古きを知り新しきを得る" jukugo["天真爛漫"] = " : 飾らない自然のままの姿があふれ出ている様" jukugo["南山不落"] = " : 永遠に崩れ落ちないこと" #key を namae とする。 #value を mean とする。 for namae, mean in jukugo printf("%s\n",namae) end print("上記の四字熟語より、知りたいものを入力して下さい。\n") STDERR.print("入力: ") choice = gets.chomp.to_s if namae == choice printf("%s %s \n",choice, mean) else printf("%s はありません\n",choice) end (データ) 温故知新 古きを知り新しきを得る 本末転倒 物事の根本とそうでないことを取り違えること 周知徹底 広く知れ渡らせること 天真爛漫 飾らない自然のままの姿があふれ出ている様 南山不落 永遠に崩れ落ちないこと [Aとの変更点] ・key のスペースをなくして、 value にスペースを増やして入力を読みこめるよ うにした。 ・for文で一覧表示を key のみにして何が選択できるのかを見れるようにした。 ・if の次の jukugo.key?(you) を無くして、 key == choice としたことで、分 りやすくした。 [実行結果] an{c110170}% ./hash_choice.rb [~/Ruby] 温故知新 本末転倒 周知徹底 天真爛漫 南山不落 上記の四字熟語より、知りたいものを入力して下さい。 入力: 南山不落 南山不落 : 永遠に崩れ落ちないこと pan{c110170}% ./hash_choice.rb [~/Ruby] 温故知新 本末転倒 周知徹底 天真爛漫 南山不落 上記の四字熟語より、知りたいものを入力して下さい。 入力: 天真らんまん 天真らんまん はありません [考察] プログラムにある四字熟語を入力するとデータを読みこみ、1字でも違うとデー タを読みこまないため、プログラムは正常に動いていることが分った。 今回は自分がどのデータを表示して欲しいか整理しないと、プログラムがおかし くなってしまったので、その部分に時間を取られました。 また、Aのデータは namae の部分にスペースが入っていたのでなかなかデータを 読みこまなかった。それに気が付くのにも時間がかかった。 ---------------------------------------------------------------- C [プログラム] #!/usr/koeki/bin/ruby $KCODE = 'e' jukugo = Hash.new #Hash配列を jukugo とする。 jukugo["周知徹底"] = "広く知れ渡らせること" jukugo["本末転倒"] = "物事の根本とそうでないことを取り違えること" jukugo["温故知新"] = "古きを知り新しきを得る" jukugo["天真爛漫"] = "飾らない自然のままの姿があふれ出ている様" jukugo["南山不落"] = "永遠に崩れ落ちないこと" #key を namae とする。 #value を mean とする。 for namae, mean in jukugo printf("%s\n",namae) end print("上記の四字熟語より、知りたいものを入力して下さい。\n") STDERR.print("知りたいものが無い場合は新規登録して下さい。(quitで終了)\n") while true STDERR.print("入力: ") choice = gets.chomp if choice == "quit" break elsif jukugo.key?(choice) == true STDERR.printf("%s : %s \n",choice, jukugo[choice]) else choice = choice.chomp STDERR.print("意味: ") jukugo[choice] = gets end end print("終了\n") print("------------------------------------\n") print("四字熟語一覧\n") for namae, mean in jukugo printf("%s \t %s\n",namae,mean) end print("------------------------------------\n") [前のプログラムとの変更点] 調べたものが無かった場合、登録できるプログラムを作成した。 そのため、 while true を組み込んで繰り返すプログラムを作った。 また、 choice = choice.chomp で、書込みを出来るようにした。 最後に、書きこめたか確認するための一覧表示を組み込んだ。 [実行結果] pan{c110170}% ./hash_register.rb [~/Ruby] 温故知新 本末転倒 周知徹底 天真爛漫 南山不落 上記の四字熟語より、知りたいものを入力して下さい。 知りたいものが無い場合は新規登録して下さい。(quitで終了) 入力: 温故知新 温故知新 : 古きを知り新しきを得る 入力: 天真爛漫 天真爛漫 : 飾らない自然のままの姿があふれ出ている様 入力: 支離滅裂 意味: 筋が通っていないこと。 入力: quit 終了 ------------------------------------ 四字熟語一覧 温故知新 古きを知り新しきを得る 本末転倒 物事の根本とそうでないことを取り違えること 周知徹底 広く知れ渡らせること 天真爛漫 飾らない自然のままの姿があふれ出ている様 支離滅裂 筋が通っていないこと。 南山不落 永遠に崩れ落ちないこと ------------------------------------ [考察] 上の一覧にある四字熟語が入力されると、 Hash で登録された意味が表示され、 その他の四字熟語が入力されると、意味の打ち込みができ、最後に出力されてい るため、プログラムは正常だと分かる。 また、最後の出力時にどうしても"南山不落"だけがはなれてしまうのがなおせま せんでした。 --------------------------------------------------------------------- D [プログラム] #!/usr/koeki/bin/ruby $KCODE ='e' jukugo = Hash.new print("----------\n") print("周智徹底\n") print("本末転倒\n") print("温故知新\n") print("天真爛漫\n") print("南山不落\n") print("----------\n") print("上記の中で知りたい熟語を選んで入力して下さい。\n") print("終了はquitと入力\n") open("hash_data.dat","r") do |memo| while line = memo.gets if/(\S+)\s+(\S+)\s/ =~ line jukugo[$1] = $2 end end end while true STDERR.print("入力: ") choice = gets.chomp if choice == "quit" break elsif jukugo.key?(choice) == true printf("%s : %s\n",choice,jukugo[choice]) else printf("%sはデータにありません\n",choice) end end print("終わり\n") [変更点] データを外部から読み込むために open メソッドを用いた。 また、私の題材は多くありすぎてなにがデータに入っているか分らないため、 print メソッドを用いてデータ化している四字熟語を表示出来るようにした。 [実行結果] pan{HATAKEYAMA Kie}% ./hash_read.rb [~/Ruby] ---------- 周智徹底 本末転倒 温故知新 天真爛漫 南山不落 ---------- 上記の中で知りたい熟語を選んで入力して下さい。 終了はquitと入力 入力: 温故知新 温故知新 : 古きを知り新しきを得る 入力: 天真爛漫 天真爛漫 : 飾らない自然のままの姿があふれ出ている様 入力: quit 終わり pan{c110170}% ./hash_read.rb [~/Ruby] ---------- 周智徹底 本末転倒 温故知新 天真爛漫 南山不落 ---------- 上記の中で知りたい熟語を選んで入力して下さい。 終了はquitと入力 入力: 支離滅裂 支離滅裂はデータにありません 入力: quit 終わり [考察] データを正しく検索出来れば表示され、間違えたデータが入力されると 注意文とともにデータが無いことを知らせているので、プログラムは正常に働い ていることが分る。 --------------------------------------------------------------------- E [プログラム] #!/usr/koeki/bin/ruby $KCODE ='e' jukugo = Hash.new print("----------\n") print("周智徹底\n") print("本末転倒\n") print("温故知新\n") print("天真爛漫\n") print("南山不落\n") print("----------\n") print("上記の中で知りたい熟語を選んで入力して下さい。\n") print("新規作成も可能です。\n") print("終了時はquitと入力\n") open("hash_data.dat","a+") do |memo| while line = memo.gets if/(\S+)\s+(\S+)\s/ =~ line jukugo[$1] = $2 end end end while true STDERR.print("入力: ") choice = gets.chomp if choice == "quit" break elsif jukugo.key?(choice) == true STDERR.printf("%s : %s\n",choice,jukugo[$2]) else choice = choice.chomp STDERR.print("意味: ") jukugo[choice] = gets.chomp end end print("終わり\n") print("------------------------------------\n") print("四字熟語一覧\n") for namae, mean in jukugo printf("%s \t %s\n",namae,mean) end print("------------------------------------\n") [変更個所] データを読み込むだけでなく、書きこみも出来る a+ のメソッドを使用した。 (このメソッドは、書きこむ際に既存のデータに上書きされる。) また、Dでは"データがありません"と表示されていた所に書きこむプログラムをい れてみたが、上手く起動しなかった。 openメソットの位置や その他のメソッドを変えてみたりしたが正常には働かな かった。 なにがいけなかったのか時間があったら教えてもらいたいです。 [実行結果] pan{c110170}% ./hash_write.rb [~/Ruby] ---------- 周智徹底 本末転倒 温故知新 天真爛漫 南山不落 ---------- 上記の中で知りたい熟語を選んで入力して下さい。 新規作成も可能です。 終了時はquitと入力 入力: 温故知新 温故知新 : 入力: 支離滅裂 意味: 筋が通っていないこと 入力: quit 終わり ------------------------------------ 四字熟語一覧 温故知新 古きを知り新しきを得る 周知徹底 広く知れ渡らせること 本末転倒 物事の根本とそうでないことを取り違えること 天真爛漫 飾らない自然のままの姿があふれ出ている様 支離滅裂 筋が通っていないこと 南山不落 永遠に崩れ落ちないこと ------------------------------------ [考察] r から a+ に変えたことにより、上手くデータを読み込む指示が出来なかった。 データの書きこみは出来ているので、間違えてはないと言える。 -------------------------------------------------------------- 3,感想 今回のプログラムでは全てのプログラムに while true を用いて、自分が好きな だけこのプログラムを使えるようにした。そのため、CやDを作るのがややこしく なってしまったように感じた。 Eに関しては、あと1歩の所で出来なかったため、非情に悔しい。しかし、自分が 分る範囲のことは全部試してみたので、力不足だったのだと思う。 このプログラムが実際に使われていると思うのは、インターネットの検索サービ スや、携帯電話等に入っている機能を調べられる便利な機能のことだと思う。 4.参考文献 goo辞書 (四字熟語を参照) http://dictionary.goo.ne.jp/srch/idiom/%E3%81%AA/m0p2u/ 西村先生の今回の講義ページ http://roy/~madoka/2011/r2/02/ 神田先生の前期のページ http://roy/~naoya/ruby/8.html ----------------------------------- 東北公益文科大学  公益学部 公益学科 2年 畠山貴衣  c110170@f.koeki-u.ac.jp 協同製作者 : 伊藤桜子