第2回 なになにといえばこれこれ レポート課題 氏名:小川まどか 学籍番号:C1100420 語学クラス:英語2 コース:社会福祉コース 1.筆記問題 A 花とその花の花言葉を hash 配列 kotoba とした。 kotoba の key とvalue はそれぞれ花の名前とその花言葉にした。 その1: key 「紫陽花」に対して valueは 「無情」 その2: key 「椿」に対して valueは 「謙遜」 その3: key 「杜若」に対して valueは 「幸運」 その4: key 「梅」に対して valueは 「上品」 その5: key 「撫子」に対して valueは 「勇敢」 これに対する Hash の表し方は、 hana["紫陽花"] = " 無情 " hana["椿"] = " 謙遜 " hana["杜若"] = " 幸運 " hana["梅"] = " 上品 " hana["撫子"] = " 勇敢 " また、もう一つの表し方は、 {"紫陽花" => "無情" ,"椿" => "謙遜" ,"杜若" => "幸運" ,"梅" => "上品" , "撫子" => "勇敢"} B a.0d 2011 = 0x ?? まず10進数を16進数になおすために計算をする。 16 )2011 −−− 16 ) 125 11 ←余りを表す −−− 16 ) 7 13 −−− 16 ) 0 7 −−− 0 計算して出た余りを下から順に読む。 すると7、13、11となる。 まだ13と11を16進数になおすと13はd、11はbとなる。 答えは0d 2011 = 0x 7dbとなる。 b.0d 2011 = 0b ?? まず10進数を2進数になおすために計算をする。 2 )2011 −−− 2 )1005 1 ←余りを表す −−− 2 ) 502 1 −−− 2 ) 251 0 −−− 2 ) 125 1 −−− 2 ) 62 1 −−− 2 ) 31 0 −−− 2 ) 15 1 −−− 2 ) 7 1 −−− 2 ) 3 1 −−− 2 ) 1 1 −−− 0 1 計算して出た余りを下から順に読む。 すると11111011011となる。 答えは0d 2011 = 0b 11111011011となる。 そしてこれを16進数になおす。 11111011011を右から4つずつに区切り10進数にする。 0111、 1101 、1011となる。 0111=(2^3*0)+(2^2*1)+(2^1*1)+(2^0*1)=0+4+2+1=7 1101=(2^3*1)+(2^2*1)+(2^1*1)+(2^0*1)=8+4+0+1=13 1011=(2^3*1)+(2^2*0)+(2^1*1)+(2^0*1)=8+0+2+1=11 10進数を16進数になおすと7は7、13はd、11はbとなる。 答えは0x 7dbとなる。 1問目のaと同じ答えになるので正しいと言える。 2.プログラム問題 A i.考えた設定 プログラムに登録してある対のデータを表示させるプログラム hash_for.rb を 作成した。 ii.作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 文字コードの設定 hana = Hash.new # Hash 配列をhanaとする hana["紫陽花"] = "「無情」" #紫陽花の花言葉は無情 hana["椿"] = "「謙遜」" #椿の花言葉は謙遜 hana["杜若"] = "「幸運」" #杜若の花言葉は幸運 hana["梅"] = "「上品」" #梅の花言葉は上品 hana["撫子"] = "「勇敢」" #撫子の花言葉は勇敢 for hanakotoba, kotoba in hana # すべての Hash の対を表示させる printf("%s の花言葉は %s です。\n", hanakotoba, hana[hanakotoba]) end # forを終了する iii.もとにしたプログラムからの変更点 授業で作成したプログラム hash_item.rb をもとにした。 変数をhanaに変更した。 iv.プログラムを実行した結果画面 pan{c110042}% ./hash_for.rb [~/Ruby] 撫子 の花言葉は 「勇敢」 です。 椿 の花言葉は 「謙遜」 です。 杜若 の花言葉は 「幸運」 です。 梅 の花言葉は 「上品」 です。 紫陽花 の花言葉は 「無情」 です。 v.導き出された結果の考察 プログラムに登録してあるデータが表示されたので、このプログラムは正しいと 言える。 B i.考えた設定 hash_for.rb に加えて、ユーザーが知りたい情報だけを結果表示するプログラム hash_choice.rb を作成した。花を入力すると花言葉が表示される。 ii.作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 文字コードの設定 hana = Hash.new # 配列をhanaとする hana["紫陽花"] = "「無情」" hana["椿"] = "「謙遜」" hana["杜若"] = "「幸運」" hana["梅"] = "「上品」" hana["撫子"] = "「勇敢」" print("花の名前を入力するとその花の花言葉が表示されます。\n") STDERR.print("花の名前を入力してください:") hanakotoba = gets.chomp if hana.key?(hanakotoba) == true #hanaに入力したものがある場合 printf("%s の花言葉は %s です。\n",hanakotoba, hana[hanakotoba]) else #hanaに入力したものがない場合 print("入力してもらった花の花言葉はデータにないので表示できません。\n") end # ifを終了する iii.もとにしたプログラムからの変更点 授業で作成したプログラム hash_item.rb をもとにした。 変数をhanaに変更した。 iv.プログラムを実行した結果画面 pan{c110042}% ./hash_choice.rb [~/Ruby] 花の名前を入力するとその花の花言葉が表示されます。 花の名前を入力してください:梅 梅 の花言葉は 「上品」 です。 pan{c110042}% ./hash_choice.rb [~/Ruby] 花の名前を入力するとその花の花言葉が表示されます。 花の名前を入力してください: 桜 入力してもらった花の花言葉はデータにないので表示できません。 v.導き出された結果の考察 プログラムに登録してある花を入力した際は、その花の花言葉が表示された。 プログラムに登録されていない花を入力してみたところ、「入力してもらった花 の花言葉はデータにないので表示できません。」と表示された。 以上からこのプログラムは正しいと言える。 C. i.考えた設定 知りたい情報が出てこない場合、ユーザに対を登録させて、 登録した結果を出 力するプログラム hash_register.rb を作成した。花と花言葉を登録することが できる。 ii.作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 文字コードの設定 hana = Hash.new # 配列をhanaとする flower = Hash.new # 配列をflowerとする hana["紫陽花"] = "「無情」" hana["椿"] = "「謙遜」" hana["杜若"] = "「幸運」" hana["梅"] = "「上品」" hana["撫子"] = "「勇敢」" print("花の名前を入力するとその花の花言葉が表示されます。\n") STDERR.print("花の名前を入力してください:") hanakotoba= gets.chomp if hana.key?(hanakotoba) == true #hanaに入力したものがある場合 printf("%s の花言葉は %s です。\n",hanakotoba, hana[hanakotoba]) else #hanaに入力したものがない場合 print("入力してもらった花の花言葉はデータにないので、データに加えます。\n") print("データを新しく加えます\n") while true STDERR.print("花の名前を入力してください(終了はr):") hana_a = gets.chomp if hana_a == "r" #rが入力された場合 break #breakする end #ifを終わる STDERR.print("花言葉を入力してください: ") flower[hana_a] = gets.chomp end #whileを終わる for hana_b in flower.keys # すべての Hash の対を表示させる printf("%s の花言葉は 「%s」 です。\n",hana_b,flower[hana_b]) end #forを終わる end #ifを終わる iii.もとにしたプログラムからの変更点 授業で作成したプログラム hash_add.rb をもとにした。 変数をhanaに変更した。 iv.プログラムを実行した結果画面 pan{c110042}% ./hash_register.rb [~/Ruby] 花の名前を入力するとその花の花言葉が表示されます。 花の名前を入力してください:スイートピー 入力してもらった花の花言葉はデータにないので、データに加えます。 データを新しく加えます 花の名前を入力してください(終了はr):スイートピー 花言葉を入力してください: 優しい思い出 花の名前を入力してください(終了はr):忘れな草 花言葉を入力してください: 私を忘れないで 花の名前を入力してください(終了はr):マーガレット 花言葉を入力してください: 誠実 花の名前を入力してください(終了はr):蓮 花言葉を入力してください: 清らかな心 花の名前を入力してください(終了はr):r 蓮 の花言葉は 「清らかな心」 です。 忘れな草 の花言葉は 「私を忘れないで」 です。 マーガレット の花言葉は 「誠実」 です。 スイートピー の花言葉は 「優しい思い出」 です。 v.導き出された結果の考察 プログラムに登録されていない花を入力したところ、その花と花言葉をプログラ ムに加えることができた。なので、このプログラムは正しいと言える。 3.感想 実際に使われているものとしては、インターネットでの検索機能があると思う。 キーワードを入力するとそのキーワードに関する情報が出てくる。 他には、本人かどうか確認するためにパスワードを入力してもらう機能にもhash が使われていると思う。 正しいパスワードを入力すると本人だと認識されるが、間違ったパスワードを入 力すると本人だと認識されず、「パスワードが間違っています。正しいパスワー ドを入力してください」と表示される。 4.参考文献 基礎プログラミングII 第2回 なになにといえばこれこれ (http://roy.e.koeki-u.ac.jp/~madoka/2011/r2/02/) ・あるかないか (http://roy.e.koeki-u.ac.jp/~madoka/2011/r2/02/r2_02_04_theme_03_existornot.html ) ・対にないものが呼び出されたとき (http://roy.e.koeki-u.ac.jp/~madoka/2011/r2/02/r2_02_05_theme_04_default.html) ・Hashの対を表示するには (http://roy.e.koeki-u.ac.jp/~madoka/2011/r2/02/r2_02_07_theme_06_forprint.html) 西村まどか先生