第2回 基礎プログラミング II レポート課題 氏名:川島哲 学籍番号:c1090489 語学クラス:英語3 コース(系):政策マネ 1. 1-1 ゲーム機とその会社を関連づける ゲーム機を"hard"とし”value"を会社名とする  ゲーム機(hard)  会社名(value) a.ニンテンドウ64  任天堂 b.セガサターン   セガ c.PSP        SCE d.3DO        松下電機 e.ATARI2600     ATARI これに対応するhashは hard[ニンテンドウ64]="任天堂" hard[セガサターン] ="セガ" hard[PSP] = "SCE" hard[3DO] ="松下電機" hard[ATARI2600] ="ATARI" もうひとつの表し方 hard{ "ニンテンドウ64"=>"任天堂","セガサターン"=>"セガ", "PSP"=>"SCE","3DO"=>"松下電機","ATARI2600"=>"ATARI" } 1-2 a.0d2010=0x?? 問題の値2010を16で割っていく 16)2010 16) 125…10 16) 112…13 7 余りの部分を16進数に置き換える 0d10=0xA 0d13=0xD 7は同じ 次に上記の式の下から順に余りを並べ替える 71310 ↓ 7DA 答え 0d2010=0x7DA b.0d2010=0b?? 2010を2で割っていく 2)2010 2)1005…0 2)502 …1 2)251 …0 2)125 …1 2)62 …1 2)31 …0 2)15 …1 2)7 …1 2)3 …1 1 …1 余りを並べ替える、この時上段が右端、下段が左端になる 11111011010 答え 0d=2010=0b11111011010 参考 10進数から2進数に変換する|基数変換|基本情報技術者講座: http://www.it-license.com/cardinal_number/DecimalToBinary.html 2. プログラムA a.考えた設定 筆記問題1-1で考えたハッシュを使って、作った会社とゲーム機を表示するプロ グラム b.プログラム名:hash_for.rb #!/usr/koeki/bin/ruby $KCODE = "e" #EUC入力 hard = Hash.new(0) hard["ニンテンドウ64"]="任天堂" hard["セガサターン"]="SEGA" hard["プレイステーション"] = "SCE" hard["3DO"] ="松下電機" hard["アタリ2600"] ="ATARI" for game,comp in hard #for文 printf("%sを作った会社は%sである。\n",game,comp) #結果表示文 end c.もとにしたプログラム テキスト160ページに書いてあったfruits.rbを作成し、授業ページに書いてあっ た文を合わせ、改変した。 d.実行 pan{c109048}% ./hash_for.rb [~/Ruby] アタリ2600を作った会社はATARIである。 ニンテンドウ64を作った会社は任天堂である。 3DOを作った会社は松下電機である。 プレイステーションを作った会社はSCEである。 e.考察 上手く出来たが種類を増やし結果表示文を変えてみると面白いかもしれない。 f.プログラムA参考 Rubyプログラミング基礎講座(広瀬雄二著) 156~160ページ 技術評論社 基礎プログラミング II 第2回 なになにといえばこれこれ 「何が入っているの か」 (講義ノート) /西村まどか http://roy/~madoka/2010/r2/02/02_09_theme_08_prints.html 基礎プログラミング2第三回 /神田直弥 http://roy/~naoya/rubyII/3.html プログラミングB a.考えた設定 Aで作ったhash_for.rbに必要な情報だけ開示させるように改変する b.プログラム名:hash_choice.rb #!/usr/koeki/bin/ruby $KCODE = "e" hard = Hash.new(0) #ハッシュ hard["ニンテンドウ64"]="任天堂" hard["セガサターン"]="SEGA" hard["プレイステーション"] = "SCE" hard["3DO"] ="松下電機" hard["アタリ2600"] ="ATARI" hard["PCエンジン"] = "ハドソン" hard["Xbox"] = "マイクロソフト" STDERR.print("ニンテンドウ64、セガサターン、プレイステーション、3DO、\nアタリ2600、PCエンジン,Xboxのどのゲーム機の会社について調べたい?\n") #質問文 why = gets.chomp game = hard[why] if game == 0 #もし該当するゲーム機がなかったら出る文 print("それは取扱っていないよ\n") else printf("%sを作った会社は%sです。\n",why,game) #該当するゲーム機があった場合表示する文 end c.もとにしたプログラム プログラムAで作ったhash_for.rbに項目を追加しテキスト160ページを参考に作 成した。 d.実行画面 パターンA(ニンテンドウ64を選んだ場合) pan{c109048}% ./hash_choice.rb [~/Ruby] ニンテンドウ64、セガサターン、プレイステーション、3DO、 アタリ2600、PCエンジン,Xboxのどのゲーム機の会社について調べたい? ニンテンドウ64 ニンテンドウ64を作った会社は任天堂です。 パターンB(セガサターンを選んだ場合) pan{c109048}% ./hash_choice.rb [~/Ruby] ニンテンドウ64、セガサターン、プレイステーション、3DO、 アタリ2600、PCエンジン,Xboxのどのゲーム機の会社について調べたい? セガサターン セガサターンを作った会社はSEGAです。 パターンC(プレイステーションを選んだ場合) pan{c109048}% ./hash_choice.rb [~/Ruby] ニンテンドウ64、セガサターン、プレイステーション、3DO、 アタリ2600、PCエンジン,Xboxのどのゲーム機の会社について調べたい? プレイステーション プレイステーションを作った会社はSCEです。 パターンD(3D0を選んだ場合) pan{c109048}% ./hash_choice.rb [~/Ruby] ニンテンドウ64、セガサターン、プレイステーション、3DO、 アタリ2600、PCエンジン,Xboxのどのゲーム機の会社について調べたい? 3DO 3DOを作った会社は松下電機です。 パターンE(アタリ2600を選んだ場合) pan{c109048}% ./hash_choice.rb [~/Ruby] ニンテンドウ64、セガサターン、プレイステーション、3DO、 アタリ2600、PCエンジン,Xboxのどのゲーム機の会社について調べたい? アタリ2600 アタリ2600を作った会社はATARIです。 パターンF(PCエンジンを選んだ場合) pan{c109048}% ./hash_choice.rb [~/Ruby] ニンテンドウ64、セガサターン、プレイステーション、3DO、 アタリ2600、PCエンジン,Xboxのどのゲーム機の会社について調べたい? PCエンジン PCエンジンを作った会社はハドソンです。 パターンG(Xboxを選んだ場合) pan{c109048}% ./hash_choice.rb [~/Ruby] ニンテンドウ64、セガサターン、プレイステーション、3DO、 アタリ2600、PCエンジン,Xboxのどのゲーム機の会社について調べたい? Xbox Xboxを作った会社はマイクロソフトです。 パターンH(上記以外のゲーム機を選んだ場合) pan{c109048}% ./hash_choice.rb [~/Ruby] ニンテンドウ64、セガサターン、プレイステーション、3DO、 アタリ2600、PCエンジン,Xboxのどのゲーム機の会社について調べたい? PC-98 それは取扱っていないよ e.考察 ゲーム機には海外だと名前が違うものもあるので一つのゲーム機に複数の値をセッ トして海外名も表示出来るようにすれば面白いかもしれない。 f.参考 Rubyプログラミング基礎講座(広瀬雄二著) 156~160ページ 技術評論社 プログラムC a.考えた設定 ゲーム機とその会社をユーザーに登録させるプログラム b.プログラム名:hash_register.rb #!/usr/koeki/bin/ruby $KCODE = "e" #言語変換 game = Hash.new(0) STDERR.print("ゲーム機と会社名を入力してください(ctrl-dで終了)\n") #入力指示文 while true #終了まで繰り返し STDERR.print("ゲーム機名:") #ゲーム機名入力 hard = gets if hard == nil #ctrl-dで終わらせるように設定 break else hard = hard.chomp STDERR.print("会社名:") #会社名入力指示文 comp = gets.chomp game[hard]= comp #ハッシュ設定 end end for hard,comp in game printf("%sを作ったのは%s\n",hard,comp) #結果文。\nで一行ずつ表示させる end c.元にしたプログラム 講義中に作った(DLした)プログラムhash_pair.rbを改変した。 d.実行画面 pan{c109048}% ./hash_register.rb [~/Ruby] ゲーム機と会社名を入力してください(ctrl-dで終了) ゲーム機名:スーパーファミコン 会社名:任天堂 ゲーム機名:ワンダースワン 会社名:バンダイ ゲーム機名:ニューファミコン 会社名:任天堂 ゲーム機名:ゲームギア 会社名:SNK ゲーム機名:スーパーファミコンを作ったのは任天堂 ニューファミコンを作ったのは任天堂 ワンダースワンを作ったのはバンダイ ゲームギアを作ったのはSNK e.考察 ctrl-dで終了するのはいいがゲーム機名入力/会社名入力と表示が被ってしまう のでこの対策が必要、またゲーム機は違えど同じ会社がふたつあった場合まとめ て「◯◯が作ったゲーム機は××と××です」と表示出来るといいかもしれない f.参考 Rubyプログラミング基礎講座(広瀬雄二著) 156~160ページ 技術評論社 基礎プログラミング II 第 2 回 「なになにといえばこれこれ」Hash の対を入 力するには (講義ノート): /西村まどか http://roy/~madoka/2010/r2/02/02_06_theme_05_hash_pair.html プログラム:hash_pair.rb /西村まどか http://roy/~madoka/2010/r2/prog/hash_pair.rb 3.感想 ひとつの項目にいくつも関連性のあるものをセットして検索等にひっかかるよう にする。 複雑な気もするが要は辞書を引くのと同じなんだろうと思った。文 字から検索してそこに載っている内容を見る、媒体が変わっただけでやっている ことは同じなんだろう。 4.協同学習者 田村周