第2回 基礎プログラミング II レポート課題 氏名 : 藤井駿 学籍番号 : c1091307 語学クラス : 英語3 コース : 地域共創 1.筆記問題 A. 野菜の特徴を hash 配列 food にしました。 food の key と value はそれぞれの名前と一般的な色にしました。 その 1: key「トマト」 に対して value は「赤」 その 2: key「なす」 に対して value は「紫」 その 3: key「ねぎ」 に対して value は「緑」 その 4: key「にんじん」 に対して value は「オレンジ」 その 5: key「じゃがいも」 に対して value は「茶」 その 6: key「もやし」 に対して value は「白」」 その 7: key「ほうれんそう」に対して value は「緑」 その 8: key「ピーマン」 に対して value は「緑」 その 9: key「パプリカ」 に対して value は「黄」 その 10: key「まいたけ」 に対して value は「茶」 これに対する Hash の表し方は food["トマト"] = "赤" food["なす"] = "紫" food["ねぎ"] = "緑" food["にんじん"] = "オレンジ" food["じゃがいも"] = "茶" food["もやし"] = "白" food["ほうれんそう"] = "緑" food["ピーマン"] = "緑" food["パプリカ"] = "黄" food["まいたけ"] = "茶" また、もう一つの表し方は {"トマト" => "赤" ,"なす" => "紫" ,"ねぎ" => "緑" , "にんじん" => "オレンジ" ,"じゃがいも" => "茶" , "もやし" => "白" ,"ほうれんそう" => "緑" ,"ピーマン" => "緑" , "パプリカ" => "黄" ,"まいたけ" => "茶" } B. a.0d 2010 = 0x ?? 10進数を16進数に変換すればよいから、2010 を16で割れなくなるまで割っ ていく。そして割ったときの余りを下からよんでいく。 2010 / 16 = 125 余り 10 125 / 16 = 7 余り 13 7 / 16 = 0 余り 7 16進数では、10からはアルファベットで表されるから、10 = a ,13 = dと なる。 したがって、上の答えを表記すると、7da となる。 ゆえに、 0d 2010 = 0x7da --------------- b.0d 2010 = 0b ?? 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 = 15 余り 1 15 / 2 = 7 余り 1 7 / 2 = 3 余り 1 3 / 2 = 1 余り 1 1 / 2 = 0 余り 1 下から余りを並べてみると、11111011010 。 よって、 0d 2010 = 0b11111011010 ----------------------- また、1問目と同じ答えになるかを確かめる。、 4つずつに区切ると、111 1101 1010 とはなるが、 最初のところは0が省略されているから、0111 1101 1010となる。 2進数の 0111 は 16進数で 7となり、同様に 1101は d、1010は a となる。 したがって 0b11111011010 = 0x7da ゆえに、1問目の答えと同じになる ----------------------- 2.プログラム問題 A. a.考えた設定 あらかじめプログラムに登録してある対を全て表示する b.作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語を文字化けしないようにする food = Hash.new # Hash 配列を food にする food["トマト"] = "赤" food["なす"] = "紫" food["ねぎ"] = "緑" food["にんじん"] = "オレンジ" food["じゃがいも"] = "茶" food["もやし"] = "白" food["ほうれんそう"] = "緑" food["ピーマン"] = "緑" food["パプリカ"] = "黄" food["まいたけ"] = "茶" for yasai ,iro in food # for キー名、値、in ハッシュ配列 printf("%s の代表的な色は「%s 色」です。\n", yasai, iro) end c.もとにしたプログラムからの変更点 授業のときに作成した2つのプログラムを参考にした。 shop というところを food に変更した。 d.実行結果 pan{c109130}% ./hash_for.rb [~/Ruby] パプリカ の代表的な色は「黄 色」です。 トマト の代表的な色は「赤 色」です。 まいたけ の代表的な色は「茶 色」です。 ほうれんそう の代表的な色は「緑 色」です。 なす の代表的な色は「紫 色」です。 じゃがいも の代表的な色は「茶 色」です。 にんじん の代表的な色は「オレンジ 色」です。 ピーマン の代表的な色は「緑 色」です。 もやし の代表的な色は「白 色」です。 ねぎ の代表的な色は「緑 色」です。 e.考察 プログラムで作成した Hash の対と実行結果の対が同じく表示されたので このプログラムは正しく作成できているといえる。 B. a.考えた設定 ユーザが知りたい情報だけを結果表示する b.作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語を文字化けしないようにする food = Hash.new("検索できません。\n") # Hash 配列を food にする food["トマト"] = "赤" food["なす"] = "紫" food["ねぎ"] = "緑" food["にんじん"] = "オレンジ" food["じゃがいも"] = "茶" food["もやし"] = "白" food["ほうれんそう"] = "緑" food["ピーマン"] = "緑" food["パプリカ"] = "黄" food["まいたけ"] = "茶" print("野菜の名前を入力すると、その野菜の代表的な色が表示されます。\n") STDERR.print("どんな野菜を検索しますか? : ") yasai = gets.chomp if food.key?(yasai) == true printf("%s は %s 色です。\n",yasai,food[yasai]) #正しければこの文字列を表示させる else printf("%s は %s\n",yasai,food[yasai]) #間違っていたらこの文字列を表示させる end c.もとにしたプログラムからの変更点 hash_data.rb を参考にして作成した。 if key? 文をいれて正しいかどうかを確かめるようにした。 d.実行結果 ◯プログラム内に検索したい野菜がある場合 pan{c109130}% ./hash_choice.rb [~/Ruby] 野菜の名前を入力すると、その野菜の代表的な色が表示されます。 どんな野菜を検索しますか? : トマト トマト は 赤 色です。 pan{c109130}% ./hash_choice.rb [~/Ruby] 野菜の名前を入力すると、その野菜の代表的な色が表示されます。 どんな野菜を検索しますか? : なす なす は 紫 色です。 ◯プログラム内に検索したい野菜がない場合 pan{c109130}% ./hash_choice.rb [~/Ruby] 野菜の名前を入力すると、その野菜の代表的な色が表示されます。 どんな野菜を検索しますか? : カボチャ カボチャ は 検索できません。 pan{c109130}% ./hash_choice.rb [~/Ruby] 野菜の名前を入力すると、その野菜の代表的な色が表示されます。 どんな野菜を検索しますか? : タマネギ タマネギ は 検索できません。 e.考察 検索したい野菜を入れるとどちらの場合かを正しく表示することが出来た。 よってこのプログラムは正常である。 C. a.考えた設定 ユーザに対を登録させ、登録した結果を出力する b.作成したプログラム #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語を文字化けしないようにする。 food = Hash.new print("野菜名と色を入力して下さい(Ctrl-D で終了)\n") while true print("野菜名を入力してください: \n") yasai = gets if yasai == nil # Ctrl-D が入力されたら while -- true を抜ける break else yasai = yasai.chomp end print("色を入力してください: \n") food[yasai] = gets.chomp end for list in food.keys printf("%s \t %s 色\n",list, food[list]) end c.もとにしたプログラムからの変更点 hash_pair.rb を参考にして作成した。 shop を food に、item を yasai に変更した。 d.実行結果 pan{c109130}% ./hash_register.rb [~/Ruby] 野菜名と色を入力して下さい(Ctrl-D で終了) 野菜名を入力してください: トマト 色を入力してください: 赤 野菜名を入力してください: なす 色を入力してください: 紫 野菜名を入力してください: ねぎ 色を入力してください: 緑 野菜名を入力してください: もやし 色を入力してください: 白 野菜名を入力してください: まいたけ 色を入力してください: 茶 野菜名を入力してください: にんじん 色を入力してください: オレンジ 野菜名を入力してください: パプリカ 色を入力してください: 黄 野菜名を入力してください: パプリカ 黄色 トマト 赤 色 まいたけ 茶 色 なす 紫 色 にんじん オレンジ 色 もやし 白 色 ねぎ 緑 色 e.考察 最終的には入力したものがしっかりと出てきたからこのプログラムは正常 であるといえる。 ただ、最後のリストの色のところが揃わずに見づらいものとなってしまっ たので、改善しないといけない。 3.感想 このことが実際に使われていると思われるもの : スーパーなどのレジ レジは値段と商品名が対になっていると思えるからである。 今回の課題はいつも以上に難しいような気がした。しかし授業でやったことを いかしていけば幾分楽になったので良かった。ほんの少しのミスでも作動しな いので凡ミスには気をつけていきたいと思う。 4.共同学習者 池田博哉