第2回 なになにといえばこれこれ レポート課題 氏名:山野 駿 学籍番号:c1111429 語学クラス:英語2 コース:社会福祉 1. A. ニュース番組とそのキャスターを hash 配列 news とした。 news の key と value はそれぞれ番組名とそのキャスターにとった。 1: keyに 「ZIP!」に対して value は 「桝太一」 2: keyに 「スッキリ!!」に対して value は 「加藤浩次」 3: keyに 「NEWS ZERO」に対して value は 「櫻井翔」 4: keyに 「報道ステーション」に対して value は 「古舘伊知郎」 5: keyに 「モーニングバード」に対して value は 「羽鳥慎一」 これに対応する表し方は news["ZIP!"] = "桝太一" news["スッキリ!!"] = "加藤浩次" news["NEWS ZERO"] = "櫻井翔" news["報道ステーション"] = "古舘伊知郎" news["モーニングバード"] = "羽鳥慎一" また、もう一つの表し方は {"ZIP!" => "桝太一","スッキリ!!" => "加藤浩次","NEWS ZERO" => "櫻井翔" "報道ステーション" => "古舘伊知郎","モーニングバード" => "羽鳥慎一"} となる。 B. a.10進数2012を16進数で表す。 10進数を16進数で表すには、10進数を16で割り、余りを隣に記していく必要があ る。最後まで、計算し終わったら下から読むと16進数になる。 つまり、 16)2012 12 16)125 13 16)7 7 0 7 13 12となり、16進数に直すと、 7 d cになる。 よって、答えは、 0x7dc b.10進数2012を2進数に、その後16進数にする。 まず、2012を2進数に変換する。 2012を2で割っていき、割り切れない場合はその数字の隣に1と書く。割り切るこ とができるときは0と振っていく。数字のとなりに書き出したものを下から読む と2進数になる。以下の通りである。 2)2012 0 2)1006 0 2)503 1 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 となり、 0b11111011100と表すことができる。 次に、0b11111011100これをさらに16進数に直す。 2進数を16進数に直すには、2進数を右から4桁ずつ区切り変換する必要がある。 4桁に満たない場合は4桁になるまで0を足す。 つまり、 0 1 1 1 * * * * 2^3 2^2 2^1 2^0 0+ 4+ 2+ 1 =7 1 1 0 1 * * * * 2^3 2^2 2^1 2^0 8+ 4+ 0+ 1 =13 1 1 0 0 * * * * 2^3 2^2 2^1 2^0 8+ 4+ 0 0 =12 7 13 12 となった。16進数で表すため、 7 d cとなる。 よって、答えは 0x7dc また a. と答えが一致した。よって、答えは正しく、どちらの計算をしても同じ 答えを求めることができる。 2. A. 1)設定 あらかじめプログラムに登録している対を全て表示する。 2)作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp news = Hash.new #hash配列を news とする。 news["ZIP!"] = "桝太一" news["スッキリ!!"] = "加藤浩次" news["NEWS ZERO"] = "櫻井翔" news["報道ステーション"] = "古館伊知郎" news["モーニングバード"] = "羽鳥慎一" for bangumi, caster in news #for キー名, 値 in Hash 配列名の順 printf("%sの顔といえば%sですよね。\n", bangumi,caster) end 3)もとにしたプログラムとその変更点 ・もとにしたプログラム hash_shop.rb ・変更点 配列名、キー名、値 を適切なものにした。 4)実行結果 pan{c111142}% ./hash_for.rb [~/Ruby] ZIP!の顔といえば桝太一ですよね。 スッキリ!!の顔といえば加藤浩次ですよね。 NEWS ZEROの顔といえば櫻井翔ですよね。 報道ステーションの顔といえば古館伊知郎ですよね。 モーニングバードの顔といえば羽鳥慎一ですよね。 5)考察 対になっているかをプログラム本体と実行結果画面を比較し確認する。 プログラム本体 #!/usr/koeki/bin/ruby #coding: euc-jp news = Hash.new #hash配列を news とする。 news["ZIP!"] = "桝太一" news["スッキリ!!"] = "加藤浩次" news["NEWS ZERO"] = "櫻井翔" news["報道ステーション"] = "古館伊知郎" news["モーニングバード"] = "羽鳥慎一" for bangumi, caster in news #for キー名, 値 in Hash 配列名の順 printf("%sの顔といえば%sですよね。\n", bangumi,caster) end 結果画面 pan{c111142}% ./hash_for.rb [~/Ruby] ZIP!の顔といえば桝太一ですよね。 スッキリ!!の顔といえば加藤浩次ですよね。 NEWS ZEROの顔といえば櫻井翔ですよね。 報道ステーションの顔といえば古館伊知郎ですよね。 モーニングバードの顔といえば羽鳥慎一ですよね。 対がそれぞれ同じであるため、このプログラムは正しいと言える。 B. 1)設定 知りたい情報を取り出して結果を表示する。 2)作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp news = Hash.new #hash配列を news とする。 news["ZIP"] = "桝太一" news["スッキリ"] = "加藤浩次" news["NEWS ZERO"] = "櫻井翔" news["報道ステーション"] = "古館伊知郎" news["モーニングバード"] = "羽鳥慎一" print("下記の番組名を入力するとその番組のキャスターを表示します。\n") print("ZIP\tスッキリ\tNEWS ZERO\t報道ステーション\tモーニングバード\n") STDERR.print("番組名:") #番組名を入力させるための箱 bangumi = gets.chomp if news.key?(bangumi) == true #カッコの中身があるか調べる。 printf("%sといえば%sですよねー\n", bangumi,news[bangumi]) else print("選択肢の中から選び直してください。\n") #入力が間違っていることを end #知らせる。 3)もとにしたプログラムとその変更点 ・もとにしたプログラム hash_shop.rb ・変更点 配列名、キー名 、値を適切なものにした。 else の後をprint文で表示させた。 4)実行結果 a)ZIP と入力した。 pan{c111142}% ./hash_choice.rb [~/Ruby] 下記の番組名を入力するとその番組のキャスターを表示します。 ZIP スッキリ NEWS ZERO 報道ステーション モーニングバード 番組名:ZIP ZIPといえば桝太一ですよねー b)スッキリ と入力した。 pan{c111142}% ./hash_choice.rb [~/Ruby] 下記の番組名を入力するとその番組のキャスターを表示します。 ZIP スッキリ NEWS ZERO 報道ステーション モーニングバード 番組名:スッキリ スッキリといえば加藤浩次ですよねー c)NEWS ZERO と入力した。 pan{YAMANO Shun}% ./hash_choice.rb [~/Ruby] 下記の番組名を入力するとその番組のキャスターを表示します。 ZIP スッキリ NEWS ZERO 報道ステーション モーニングバード 番組名:NEWS ZERO NEWS ZEROといえば櫻井翔ですよねー d)報道ステーション と入力した。 pan{c111142}% ./hash_choice.rb [~/Ruby] 下記の番組名を入力するとその番組のキャスターを表示します。 ZIP スッキリ NEWS ZERO 報道ステーション モーニングバード 番組名:報道ステーション 報道ステーションといえば古館伊知郎ですよねー e)モーニングバード と入力した。 pan{c111142}% ./hash_choice.rb [~/Ruby] 下記の番組名を入力するとその番組のキャスターを表示します。 ZIP スッキリ NEWS ZERO 報道ステーション モーニングバード 番組名:モーニングバード モーニングバードといえば羽鳥慎一ですよねー f)ズームイン と入力した。 pan{c111142}% ./hash_choice.rb [~/Ruby] 下記の番組名を入力するとその番組のキャスターを表示します。 ZIP スッキリ NEWS ZERO 報道ステーション モーニングバード 番組名:ズームイン 選択肢の中から選び直してください。 g)ミヤネ屋 と入力した。 pan{c111142}% ./hash_choice.rb [~/Ruby] 下記の番組名を入力するとその番組のキャスターを表示します。 ZIP スッキリ NEWS ZERO 報道ステーション モーニングバード 番組名:ミヤネ屋 選択肢の中から選び直してください。 h)news every と入力した。 pan{c111142}% ./hash_choice.rb [~/Ruby] 下記の番組名を入力するとその番組のキャスターを表示します。 ZIP スッキリ NEWS ZERO 報道ステーション モーニングバード 番組名:news every 選択肢の中から選び直してください。 5)考察 a)hash配列、キー名、値が一致しているため正しい。 b)hash配列、キー名、値が一致しているため正しい。 c)hash配列、キー名、値が一致しているため正しい。 d)hash配列、キー名、値が一致しているため正しい。 e)hash配列、キー名、値が一致しているため正しい。 f)選択肢にないものであると知らせている。 g)選択肢にないものであると知らせている。 h)選択肢にないものであると知らせている。 一致しているときは正しく表示され、間違っているときのエラー表示も正しく動 作しているため、このプログラムは正しい。しかし、エラー表示をした後もう一 度プログラムを起動しなければならない。このことから、エラー表示の後もう一 度質問するようなプログラムにする必要があると考える。 3. 実際に使われていると思うものは、自動販売機である。そのボタンを押したらこ れが出てくるいった構造を応用したものではないかと思う。 前期からの課題であった、エラー表示をしっかり出すことができた。仕組みは前 期のものとはことなっているかもしれないが、間違ったことを入力し、エラーが 表示されたときは嬉しかった。次回からは選択問題に全てとり組めるように努力 したい。 参考文献 http://roy/~madoka/2012/r2/02/r2_02_07_theme_06_forprint.html 西村まどか 基礎プログラミング II 第 2 回 (なになにといえばこれこれ) 「Hash の対を表示するには」 http://roy/~madoka/2012/r2/02/r2_02_05_theme_04_default.html 西村まどか 基礎プログラミング II 第 2 回 (なになにといえばこれこれ) 「対 にないものが呼び出されたとき」 http://roy/~madoka/2012/r2/02/r2_02_04_theme_03_existornot.html 西村まどか 基礎プログラミング II 第 2 回 (なになにといえばこれこれ) 「あ るかないか」 http://roy/~madoka/2012/r2/02/r2_02_03_theme_02_hash_input.html 西村まどか 基礎プログラミング II 第 2 回 (なになにといえばこれこれ) 「入 力したデータを取り出そう」 http://roy/~madoka/2012/r2/02/r2_02_07_theme_06_forprint.html 西村まどか 基礎プログラミング II 第 2 回 (なになにといえばこれこれ) 「Hash の対を表示するには」