第2回 なになにといえばこれこれ レポート課題 氏名:土屋哲平 学籍番号:c1111085 語学クラス:中国語3 コース:政策マネジメント 1.筆記問題 A 山形空港から各都市までの料金をhash配列hikoukiとした。 hikoukinoのkeyとvalueはそれぞれ都市名と片道料金にした。 なお料金は適当な値にした。 ・key「東京」に対してvalueは「5000」 ・key「大阪」に対してvalueは「8000」 ・key「博多」に対してvalueは「9500」 ・key「札幌」に対してvalueは「4500」 ・key「那覇」に対してvalueは「11500」 これに対応するHashの表し方は hikouki["東京"] = 5000 hikouki["大阪"] = 8000 hikouki["博多"] = 9500 hikouki["札幌"] = 4500 hikouki["那覇"] = 11500 またもう1つの表し方は {"東京"=>5000, "大阪"=>8000, "博多"=>9500, "札幌"=>4500, "那覇"=>11500} となる。 B a.Ox2012を16進数に変換する。 2012を16で割って行くと 2012/16=125...12 125/16=7...13 7/16=0...7 となる。16進数では12、13はそれぞれc、dと表されるので Od2012=Ox7dcとなる。 b.Od2012を2進数に変換する。 2012を2で割っていくと2進数に変換することができる。 2012/2=1006...0 1006/2=503...0 503/2=251...1 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 となるのでOx2012=Ob11111011100になる。 さらにこれを16進数に変換する。右から4桁ごとに区切り それぞれに対応する16進数に当てはめていく。対応する進数は次のとおりである。 0 0 0 1 1 1 10 2 2 11 3 3 100 4 4 101 5 5 110 6 6 111 7 7 1000 8 8 1001 9 9 1010 10 a 1011 11 b 1100 12 c 1101 13 d 1110 14 e 1111 15 f 111は7、1101は13なのでd、1100は12なのでcとなり 0x7dcと表され、aの問題と答えが同じになったので正しく進数変換されたと いうことがわかった。 2.プログラム問題 A a.考えた設定 山形空港から飛行機が出ている都市と料金を表示させるプログラム。 なお都市と料金は自分で適当に決めたので実際のものとは異る。 b.作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp hikouki = Hash.new #変数をhikoukiとし、Hashを使う hikouki["東京"] = 5000 #東京は5000円 hikouki["大阪"] = 8000 #大阪は8000円 hikouki["博多"] = 9500 #博多は9500円 hikouki["札幌"] = 4500 #札幌は4500円 hikouki["那覇"] = 11500 #那覇は11500円 for city in hikouki.keys # printf("山形空港から%sまで%d[円]\n",city, hikouki[city]) end c.もとにしたプログラムからの変更点 授業内で作成したhash_shop.rbをもとにプログラムを作成した。変更した点は変 数をhikoukiにし、都市と料金を入力した。 d.実行画面 pan{c111108}% ./hash_for.rb [~/Ruby] 山形空港から東京まで5000[円] 山形空港から大阪まで8000[円] 山形空港から博多まで9500[円] 山形空港から札幌まで4500[円] 山形空港から那覇まで11500[円] e.考察 プログラムで作成した対が、実行画面の対と同じであった。よってこのプログラムは正しいといえる。 最初はfor文の使い方、なぜそうなるのかが分からなかったのでprintf文がうま く表示できなかったが、友だちに教えてもらい、やり方が分かった。その結果 正しくプログラムを作ることができた。 f.参考文献 webサイトhttp://roy/~madoka/2012/r2/02/r2_02_03_theme_02_hash_input.html 西村まどか 2012年度 基礎プログラミングII講義ノート なになにといえばこれこれ 2.「入力したデータを取り出そう」 B a.考えた設定 Aで作成したhash_for.rbから、ユーザーが入力した情報だけを表示できるように する。ユーザーは都市名を入力することで都市を決め、片道か往復かを選択する ことができる。往復の場合は割り引きされる設定になっている。 b.作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp hikouki = Hash.new("御利用になれません。") hikouki["東京"] = 5000 hikouki["大阪"] = 8000 hikouki["博多"] = 9500 hikouki["札幌"] = 4500 hikouki["那覇"] = 11500 for city in hikouki.keys #for キー名 in ハッシュ配列 printf("山形空港から\t%s\tまで%d[円]\n",city, hikouki[city]) end STDERR.print("都市名: ") req = gets.chomp #ユーザーに入力させる if hikouki.key?(req) == true #もし入力された文字が真なら STDERR.print("片道 or 往復: ") miti = gets.chomp #往復か片道か入力させる if miti == "片道" #もし入力されたのが片道なら printf("%s\tまで\t%s\t%d[円]\n",req, miti, hikouki[req]) #都市名と片道料金を表示 elsif miti == "往復" #そうではなく入力されたのが往復なら printf("%s\tまで\t%s\t%d[円]\n",req, miti, hikouki[req] * 1.8) #都市名と往復料金を表示 end else printf("%sは%s\n",req,hikouki[req]) end c.もとにしたプログラムからの変更点 授業内で作成したプログラムhash_choice.rbとAの問題で作成したプログラムhash_for.rbをもとにプログラムを作成した。 変更点はユーザーに入力させる部分で片道か往復か2択形式にし、片道では対と なる値を表示し、往復では割り引きされた料金が表示されるようにした。 はじめに入力された対以外のものが入力された場合は「御利用になれません」と いうメッセージが出力されるようにした。 d.実行画面 <山形空港から東京まで片道の場合> pan{c111108}% ./hash_choice.rb [~/Ruby] 山形空港から 東京 まで5000[円] 山形空港から 大阪 まで8000[円] 山形空港から 博多 まで9500[円] 山形空港から 札幌 まで4500[円] 山形空港から 那覇 まで11500[円] 都市名: 東京 片道 or 往復: 片道 東京 まで 片道 5000[円] <東京まで往復の場合> pan{c111108}% ./hash_choice.rb [~/Ruby] 山形空港から 東京 まで5000[円] 山形空港から 大阪 まで8000[円] 山形空港から 博多 まで9500[円] 山形空港から 札幌 まで4500[円] 山形空港から 那覇 まで11500[円] 都市名: 東京 片道 or 往復: 往復 東京 まで 往復 9000[円] <大阪まで片道の場合> pan{c111108}% ./hash_choice.rb [~/Ruby] 山形空港から 東京 まで5000[円] 山形空港から 大阪 まで8000[円] 山形空港から 博多 まで9500[円] 山形空港から 札幌 まで4500[円] 山形空港から 那覇 まで11500[円] 都市名: 大阪 片道 or 往復: 片道 大阪 まで 片道 8000[円] <大阪まで往復の場合> pan{c111108}% ./hash_choice.rb [~/Ruby] 山形空港から 東京 まで5000[円] 山形空港から 大阪 まで8000[円] 山形空港から 博多 まで9500[円] 山形空港から 札幌 まで4500[円] 山形空港から 那覇 まで11500[円] 都市名: ^O大阪 片道 or 往復: 往復 大阪 まで 往復 14400[円] <札幌まで片道の場合> pan{c111108}% ./hash_choice.rb [~/Ruby] 山形空港から 東京 まで5000[円] 山形空港から 大阪 まで8000[円] 山形空港から 博多 まで9500[円] 山形空港から 札幌 まで4500[円] 山形空港から 那覇 まで11500[円] 都市名: 札幌 片道 or 往復: 片道 札幌 まで 片道 4500[円] <札幌まで往復の場合> pan{c111108}% ./hash_choice.rb [~/Ruby] 山形空港から 東京 まで5000[円] 山形空港から 大阪 まで8000[円] 山形空港から 博多 まで9500[円] 山形空港から 札幌 まで4500[円] 山形空港から 那覇 まで11500[円] 都市名: 札幌 片道 or 往復: 往復 札幌 まで 往復 8100[円] <那覇まで片道の場合> pan{TSUCHIYA Teppei}% ./hash_choice.rb [~/Ruby] 山形空港から 東京 まで5000[円] 山形空港から 大阪 まで8000[円] 山形空港から 博多 まで9500[円] 山形空港から 札幌 まで4500[円] 山形空港から 那覇 まで11500[円] 都市名: 那覇 片道 or 往復: 片道 那覇 まで 片道 11500[円] <那覇まで往復の場合> pan{c111108}% ./hash_choice.rb [~/Ruby] 山形空港から 東京 まで5000[円] 山形空港から 大阪 まで8000[円] 山形空港から 博多 まで9500[円] 山形空港から 札幌 まで4500[円] 山形空港から 那覇 まで11500[円] 都市名: 那覇 片道 or 往復: 往復 那覇 まで 往復 20700[円] <登録されていない都市が入力された場合> pan{c111108}% ./hash_choice.rb [~/Ruby] 山形空港から 東京 まで5000[円] 山形空港から 大阪 まで8000[円] 山形空港から 博多 まで9500[円] 山形空港から 札幌 まで4500[円] 山形空港から 那覇 まで11500[円] 都市名: 秋田 秋田は御利用になれません。 e.考察 実行された結果が正しいか確かめる。 片道の場合は都市と料金が正しく表示されているので正しいといえる。 次に往復の場合の結果が正しいか計算して確かめる。 プログラムではもともとの料金に1.8をかけることで、片道2枚分の料金から1割 引された料金が表示されるように設定してあるので、片道料金に1.8をかけて 実行結果と同じ答えになるか確かめる。 <東京> pan{c111108}% bc -l [~] 5000*1.8 9000.0 <大阪> 8000*1.8 14400.0 <博多> 9500*1.8 17100.0 <札幌> 4500*1.8 8100.0 <那覇> 11500*1.8 20700.0 計算した結果が実行結果と同じだった。 登録されていない都市が入力された場合は、「御利用になれません」とメッセー ジが表示されたので、このプログラムは正しいといえる。 f.参考文献 webサイト http://roy/~madoka/2012/r2/02/r2_02_05_theme_04_default.html 西村まどか 2012年度基礎プログラミングII 講義ノート 第2回 なになにといえばこれこれ 「対がないものが呼び出されたとき」 C. a.考えた設定 ユーザーから入力された都市名と料金を表示する。 b.作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp hikouki= Hash.new #変数をhikoukiとし、Hashを使う STDERR.print("都市名と料金を入力(Ctrl-D で終了)\n") while true #繰り返し処理 STDERR.print("都市名: ") city = gets #都市名を入力させる if city == nil #入力をやめたら break #処理を終了する else city = city.chomp #都市名を入力させる end STDERR.print("片道料金: ") hikouki[city] = gets.to_i #料金を入力させる値は整数値 end STDERR.print("入力終了\n") hikouki.keys.sort.each{|city| printf("%s\t片道%d[円]\n",city,hikouki[city]) } c.もとにしたプログラムからの変更点 授業内で作成したプログラムhash.pair.rbをもとにプログラムを作成した。 都市名と料金を入力させるようにした。入力したものの一覧では片道料金と 往復料金が表示されるように変更した。 d.実行画面 pan{c111108}% ./hahs_register.rb [~/Ruby] 都市名と料金を入力(Ctrl-D で終了) 都市名: ソウル 片道料金: 16000 都市名: アメリカ 片道料金: 20000 都市名: 新潟 片道料金: 3000 都市名: 入力終了 アメリカ 片道20000[円] 往復36000[円] ソウル 片道16000[円] 往復28800[円] 新潟 片道3000[円] 往復5400[円] e.考察 実行された結果が正しいか計算で確かめる。 往復料金は片道料金に1.8をかけて求める。 片道料金は入力した通りに表示された。 <ソウル> 16000*1.8 28800.0 <アメリカ> 20000*1.8 36000.0 <新潟> 3000*1.8 5400.0 計算した結果と実行結果が同じだった。 入力した結果を表示する際、sortを使ったので五十音順にならんでいる。 以上のことからこのプログラムは正しいと言える。 f.参考文献 webサイト http://roy/~madoka/2012/r2/02/r2_02_07_theme_06_forprint.html 西村まどか 2012年度基礎プログラミングII 講義ノート 第2回 なになにといえばこれこれ 「Hashの対を表示するには」 3.感想 今回の講義ではじめてHashを学んだ。始めは説明を聞いても所々しか分からなかっ たが、課題を作成していく中でHashの構造を掴むことができた。分からない部分 が出てきても、疑問を1つ1つ解決していくことでより理解が深まり、内容を把握 することができた。これはプログラミングを学習する上では大事なことだと思う。 生活の中でHashが使われているものでは、飲食店などのレジで使われている。 ある店では、レジに予め商品名が書かれているボタンがあり、それを押すと金額 が表示される仕組みになっている。また、新商品が発売されると、また新たな商 品名のボタンを作成し、金額を入力して対応している。これは今回学んだHashの 対を入力するやり方と同じではないかと私は思う。日常生活の中でHashは使われ ていることに気づくことができた。 共同学習者:佐藤咲