第 2 回 なになにといえばこれこれ レポート課題 氏名:五十嵐 兼一 学籍番号:c1100153 語学クラス:英語2 コース(系):社会福祉コース ●参考文献のURLを付け忘れたので送り直します。 1.筆記問題 A. 私の所属しているバンドのそれぞれの担当楽器を hash 配列 member にしました。 member の key と value はメンバーの名前とその担当楽器にとりました。 その 1: key 「たいと」 に対して value は「ボーカル」 その 2: key 「めっし」 に対して value は「ギター(てるこ)」 その 3: key 「ひで」 に対して value は「ギター(ジェシカ)」 その 4: key 「けんつ」 に対して value は「ベース」 その 5: key 「ほいやー」に対して value は「ドラム」 これに対する hash の表し方は member["たいと"] = "ボーカル" member["めっし"] = "ギター(てるこ)" member["ひで"] = "ギター(ジェシカ)" member["けんつ"] = "ベース" member["ほいやー"] = "ドラム" また、もう一つの表し方は {"たいと" => "ボーカル", "めっし" => "ギター(てるこ)", "ひで" => "ギター(ジェシカ)", "けんつ" => "ベース", "ほいやー" => "ドラム", } B. ●a.0d 2010 = 0x 0d 2010 は10進数で、それを 0x(16進数)に変換するので、2010を割り切れなく なるまで16で割っていく。 16)2010 10 ----- 16)125 13 ---- 7 7 13 10 を16進数に変換すると 7 d a となるので A. 0d 2010 = 0x 7da となる。 ------------------- ●b.0d 2010 = 0b 0d 2010 は10進数で、それを 0b(2進数)に変換するので、2010を割り切れなく なるまで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 -- 1 A. 0d 2010 = 0b 11111011010 となる。 --------------------------- さらにこれ末尾から4桁ごと区切ってを16進数に変換すると、 1010 → a 1101 → d 0111 → 7 A.7da となるので、1問目と同じ答えになる ----- 2.プログラム問題 A.テーマ「バンドメンバーと担当楽器」 ●作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' #漢字コードは EUC であることを示す member = Hash.new #member が hash変数であることを示す member["たいと"] = "ボーカル" member["めっし"] = "ギター(てるこ)" member["ひで"] = "ギター(ジェシカ)" member["けんつ"] = "ベース" member["ほいやー"] = "ドラム" #p item for name, gakki in member #for-end で全てのデータを取り出す #for key名, 値 in hash配列名 printf("%s は %s です。\n",name,gakki) end ●実行結果 pan{IKARASHI Kenichi}% ./hash_for.rb [~/Ruby] たいと は ボーカル です。 ひで は ギター(ジェシカ) です。 けんつ は ベース です。 めっし は ギター(てるこ) です。 ほいやー は ドラム です。 ●考察 hash の対と実行結果の対が同じであるため、プログラムは正しく実行されてい る。 B.ユーザーが知りたい情報を表示 ●作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 漢字コードは EUC であることを示す member = Hash.new # member が hash変数であることを示す member["たいと"] = "ボーカル" member["めっし"] = "ギター(てるこ)" member["ひで"] = "ギター(ジェシカ)" member["けんつ"] = "ベース" member["ほいやー"] = "ドラム" #p item print("メンバー【たいと・めっし・ひで・けんつ・ほいやー】\n") STDERR.print("メンバーの名前を入力して下さい:") name = gets.chomp # name を読みこませる if member.key?(name) == false # 文字列 key があるかを調べ、無ければ false # という値を返す printf("\n%s はメンバーではありません。\n",name) else # 文字列 key がある場合は情報を表示する printf("\n%s は %s です。\n",name,member[name]) end ●実行結果 pan{IKARASHI Kenichi}% ./hash_choice.rb [~/Ruby] メンバー【たいと・めっし・ひで・けんつ・ほいやー】 メンバーの名前を入力して下さい:ひで ひで は ギター(ジェシカ) です。 ---------------------------------------------------------- pan{c110015}% ./hash_choice.rb [~/Ruby] メンバー【たいと・めっし・ひで・けんつ・ほいやー】 メンバーの名前を入力して下さい:るびお るびお はメンバーではありません。 ●考察 存在するメンバーの名前を入力すると名前と担当楽器が表示され、存在しないメ ンバー名を入力するとメンバーではありませんと表示されるので、プログラムは 正しく実行できている。 C.新しい情報を登録 ●作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 漢字コードは EUC であることを示す member = Hash.new # member が hash変数であることを示す member["たいと"] = "ボーカル" member["めっし"] = "ギター(てるこ)" member["ひで"] = "ギター(ジェシカ)" member["けんつ"] = "ベース" member["ほいやー"] = "ドラム" #p item print("メンバー【たいと・めっし・ひで・けんつ・ほいやー】\n") STDERR.print("メンバーの名前を入力して下さい:") name = gets.chomp # name を読みこませる if member.key?(name) == false # 文字列 key があるかを調べ、無ければ false # という値を返す printf("\n%s はメンバーではありません。\n",name) printf("\n%s さんを新しく登録します。\n",name) while true # 新しい複数の情報を登録してもらうための繰り返し STDERR.print("\n名前を入力して下さい(終了 ctrl-D):") name = gets if name == nil # ctrl-D が入力されたら終了 break # 繰り返しから抜けてプログラム終了 else name = name.chomp end STDERR.print("担当楽器を入力して下さい:") member[name] = gets.chomp end STDERR.print("入力終了\n") print("新メンバー追加!!\n") for name, gakki in member # 入力してもらったメンバーを追加して # 全てのデータを表示 printf("\n%s さんは %s です。\n",name, gakki) end else # 文字列 key がある場合は情報を表示する printf("\n%s は %s です。\n",name,member[name]) end ●実行結果 pan{c110015}% ./hash_register.rb [~/Ruby] メンバー【たいと・めっし・ひで・けんつ・ほいやー】 メンバーの名前を入力して下さい:ほいやー ほいやー は ドラム です。 ----------------------------------------------------------------- pan{c110015}% ./hash_register.rb [~/Ruby] メンバー【たいと・めっし・ひで・けんつ・ほいやー】 メンバーの名前を入力して下さい:ともとも ともとも はメンバーではありません。 ともとも さんを新しく登録します。 名前を入力して下さい(終了 ctrl-D):ともとも 担当楽器を入力して下さい:ガラクタ 名前を入力して下さい(終了 ctrl-D):まつもと 担当楽器を入力して下さい:しゃくはち 名前を入力して下さい(終了 ctrl-D):入力終了 新メンバー追加!! たいと さんは ボーカル です。 ひで さんは ギター(ジェシカ) です。 まつもと さんは しゃくはち です。 ともとも さんは ガラクタ です。 けんつ さんは ベース です。 めっし さんは ギター(てるこ) です。 ほいやー さんは ドラム です。 ●考察 登録されたデータがある場合、名前と担当楽器が表示された。 登録されていない場合、新しく登録されたデータが初めから登録されているデー タにプラスされて表示されたので、このプログラムは正しく実行できていると思 う。 3.感想 中古品の買い取り表のデータなど、商品名や型番などを入力すると買い取り価格 がいくらになっているのかがすぐわかるのではないかと思った。 4.参考文献 基礎プログラミングI 第9回「16進数・ASCIIコード」 著:神田直弥 http://roy/~naoya/ruby/9.html 基礎プログラミングII 第2回「なになにといえばこれこれ」 著:西村まどか http://roy/~madoka/2011/r2/02/