Subject: #4 1. 2. From: c106108@f.koeki-u.ac.jp To: ruby-10-24@e.koeki-u.ac.jp Date: Fri, 26 Oct 2007 18:44:56 +0900 (JST) X-Mailer: Mew version 4.2 on Emacs 21.3.50 / Mule 5.0 (SAKAKI) 氏名: SH 学籍番号: c1061080 クラス: 英語1 基礎プロc 1. ◯作成したプログラム #!/usr/koeki/bin/ruby hero = Hash.new(0) hero["日本"] = "スサノオ" hero["インド"] = "シヴァ" hero["イラン"] = "フェリドゥーン" hero["北欧"] = "シグルド" hero["デンマーク"] = "ベオウルフ" hero["ギリシャ"] = "ヘラクレス" hero["イギリス"] = "ゲオルギウス" puts "日本、インド、イラン、北欧、デンマーク、ギリシャ、イギリス、" puts "どの地域の英雄の事が知りたいですか?" what = gets.chomp! legend = hero[what] printf("%sには%sという英雄がいます。\n",what, legend) if legend == 0 puts "該当例無し" end ◯実行結果 irsv{c106108}% ./kadai_c.rb [~/Ruby] 日本、インド、イラン、北欧、デンマーク、ギリシャ、イギリス、 どの地域の英雄の事が知りたいですか? 日本 日本にはスサノオという英雄がいます。 irsv{c106108}% ./kadai_c.rb [~/Ruby] 日本、インド、イラン、北欧、デンマーク、ギリシャ、イギリス、 どの地域の英雄の事が知りたいですか? 北欧 北欧にはシグルドという英雄がいます。 ◯プログラムの説明 hero = Hash.new(0) まず上の文を入れることで、heroと言うHashの大きいフォルダを作ることを宣言します。 hero["日本"] = "スサノオ" 次にheroのフォルダを作った中に hero[""] で""で括ったフォルダを作ります。 このフォルダの事をkeyと言います。 その後 = "" で前に作ったkeyの中に単語を定義することが出来ます。 この単語のことをvalueと言います。つまり hero["日本"] = "スサノオ" イコール hero( key ) = value となります。 puts "日本、インド、イラン、北欧、デンマーク、ギリシャ、イギリス、" puts "どの地域の英雄の事が知りたいですか?" what = gets.chomp! legend = hero[what] そしてここで、heroというフォルダの中の何を見たいか入力することで printf("%sには%sという英雄がいます。\n",what, legend)、 に結果が表示されます。 2. ◯作成したプログラム #!/usr/koeki/bin/ruby cross = Hash.new while hero = gets if /(\S+)\s+(\S+)\s+/ =~ hero cross[$1] = $2 end end for cross[0] , cross[1] in cross printf("%sには%sという英雄がいます。\n",cross[0] , cross[1] ) end ◯実行結果 irsv{c106108}% ./kadai_c2.rb kc_dat.txt [~/Ruby] イギリスにはゲオルギウスという英雄がいます。 イランにはフェリドゥーンという英雄がいます。 インドにはシヴァという英雄がいます。 デンマークにはベオウルフという英雄がいます。 日本にはスサノオという英雄がいます。 ギリシャにはヘラクレスという英雄がいます。 北欧にはシグルドという英雄がいます。 irsv{c106108}% ./kadai_c2.rb kc_dat.txt [~/Ruby] イギリスにはゲオルギウスという英雄がいます。 イランにはフェリドゥーンという英雄がいます。 インドにはシヴァという英雄がいます。 デンマークにはベオウルフという英雄がいます。 日本にはスサノオという英雄がいます。 ギリシャにはヘラクレスという英雄がいます。 北欧にはシグルドという英雄がいます。 ◯プログラムの説明 cross = Hash.new まず、この部分でcrossというHashの作成を宣言します。 while hero = gets if /(\S+)\s+(\S+)\s+/ =~ hero cross[$1] = $2 end end 次にデータを参照して、crossというhashフォルダにデータをkeyとvalue に振り分けます。 for cross[0] , cross[1] in cross printf("%sには%sという英雄がいます。\n",cross[0] , cross[1] ) end そしてforというコマンドを使いhashのデータを代入させ、 そしてデータの文だけ繰り返して表示させます。 ◯感想 感想としては最初のプログラムはなんとか分かりましたが、 二つ目のプログラムが難しく、結局検索の出来ないプログラムに なってしまいました。特に、データの中身を確認して表示させ選ばせるという 動作が出来ず、中途半端になりました。 次はもっと出来るよう頑張りたいです。