第 8 回 ことはじめ レポート課題 氏名:宮原絵美里 学籍番号:c110188 語学クラス:英語6 コース(系):地域共創 1.A 項目と それに対応した複数の選択肢があろところが Hash の key と value の 関係に似ている。 1.B .htaccess → Webサーバに対して ここでCGIプログラムを利用する ことの宣言 *.html → 利用者にデータを入力してもらうためのHTML文書 *.rb → 入力されたデータを受け取って処理をするプログラムファイル CGIは 以上の分担プログラムとその連係動作からなる。 1.C ticket.html を例に解説する。 *.html で CGI 変数を渡すのは input tag である。

# type が submit : 送信させる # type が reset : リセットさせる

input tag の中では type で 入力 form の部品を指定し value は CGI 変数の 値であり 送信ボタンが押されると value の値を Ruby に送り込むというルール になっている。 1.D #!/usr/bin/env ruby require 'cgi' # CGI を使う cgi = CGI.new("html4") # CGI を HTML 文書に使う print("Content-type: text/html; charset=EUC-JP\n\n") # 日本語コードの定義 arv = cgi["arrive"] # arrive を Ruby の変数 arv に代入 printf("

%s駅

",arv) # arv を表示 2.A 【設定】 出発する駅 到着する駅 を選択し 運賃も含めた陸羽西線の乗車券を表示します 【ticket.html】 陸羽西線 券売機

陸羽西線 オンライン券売機

# ruby に送り込む # リセット

【ticket.rb】 #!/usr/koeki/bin/ruby $KCODE = 'e' # 日本語を使ってます require 'cgi' # CGI を使います cgi = CGI.new("html4") print("Content-type: text/html; charset=EUC-JP\n\n") # 日本語コードにします ticket = Hash.new # hash を作成 dep = cgi["departure"] # Ruby に CGI で入力された値を代入 arr = cgi["arrival"] # p dep # 変数に入っているか確認 # p arr open("rikuusaisen.dat","r") do |date| # ファイルを読み込みます while line = date.gets # line に入れます if /(\S+)\s+(\d+\.\d)/ =~ line # 取り出します ticket[$1]=$2.to_f # hash に取りこみます end end end # p ticket # ちゃんと入っているか確認 d = ticket[dep] # departyre で選択された value の距離を入れます a = ticket[arr] # arrival で選択された value の距離を入れます # p d # 確認 # p a distance = (d-a).abs # 絶対値を使い 走行距離を求めます # p distance # ちゃんとできてるか不安だったので確認 roundoff = (distance + 0.5).to_i # 四捨五入 fare = 120 + roundoff * 20 # 初乗り120円 以下2Kmごとに20円を加算した運賃を計算 print("\n") # 以下 html で表示 print("\n") print("陸羽西線 乗車券\n") print("\n") print("\n") print("

-------------------------------------

\n") print("

陸羽西線 乗車券

\n") printf("

乗車区間 %s → %s

\n", dep, arr) printf("

%d [円]

\n",fare) print("

-------------------------------------

\n") print("\n") print("\n") 【もとにしたプログラム】 授業で作りかけた ticket.html ticket.rb につけ足す形で作成。 また rikuusaisen.dat をダウンロードして使用。 【実行結果】 ●新庄 → 余目 陸羽西線 乗車券

-------------------------------------

陸羽西線 乗車券

乗車区間 新庄駅 → 余目駅

980 [円]

-------------------------------------

●余目 → 新庄 陸羽西線 乗車券

-------------------------------------

陸羽西線 乗車券

乗車区間 余目駅 → 新庄駅

980 [円]

-------------------------------------

●余目 → 清川 陸羽西線 乗車券

-------------------------------------

陸羽西線 乗車券

乗車区間 余目駅 → 清川駅

360 [円]

-------------------------------------

【考察】 新庄 → 余目 と 余目 → 新庄 は 距離が同じなので 同じ料金になるはずであ る。 実行結果を見ると 同じ 980円 と出ている。 これを 実際に計算してみると roy{c110188}% bc -l [~/public_html/rubycgi] 120 + 43.0 * 20 980.0 となるので正しい。 一応 余目 → 清川 も同じように計算してみると roy{c110188}% bc -l [~/public_html/rubycgi] 43.0 - 31.1 11.9 # 走行距離 四捨五入すると 12 120 + 12 * 20 360 となるので正しい。 2.B http://roy/~c110188/advertise2/index.html 2.C http://roy/~c110188/advertise2/index.html 3 初めて CGI を学び 作ってみたが 今までは kterm で実行していたプログラムが html 上で実行できることにより より使いやすく 様々なことに応用できるので 他にどのような使い方ができるか考え 活用したい。 4 【参考文献】 基礎プログラミング II 第 8 回 「ことはじめ」 西村まどか http://roy/~madoka/2011/r2/08/ 逆引きRuby - 数値 - たけうちひとし http://www.namaraii.com/rubytips/?%BF%F4%C3%CD#l5 【共同学習者】 菊地瑞紀 ----------------- 東北公益文科大学 公益学部 公益学科 2年 宮原絵美里 c110188@f.koeki-u.ac.jp -----------------