第2回 基礎プログラミング II レポート課題 氏名: xxxxxxxx 学籍番号:c109xxx 語学クラス:英語3 コース(系):政策マネジメント 1. A.世界の首都をhash配列のcountryとした。countryのkeyとvalueはそれぞれの国 名とその首都にとるようにした。 1.key 「日本」に対して valueは 「東京」 2.key 「アメリカ」に対してvalueは 「ワシントンD.C」 3.key 「フランス」に対してvalueは 「パリ」 4.key 「オランダ」に対してvalueは 「アムステルダム」 5.key 「スウェーデン」に対してvalueは「ストックホルム」 6.key 「イギリス」に対してvalueは 「ロンドン」 7.key 「アルゼンチン」に対してvalueは 「ブエノスアイレス」 8.key 「モロッコ」に対してvalueは 「ラバト」 9.key 「メキシコ」に対してvalueは「メキシコシティ」 country["日本"]="東京" country["アメリカ"]="ワシントンD.C" country["フランス"]="パリ" counrty["オランダ"]="アムステルダム" country["スウェーデン"]="ストックホルム" country["イギリス"]="ロンドン" counrty["アルゼンチン"]="ブエノスアイレス" country["モロッコ"]="ラバト" country["メキシコ"]="メキシコシティ" {"日本"=>"東京","アメリカ"=>"ワシントンD.C","フランス"=>"パリ", "オランダ"=>"アムステルダム","スウェーデン"=>"ストックホルム", "イギリス"=>"ロンドン","アルゼンチン"=>"ブエノスアイレス","モロッコ" =>"ラバト","メキシコ"=>"メキシコシティ" } 参考文献:2010年度 後期基礎プログラミングII 第2回/西村まどかより http://roy/~madoka/2010/r2/02/ Hashの対を入力するには http://roy/~madoka/2010/r2/02/02_06_theme_05_hash_pair.html B. a.0d2010 = 0x?? 10進数を2進数にするために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= 25 あまり 1 25/2= 12 あまり 1 12/2= 6 あまり 0 6/2= 3 あまり 0 3/2= 1 あまり 1 1/2= 0 あまり 1 0b= 110011011010 となり、これを16進数にするために4桁に区切る。 「1100」、「1101」、「1010」となる。 0b1101=(1*2^3)+(1*2^2)+(0*2^1)+(0*2^0) = 8 + 4 + 0 + 0 =12 0b1101=(1*2^3)+(1*2^2)+(0*2^1)+(1*2^0) = 8 + 4 + 0 + 2 =14 0b1010=(1*2^3)+(0*2^2)+(1*2^1)+(0*2^0) = 8 + 0 2 + 0 =10 対応表より 12=C 14=E 10=A となるので答えは、 0d2010=0xCEA となる。 b.0d 2010 = 0b?? a問題から、0d2010=0b110011011010 4桁毎に区切る。 「1100」、「1101」、「1010」となる。 0b1101=(1*2^3)+(1*2^2)+(0*2^1)+(0*2^0) = 8 + 4 + 0 + 0 =12 0b1101=(1*2^3)+(1*2^2)+(0*2^1)+(1*2^0) = 8 + 4 + 0 + 2 =14 0b1010=(1*2^3)+(0*2^2)+(1*2^1)+(0*2^0) = 8 + 0 2 + 0 =10 対応表より 12=C 14=E 10=A となるので答えは、 0d2010=0xCEA となる。 参考文献:Rubyプログラミング基礎講座/広瀬 雄二 より 第8講:「計算機の内部表現」 2. A. a.考えた設定:最初の問で、作ったものをプログラムで対にして全て表示するよ うにする。 b.作成したプログラム:hash_for.rb #!/usr/koeki/bin/ruby $KCODE = 'e' #日本語コードで出力するようにする。 country = Hash.new #Hash 配列を counrtyと定義する。 country["日本"]="東京" country["アメリカ"]="ワシントンD.C" country["フランス"]="パリ" country["オランダ"]="アムステルダム" country["スウェーデン"]="ストックホルム" country["イギリス"]="ロンドン" country["アルゼンチン"]="ブエノスアイレス" country["モロッコ"]="ラバト" country["メキシコ"]="メキシコシティ" for kuni,shuto in country #for キー名、値 in 配列 printf("%s の首都は 「%s」 です。\n", kuni, shuto) #行う操作 end c.元にしたプログラムからの変更点:授業ページのhash_pair.rbをもとにして、 作成した。全部の Hashの対を綺麗に出力するために for - end を使った。 d.実行結果: pan{c109030}% ./hash_for.rb [~/Ruby] スウェーデン の首都は 「ストックホルム」 です。 イギリス の首都は 「ロンドン」 です。 フランス の首都は 「パリ」 です。 アメリカ の首都は 「ワシントンD.C」 です。 モロッコ の首都は 「ラバト」 です。 アルゼンチン の首都は 「ブエノスアイレス」 です。 オランダ の首都は 「アムステルダム」 です。 日本 の首都は 「東京」 です。 メキシコ の首都は 「メキシコシティ」 です。 e.考察:本当に作成した Hashの対の通り、表示されたか確認する。 プログラム country["日本"]="東京" country["アメリカ"]="ワシントンD.C" country["フランス"]="パリ" country["オランダ"]="アムステルダム" country["スウェーデン"]="ストックホルム" country["イギリス"]="ロンドン" country["アルゼンチン"]="ブエノスアイレス" country["モロッコ"]="ラバト" country["メキシコ"]="メキシコシティ" 実行結果 pan{c109030}% ./hash_for.rb [~/Ruby] スウェーデン の首都は 「ストックホルム」 です。 イギリス の首都は 「ロンドン」 です。 フランス の首都は 「パリ」 です。 アメリカ の首都は 「ワシントンD.C」 です。 モロッコ の首都は 「ラバト」 です。 アルゼンチン の首都は 「ブエノスアイレス」 です。 オランダ の首都は 「アムステルダム」 です。 日本 の首都は 「東京」 です。 メキシコ の首都は 「メキシコシティ」 です。 Hashの対と、実行結果の対が同じなので、プログラムは正しく動いたといえる。 B. a.考えた設定:hash_for.rbにユーザが選択した情報だけを表示するようにする。 ユーザに国名を入力してもらうと、国名と首都名が表示されるプ ログラム。 b.作成したプログラム:hash_choice.rb #!/usr/koeki/bin/ruby $KCODE = 'e' #日本語コードで出力する。 country = Hash.new("ありません。\n") #Hash配列を country と定義する。 country["日本"]="東京" country["アメリカ"]="ワシントンD.C" country["フランス"]="パリ" country["オランダ"]="アムステルダム" country["スウェーデン"]="ストックホルム" country["イギリス"]="ロンドン" country["アルゼンチン"]="ブエノスアイレス" country["モロッコ"]="ラバト" country["メキシコ"]="メキシコシティ" print("国名を入力すると、首都が表示されます。\n") STDERR.print("国名は?: ") #STDERR.print は入力を促す文章 kuni = gets.chomp if country.key?(kuni) == false #文字列keyがあるかどうか調べる printf("%s は%s \n",kuni,country[kuni]) #存在しなければfalseという値を返す else printf("%sの首都は %sです。\n",kuni,country[kuni]) end c.元にしたプログラムからの変更点:Aのhash_for.rbを元にして作成した。授業 ページの該当キーが呼び出されたときを参考にして作成した。 d.実行結果 プログラムにある都道府県の場合 pan{c109030}% ./hash_choice.rb [~/Ruby] 国名を入力すると、首都が表示されます。 国名は?: 日本 日本の首都は 東京です。 プログラムに無い都道府県の場合 pan{c109030}% ./hash_choice.rb [~/Ruby] 国名を入力すると、首都が表示されます。 国名は?: イタリア イタリア はありません。 e.考察:プログラムに登録してある国名を入力すると、国名と対になる首都が表 示された。登録していない国名を入力すると入力した国名の後に「あり ません」と表示される。個のことからプログラムは正しく動いていると いえる。 C. a.考えた設定:ユーザが知りたい国の首都名が出てこない場合に、ユーザに対を 登録させるプログラム。そして、登録させたデータを表示する。 国名と首都を入力してもらう。 b.作成したプログラム:hash_register.rb #!/usr/koeki/bin/ruby $KCODE = 'e' #日本語コードで出力 shuto = Hash.new #Hash配列をshutoと定義する STDERR.print("国名と首都を入力してください(Ctrl-Dで終了)\n") while true STDERR.print("国名:\n") #STDERR.print("入力を促す文章") kuni = gets if kuni == nil #Ctrl-Dが押されたとき break #whileの繰り返しから抜ける else kuni = kuni.chomp STDERR.print("首都:\n") #STDERR.print("入力を促す文章") namae =gets.chomp shuto[kuni] = namae end end for kuni,namae in shuto # for キー名,値 in ハッシュ配列 printf("%sの首都は%sです。\n",kuni,namae) end c.元にしたプログラムからの変更点:授業で作成した、「hash_pair.rb」を元に 作成した。自分が考えた設定に合うように変更した。国名と首都を入力しても らうため、並びかえはしなかった。 d.実行結果 pan{c109030}% ./hash_register.rb [~/Ruby] 国名と首都を入力してください(Ctrl-Dで終了) 国名: ブルガリア 首都: ソフィア 国名: ブルガリアの首都はソフィアです。 e.考察:登録されていない国で、国名と首都を入力したら、終了した後に表示す ることが出来た。なので、プログラムは正しく動いたといえる。 3.感想:始めて行なう作業だったので、前期の最初の授業のときみたいにとまどっ たが、やってみるとおもしろいので、いろんなことに活用して行きたい。 4.参考文献:2010年度 後期基礎プログラミングII 第2回/西村 まどか より http://roy/~madoka/2010/r2/02/ 「あるかないか」:http://roy/~madoka/2010/r2/02/02_04_theme_03_existornot.html 「Hashの対を入力するには」 http://roy/~madoka/2010/r2/02/02_06_theme_05_hash_pair.html