第 7 回 ゼミ紹介 レポート課題 氏名:宮原絵美里 学籍番号:c110188 語学クラス:英語6 コース(系):地域共創 1.A a.【 bus.rb 仕様書 】 ◎プログラムの概要 乗車するバス停と 下車するバス停を選択し 何時まで到着したいか 時刻を入力することにより るんるんバスのバス時刻を 自動で調べてくれる とっても便利なプログラム♪ ◎プログラムの実行 *まず 右クリック → save link as で お好きな場所に bus.rb をダウンロードします。 *ktarm で プログラムを開いて実行します。 *るんるんバスで行きたい方向を選択します。 *乗車するバス停と 下車するバス停を選択します。 *何時まで 下車するバス停に到着したいか入力します。 *バス時刻を調べ 表示します。 b. bus.rb について 【設定】 前期に作った るんるんバスのバス時刻検索プログラムを 後期で習った知識を利 用し より簡潔に書き変えました。 【プログラム bus.rb】 #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語を使用 bus = Hash.new # bus という hash を作成 a = 0 # a という変数を使用 初期値は 0 def pattern(zikan,a,busstop,arr,dep,bus) # 定義 引数を()内に入れる while true # 繰り返し if a >= 8 # a が 8 以上になったら 以下のプログラムを実行 printf("\n+------------------------------------+\n") # 表示 printf(" 乗車 %18s %6d\n",busstop[dep],bus[busstop[dep]][a]) printf(" 下車 %18s %6d",busstop[arr],bus[busstop[arr]][a]) printf("\n+------------------------------------+\n") break # 繰り返しから抜ける elsif zikan > bus[busstop[arr]][a] && zikan < bus[busstop[arr]][a + 1] # zikan で入力された時間が bus[busstop[arr]][a] の時間 〜 bus[busstop[arr]][a+1] の時間の間であれば 以下のプログラムを実行 printf("\n+------------------------------------+\n") printf(" 乗車 %18s %6d\n",busstop[dep],bus[busstop[dep]][a]) printf(" 下車 %18s %6d",busstop[arr],bus[busstop[arr]][a]) printf("\n+------------------------------------+\n") break else # その他なら a += 1 end end end print("\nるんるんバスでお出かけしよう♪\nバス時刻を調べます。\n\n 1 駅方面 2 かんぽの郷方面\n\n●どっち方面に向かいますか? → ") houkou = gets.chomp!.to_i # 方向の選択 if houkou == 1 # 駅方面に向かう場合 open("/home/irhome/c110/c110188/Ruby/zikoku1.txt","r") do |zikoku| # 時刻表が入力されているtxtファイルを読み込む while line = zikoku.gets if /(\S*),(\S*),(\S*),(\S*),(\S*),(\S*),(\S*),(\S*),(\S*),(\S*)/ =~ line # 時間を正規表現で取り出し line に入れ込む bus[$10.to_s] = [$1.to_i,$2.to_i,$3.to_i,$4.to_i,$5.to_i, $6.to_i,$7.to_i,$8.to_i,$9.to_i] # 後方参照で hash に入れ込む end end end busstop = ["かんぽの郷","出羽遊心館・美術館","工業団地前","土門拳記念館","大学前","市営体育館前","山居町東","二番町","中町西","文化センター","八雲神社前","酒田駅正面口"] # hash の key をいちいち入力しなくても 数字で指定できるように print("\n出発するバス停と到着するバス停を選択します。\n\n+------------------------------+\n 0 かんぽの郷\n 1 出羽遊心館・美術館\n 2 工業団地前\n 3 土門拳記念館\n 4 大学前\n 5 市営体育館前\n 6 山居町東\n 7 二番町\n 8 中町西\n 9 文化センター\n 10 八雲神社前\n 11 酒田駅正面口\n+------------------------------+\n\n●何番のバス停で乗車しますか? → ") dep = gets.chomp!.to_i # 乗車するバス停を選択 print("●何番のバス停で下車しますか? → ") arr = gets.chomp!.to_i # 下車するバス停を選択 print("何時までに到着したいですか?\n 数字4桁で入力してね!\n 例)午前9時→0900 午後1時半→1\ 330 午後7時28分→1928\n ●例を参考に時刻を入力してね → ") zikan = gets.chomp!.to_i # 到着したい時刻を入力 pattern(zikan,a,busstop,arr,dep,bus) # def を呼び出す elsif houkou == 2 # かんぽの郷方面に向かう場合 以下 上とだいたい同じ open("/home/irhome/c110/c110188/Ruby/zikoku2.txt","r") do |zikoku| while line = zikoku.gets if /(\S*),(\S*),(\S*),(\S*),(\S*),(\S*),(\S*),(\S*),(\S*),(\S*)/ =~ line bus[$10.to_s] = [$1.to_i,$2.to_i,$3.to_i,$4.to_i,$5.to_i, $6.to_i,$7.to_i,$8.to_i,$9.to_i] end end end busstop = ["酒田駅正面口","八雲神社前","文化センター","中町西","二番町","山居町","東市営体育館前","大学前","土門拳記念館","工業団地前","出羽遊心館・美術館","かんぽの郷"] print("\n出発するバス停と到着するバス停を選択します。\n\n+------------------------------+\n 0 酒田駅正面口\n 1 八雲神社前\n 2 文化センター\n 3 中町西\n 4 二番町\n 5 山居町東\n 6 市営体育館前\n 7 大学前\n 8 土門拳記念館\n 9 工業団地前\n 10 出羽遊心館・美術館\n 11 かんぽの郷\n+------------------------------+\n\n●何番のバス停で乗車しますか? → ") dep = gets.chomp!.to_i print("●何番のバス停で下車しますか? → ") arr = gets.chomp!.to_i print("何時までに到着したいですか?\n 数字4桁で入力してね!\n 例)午前9時→0900 午後1時半→1\ 330 午後7時28分→1928\n ●例を参考に時刻を入力してね → ") zikan = gets.chomp!.to_i pattern(zikan,a,busstop,arr,dep,bus) end 【もとにしたプログラムと変更点】 前期に作った report6.rb を改良した。 配列をたくさん使用していたものを hashでまとめ if文で長々と書いていた部分をdefで定義付けし 変数を使うこと により 無駄を省くことができ 全体的にすっきりした。 【実行結果】 *駅方面へ向かう pan{c110188}% ./bus.rb [~/public_html/advertise2] るんるんバスでお出かけしよう♪ バス時刻を調べます。 1 駅方面 2 かんぽの郷方面 ●どっち方面に向かいますか? → 1 出発するバス停と到着するバス停を選択します。 +------------------------------+ 0 かんぽの郷 1 出羽遊心館・美術館 2 工業団地前 3 土門拳記念館 4 大学前 5 市営体育館前 6 山居町東 7 二番町 8 中町西 9 文化センター 10 八雲神社前 11 酒田駅正面口 +------------------------------+ ●何番のバス停で乗車しますか? → 4 ●何番のバス停で下車しますか? → 11 何時までに到着したいですか? 数字4桁で入力してね! 例)午前9時→0900 午後1時半→1330 午後7時28分→1928 ●例を参考に時刻を入力してね → 1200 +------------------------------------+ 乗車 大学前 1057 下車 酒田駅正面口 1112 +------------------------------------+ *かんぽの郷方面へ向かう pan{c110188}% ./bus.rb [~/public_html/advertise2] るんるんバスでお出かけしよう♪ バス時刻を調べます。 1 駅方面 2 かんぽの郷方面 ●どっち方面に向かいますか? → 2 出発するバス停と到着するバス停を選択します。 +------------------------------+ 0 酒田駅正面口 1 八雲神社前 2 文化センター 3 中町西 4 二番町 5 山居町東 6 市営体育館前 7 大学前 8 土門拳記念館 9 工業団地前 10 出羽遊心館・美術館 11 かんぽの郷 +------------------------------+ ●何番のバス停で乗車しますか? → 7 ●何番のバス停で下車しますか? → 11 何時までに到着したいですか? 数字4桁で入力してね! 例)午前9時→0900 午後1時半→1330 午後7時28分→1928 ●例を参考に時刻を入力してね → 2100 +------------------------------------+ 乗車 大学前 1935 下車 かんぽの郷 1942 +------------------------------------+ 【考察】 そのバス停を何時に通るかが書かれた zikoku1.txt や zikoku2.txt を見て確か めると 正しい時刻が表示されているとわかる。 *zikoku1.txt 0740,0910,1050,1210,1330,1455,1705,1815,2010,かんぽの郷 0742,0912,1052,1212,1332,1457,1707,1817,2012,出羽遊心館・美術館 0743,0913,1053,1213,1333,1458,1708,1818,2013,工業団地前 0746,0916,1056,1216,1336,1501,1711,1821,2016,土門拳記念館 0747,0917,1057,1217,1337,1502,1712,1822,2017,大学前 0752,0927,1102,1227,1342,1512,1717,1832,2022,市営体育館前 0754,0929,1104,1229,1344,1514,1719,1834,2024,山居町東 0756,0931,1106,1231,1346,1516,1721,1836,2026,二番町 0757,0932,1107,1232,1347,1517,1722,1837,2027,中町西 0800,0935,1110,1235,1350,1520,1725,1840,2030,文化センター前 0801,0936,1111,1236,1351,1521,1726,1848,2031,八雲神社前 802,0937,1112,1237,1352,1522,1727,1842,2032,酒田駅正面口 *zikoku2.txt 0705,0820,1015,1130,1250,1410,1600,1735,1920,酒田駅正面口 0706,0821,1016,1131,1251,1411,1601,1736,1921,八雲神社前 0707,0822,1017,1132,1252,1412,1602,1737,1922,文化センター前 0710,0825,1020,1135,1255,1415,1605,1740,1922,中町西 0711,0826,1021,1136,1256,1416,1606,1741,1925,二番町 0713,0828,1023,1138,1258,1418,1608,1743,1928,山居町東 0715,0830,1025,1140,1300,1420,1610,1745,1930,市営体育館前 0720,0840,1030,1150,1305,1430,1615,1755,1935,大学前 0721,0841,1031,1151,1306,1431,1616,1756,1936,土門拳記念館 0724,0844,1034,1154,1309,1434,1619,1759,1939,工業団地前 0725,0845,1035,1155,1310,1435,1620,1800,1940,出羽遊心館・美術館 0727,0847,1037,1157,1312,1437,1622,1802,1942,かんぽの郷 【広告ページ】 http://roy/~c110188/advertise2/index.html 2.感想 後期で習ったことを生かして 前期で作ったプログラムをより良いものにできた。 自由課題をやることにより 自分がちゃんと hash や def を理解しているかどう か確かめることができた。実際わかっていないことが多くて 復習にもなったし どのように習ったことを生かし より無駄のないプログラムを作るか そうとう考 えることができた。 3.参考 *参考文献 2011 年度 基礎プログラミング II 講義ノート(シラバス) 西村まどか http://roy/~madoka/2011/r2/ *お世話になった人 嘉村爽太 hash の key をいちいち入力しなくても数字で指定できるように配列を使うこと や どこをミスしているかのヒント if文内の書く順番 などのアドバイスを頂き ました。 ----------------- 東北公益文科大学 公益学部 公益学科 2年 宮原絵美里 c110188@f.koeki-u.ac.jp -----------------