第 2 回 なになにといえばこれこれ レポート課題 氏 名: 本間 紘司 学籍番号: C1101796 語学クラス: 中国語 コース(系): 社会福祉 1.筆記問題 A.ゲームの機種の値段を hash 配列 moneyとしました。 money の key と value は機種名と値段としました。 その 1: key 「ps3」 に対して valueは25000 その 2: key 「psp」 に対して valueは18000 その 3: key 「wii」 に対して valueは20000 その 4: key 「3ds」 に対して valueは15000 その 5: key 「xbox360」に対して valueは20000 これに対応する Hash の表し方は money["ps3"] = 25000 money["psp"] = 18000 money["wii"] = 20000 money["3ds"] = 15000 money["xbox360"] = 20000 そしてもうひとつの表し方は {"wii"=>20000, "3DS"=>15000, "psp"=>18000, "xbox360"=>20000, "PS3"=>25000}となりました。 B.計算問題 a. od 2010 = ox ?? 「解答」 まず od 2010は10進数である。そしてこの問題は10進数を16進数に変換す ること。方法としては以下の通り 16)2010 10 [1]変換したい10進数を16で割り商をしたに、余りを右に書く ーーー [2]商をさらに16で割り。その商を下に、余りを右に書く 16)125 13 [3]商が0になるまで繰り返す。 ーーー [4]最後に余りを下から順に読む 16) 7 7 ーーー 0 ここで、10、13は2進数の構造により、13がd、10がaとなる a. od 2010 = ox7da b.od 2010 = ob ?? 「解答」 odは上記の通り、10進数である。obは2進数である。方法としては上記の 割るのを2に割るのに変えるだけである 2)2010 0 ーーー 2)1005 1 ーーー 2) 502 0 ーーー 2) 251 1 ーーー 2) 125 1 ーーー 2) 62 0 ーーー A.od 2010 = ob11111011010 2) 31 1 ーーー 2) 15 1 ーーー 2) 7 1 ーーー 2) 3 1 ーーー 2) 1 1 ーーー 0 ここで b が a の問と同じか確かめる まず2進数であるob11111011010をaの答えの16進数に変換する必要がある 2進数を16進数に変換するためには末尾から4桁ずつに区切り、それぞれ 16進数に変換する必要がある。また先頭が4桁に満たない場合は左側に 0をつけ足す。 |111| |1101| |1010| → |0111| |1101| |1010| となり0111は16進数だと7、1101はd、1010はaとなり ob1111011010 = ox7daなったのでaの答えはbと同じである。 2.プログラム問題 A. iゲームの機種とその対になる値段を全て表示させるプログラムを作った。 ii.hash_for.rb #!/usr/koeki/bin/ruby $KCODE = "e" money = Hash.new #日本語コードで出力する money["PS3"] = 25000 money["psp"] = 18000 money["wii"] = 20000 money["3DS"] = 15000 money["xbox360"] = 20000 for kisyu,game in money #for キー名 in ハッシュ配列名 printf("%-9sの値段は%d円です。\n",kisyu,game) end iii.もとにしたプログラム:hash_add.rb for文に関してのみ参考 変更点vegitableをkisyuに変更、priceをゲームに変更 iv.プログラム実行結果 pan{c110179}% ./hash_for.rb [~/Ruby] wii の値段は20000円です。 3DS の値段は15000円です。 psp の値段は18000円です。 xbox360 の値段は20000円です。 PS3 の値段は25000円です。 pan{c110179}% [~/Ruby] v.考察 プログラムの実行結果では機種と値段が一致しているため正常に起動していると 考える。 B. i.知りたいゲームの機種を入力するだけで値段だ表示されるプログラムを作った。 ii.hash_choice.rb #!/usr/koeki/bin/ruby $KCODE = "e" #日本語コードで出力する money = Hash.new money["ps3"] = 25000 money["psp"] = 18000 money["wii"] = 20000 money["3ds"] = 15000 money["xbox360"] = 20000 print("ここにps3,psp,wii,3ds,xbox360があります。\n") sleep(1) #間を空ける print("どのゲームの機種の値段を知りたいですか?\n") sleep(1) STDERR.print("知りたい値段の機種を入力して下さい。:") kisyu = gets.chomp! #文字を入力する if money.key?(kisyu) == true #文字列 key があるかどうか調べる printf("%sの値段は%d円です。\n",kisyu,money[kisyu]) else printf("残念ながらあなたが買いたい機種はこのデータ上にありません…") end iii. もとにしたプログラム:hash_item.rb if文に関してにみ参考 参考にしたのみであとは自分で考えた。 iv.プログラム実行結果 pan{HOMMA Koji}% ./hash_choice.rb [~/Ruby] ここにps3,psp,wii,3ds,xbox360があります。 どのゲームの機種の値段を知りたいですか? 知りたい値段の機種を入力して下さい。:ps3 ps3の値段は25000円です。 pan{c110179}% ./hash_choice.rb [~/Ruby] ここにps3,psp,wii,3ds,xbox360があります。 どのゲームの機種の値段を知りたいですか? 知りたい値段の機種を入力して下さい。:3ds 3dsの値段は15000円です。 pan{c110179}% ./hash_choice.rb [~/Ruby] ここにps3,psp,wii,3ds,xbox360があります。 どのゲームの機種の値段を知りたいですか? 知りたい値段の機種を入力して下さい。:xbox360 xbox360の値段は20000円です。 pan{c110179}% ./hash_choice.rb [~/Ruby] ここにps3,psp,wii,3ds,xbox360があります。 どのゲームの機種の値段を知りたいですか? 知りたい値段の機種を入力して下さい。:psp vite 残念ながらあなたが買いたい機種はこのデータ上にありません…% pan{c110179}% v.考察 最初 if money.key?(kisyu) == falseと入力して、間違った場合に出る 表示が出た。だが、falseとは、存在しなければfaleという値を返すので この場合は存在すれば、trueという値を返すが正解なのでtrueに直した結果 正常に起動した。 3.感想 もう少し挑戦したいプログラムがあったが、時間がなくできなかったのが悔 しい。今回のプログラムは何度もチェックしたのであっているとは思う。これで ダメだったら、また次回上手くいくように頑張りたい。何とか授業についていけ るようにしたい。 4.参考文献 神田先生 基礎プログラミングI 9.16進数、ASCLLコード 西村先生 基礎プログラミングII 第 2 回 「なになにといえばこれこれ」 3.あるかないか 6.Hashの対を表示するためには プログラム hash_add.rb, hash_item.rb