第 2 回 なになにといえばこれこれ レポート課題 氏名:佐藤 汰紀 学籍番号:C1101046 語学クラス:英語2 コース(系):環境サイエンスコース 筆記問題 A.スポーツの特徴を hash 配列 sports としました。 sports の key と value はそれぞれスポーツ名とそのスポーツに使われる球に しました。 1: key 「サッカー」に対して value は「サッカーボール」 2: key 「バスケットボール」 に対して value は「バスケットボール」 3: key 「バドミントン」 に対して value は「シャトル」 4: key 「バレーボール」に対して value は「バレーボール」 5: key 「野球」に対して value は「野球ボール」 これを Hash で表すと、 sports["サッカー"] = "サッカーボール" sports["バスケットボール"] = "バスケットボール" sports["バドミントン"] = "シャトル" sports["バレーボール"] = "バレーボール" sports["野球ボール"] = "野球ボール" となります。 また、もう一つの表し方はとしては、 { "サッカー" => "サッカーボール", "バスケットボール" => "バスケットボール", "バドミントン" => "シャトル", "バレーボール" => "バレーボール", "野球ボール" => "野球ボール" } となります。 B. a. 1. 0d 2010 = 0x ?? 0dが10進数、0xが16進数、0bが2進数のため、今回は10進数を16進数に変換する。 10進数を16進数に変換するときは、10進数16進数で割り切れなくなるまで割りつ づける。 その後、余りの部分から16進数の数え方で数えていく。 16)2010 10 ---- 16) 125 13 ---- 16) 7 7 ---- 0 計算結果は上のようになり、それぞれ 10進数 16進数 7 7 13 d 10 a このように変換できる。 結果、0d 2010 = 0x7daとなる。 b. 0d 2010 = 0b ?? 0bが2進数なので、10進数を2進数に変換する。 2進数に変換するときは、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 結果余りを逆から読んでいくと、11111011010となる。 b.は16進数でも同じ答えになるかたしかめるため、2進数を16進数に変換する。 変換方法は、2進数を1のくらいからそれぞれ4桁に区切り、16進数に変換してい く。その際、3桁や2桁の値に関しては、0が省略されているので注意すること。 111 1101 1010 → 0111 1101 1010と同じ意味 0111 → 7 1101 → d 1010 → a 結果、0b1111011010 = 0x7daとなり、a.の問題の答えと一致した。 プログラム問題 a プログラム #!/usr/koeki/bin/ruby $KCODE = 'e' sports = Hash.new sports["サッカー"] = "サッカーボール" sports["バスケットボール"] = "バスケットボール" sports["バドミントン"] = "シャトル" sports["バレーボール"] = "バレーボール" sports["野球"] = "野球ボール" for playsports, ball in sports printf("%sというスポーツは%sを使って遊びます。\n", playsports, ball) end 実行結果 pan{c110104}% ./hash_for.rb [~/Ruby] 野球というスポーツは野球ボールを使って遊びます。 サッカーというスポーツはサッカーボールを使って遊びます。 バレーボールというスポーツはバレーボールを使って遊びます。 バドミントンというスポーツはシャトルを使って遊びます。 バスケットボールというスポーツはバスケットボールを使って遊びます。 変更点 筆記問題に$KCODEとHash.newを用いてプログラム内にあるデータを出力できるようにした。 b プログラム #!/usr/koeki/bin/ruby $KCODE = 'e' sports = Hash.new sports["サッカー"] = "サッカーボール" sports["バスケットボール"] = "バスケットボール" sports["バドミントン"] = "シャトル" sports["バレーボール"] = "バレーボール" sports["野球"] = "野球ボール" print("スポーツ名をにゅうりょくしてね。\n") STDERR.print("何て名前のスポーツ?:") playsports = gets.chomp if sports.key?(playsports) == true printf("%s というスポーツは%sを使って遊びます。\n",playsports, sports[playsports]) else printf("そのスポーツはこの世に存在しません(笑)\n") end 実行結果 pan{c110104}% ./hash_choice.rb [~/Ruby] スポーツ名をにゅうりょくしてね。 何て名前のスポーツ?:バスケットボール バスケットボール というスポーツはバスケットボールを使って遊びます。 pan{c110104}% ./hash_choice.rb [~/Ruby] スポーツ名をにゅうりょくしてね。 何て名前のスポーツ?:バスケット そのスポーツはデータベースに存在しません(笑) 変更点 if文とelsifを用いて、プログラムに入力されたデータが入っているかどうかを 調べるプログラムになった。 考察 どちらもプログラムの中に入っている値を表示できた。知りたい情報が違った場 合は、再入力を促したほうが良いのだろうか。 感想 プログラムをつくる能力がまだまだ未熟でbまでしかうまく起動できなかった。 このようなプログラムが組まれているのは、たとえばコンビニの品物や金額といっ た管理をするプログラムや、図書館などの検索サービスなどが上げられると思う。 参考文献 2011年 後期基礎プログラミングII 第 2 回 (なになにといえばこれこれ)「ある かないか」西村まどか http://roy/~madoka/2011/r2/02/r2_02_04_theme_03_existornot.html 2011年 後期基礎プログラミングII 第 2 回 (なになにといえばこれこれ) 「Hash の対を表示するには」西村まどか http://roy/~madoka/2011/r2/02/r2_02_07_theme_06_forprint.html