第 8 回 ことはじめ レポート課題 氏名:渡辺 龍 学籍番号:c1102057 語学クラス:中国語 3クラス コース(系):地域共創コース 申訳ございませんが、送信したもの内容量が大きくて不安なため pdf ファイル を除いたものを送信します。( pdf ファイルは広告ページからもいけるため) 1.筆記問題 A. CGIとHash の似ている点を挙げよ。 CGI変数とHashが似ている点を挙げる。互いに関数や変数を定義する。 その定義した選択肢から取りだせるということだと思う。 CGIは選んだ項目が何かの項目と結びつく。 例: 項目を Hash とすると key のようなもの、選択肢は value のようなもの。 B. CGI のしくみで .htaccess *.html , *.rb の関係性。 .htaccess で .rb をつけたファイルを CGI として扱う。 .html はホームぺージを表示させる。.rb は .html で入力したものを 表示させる。 C. *.html で CGI 変数を渡すしくみ。
到着駅: # action は結果表示先を指定するもの。 # form はユーザーに入力させたことをまとめる。

# 結果を .rbファイルに送る。 # 結果を .rbファイルでリセットとする。

D. *.rb で CGI 変数を受け取って HTML 文書にするしくみ require 'cgi' # CGI を使用すること。 cgi = CGI.new("html4") # CGI を新に作成。 # CGI を html 文書に使用。 print("Content-type: text/html; charset=EUC-jp\n\n") # 日本語コードに変換 arv = cgi["arrive"] # arrive を .rbファイル で使用出来るようにに変数する。 # arv に代入。 printf("酒田 -- %s\n",arv) # 変数arv に入力されたものを、printf を使用し HTML 文書として出力。 2. プログラム問題 A. ticket.rb (1) 考えた設定 酒田駅〜鶴岡駅間の範囲で、各停車駅までの料金を明確にするプログラム。 また走行距離なども表示できるようにした。乗算や除算などを使用して合計金額 を計算する。また 2km 通過すると 20円プラスされる。つまり距離数が 2km 通 過前の奇数の数字の場合切り捨てる。 (2) 元にしたプログラム 講義で作成したプログラム [ticket.rb] ■ 変更点 ■ ・ 乗算や除算などを用いた計算式。 ・ データを引用するため open メソッドをしよう。 (3) open メソッドで使用するデータ [ticket.dat] 新庄駅 0 升形駅 7 羽前前波駅 10 津谷駅 12 古口駅 17 高屋駅 24 清川駅 31 狩川駅 34 南野駅 38 余目駅 43 (4) 作成したプログラム [ticket.rb] #!/usr/koeki/bin/ruby require 'cgi' # CGI を定義。CGI 形式に変換。 cgi = CGI.new("html4") # CGI を html 文書で使用出来るように変換。 content = Hash.new # Hash.new で新たな Hash を作成。関数 content を定義。 print("Content-type: text/html; charset=EUC-jp\n\n") # 日本語コードに変換 def money(start,finish) # 繰り返し作業。変数は start と finish 。 # start は出発駅。finish は到着駅。 if start > finish # if=条件指定。出発駅 > 到着駅の時。 120 + (start - finish) / 2 * 20 # 120 は初乗り料金。()内は 到着駅-出発駅の計算。 # さらに / で除算する。2 はkmを表す。 # 20 は 2km につき 20円 加算することを表す。 # + は加算。- は減算。* は乗算。/ は除算。 else start < finish # if の次の条件指定。出発駅 < 到着駅の時。 120 + (finish - start) / 2 * 20 # 120 は初乗り料金。()内は 到着駅-出発駅の計算。 # さらに / で除算する。2 はkmを表す。 # 20 は 2km につき 20円 加算することを表す。 # + は加算。- は減算。* は乗算。/ は除算。 end # if else を閉じる end。 end # def を閉じる end。 def distance(s,f) # 繰り返し作業。変数は s と f 。 # s は出発駅 f は到着駅を表す。 if s > f # if=条件指定。出発駅 > 到着駅の時。 s - f # 出発駅 - 到着駅 の計算。 else s < f # if の次の条件指定。出発駅 < 到着駅の時。 f - s # 到着駅 - 出発駅 の計算。 end # if else を閉じる end。 end # def を閉じる end。 st = cgi["start"] # CGIで start を取ってくる。それを st に代入する。 ar = cgi["arrive"] # CGIで arrive を取ってくる。それを ar に代入する。 open("ticket.dat", "r") do |data| # open メソッドで ticket.dat を読みこむ。 while line = data.gets # while line = ? .gets メソッドはプログラム実行時にファイルを指定する。 # そのファイルから1行ずつ読み込みを行う。そして繰り返し処理をする。 # 処理するデータが無くなった場合繰り返しから抜ける。 # data は変数。 if/(\S+)\s+(\S+)/ =~ line # 正規表現。if は条件指定。 # =~ line は読みこんだデータとマッチしているかを判別する。 # \s は空白にマッチ。\S は空白以外にマッチすることを表す。 content[$1] = $2.to_i # データ内の2番目を数値とし、content[$1] を定義する。 end # if の end。 end # while の end。 end # openメソッド の end。 hazime = content[st] # データ内から取り出した出発駅を表す変数を hazime に代入。 owari = content[ar] # データ内から取り出した到着駅を表す変数を owari に代入。 print("\n") print("\n") print("\tチケット\n") print("\n") print("\n") print("

乗車券

\n") print("

================================

") printf("

\t出発駅 %s 〜 到着駅:%s

\n", st, ar) # 各変数の代入。 printf("

\t料金 %d 円

\n", money(hazime,owari)) # 各変数の代入。 printf("

\t走行距離 %d km

\n", distance(hazime,owari)) # 各変数の代入。 print("

お買い上げありがとうございました!!

\n") print("

================================

\n") print("\n") print("\n") (5) 作成したhtml (ticket.html) オンライン券売機

オンライン券売機システム

新庄〜余目 間


※初乗りは 120円: 以下 2km ごとに 20円加算

  • 出発駅 :

  • 到着駅 :


  • ※注意事項※

    このプログラムは、東北公益文科大学 [渡辺 龍]が著作権を保有しています。

    プログラムの入手・改変・再配布は、自由に行っても構いません。

    なお、このプログラムの取り扱いによって生じた問題については責任を負いませんので、注意して下さい。

    このプログラムに対する感想・意見・苦情など言いたいことがありましたら、

    c110205.koeki-u.ac.jp 」へお願いします。


    トップページへ

    広告ページへ

    (6) 実行結果 [ticket.html] 今回は2つ結果を載せる。 [1] 新庄駅〜古口駅 乗車券 ================================ 出発駅 新庄駅 〜 到着駅:古口駅 料金 280 円 走行距離 17 km お買い上げありがとうございました!! ================================ [2] 津谷駅〜余目駅乗車券 ================================ 出発駅 津谷駅 〜 到着駅:余目駅 料金 420 円 走行距離 31 km お買い上げありがとうございました!! ================================ (7) 考察 計算は正確に行われているのか? また出発駅と到着駅が同じだとどうなるか? ------------------------------------------------------------------------------ ※注意※ 今回のプログラムは2km通過したら20円なので通過前の奇数の数字の場合は切り捨てる。 ----------------------------------------------------------------------------- 確かめ算答え[1] pan{c110205}% bc -l [~] 120+(17-0)/2*20 290.00000000000000000000 quit 確かめ算答え[2] pan{c110205}% bc -l [~] 120+(43-12)/2*20 430.00000000000000000000 quit つまり… 結果[1]は280円。(17km) 結果[2]は420円。(31km) となる。 よって計算は正確に出来ていると言える。 次に出発駅と到着駅が同じだとどうなるか? 乗車券 ================================ 出発駅 新庄駅 〜 到着駅:新庄駅 料金 120 円 走行距離 0 km お買い上げありがとうございました!! ================================ 結果的に乗ってもいないのに料金を取ってしまった。 改善の余地があると思いいろいろやったが答えは分からなかった。 だから、次までの課題にしておきたい。 B.ロゴを掲載したアドレス http://roy/~c110205/logo_r2_c110205.png C.「r2_c110205.pdf」を掲載したページ 広告ページ「http://roy/~c110205/advertise2/」 (r2_c110205.pdf) 「基礎プログラミングを学んで」 3.感想 今回の課題は、新たにCGIを使用し戸惑うことが多々あった。けど妥協すること なく最後まで出来て良かった。しかし、まだまだ未完成な所や改善要素があった のできちんと復習し、より良いプログラムを製作できるよう努力していきたい。 4.参考文献 西村先生 講義ノート 基礎プログラミング II 第8回 CGIことはじめ http://roy/~madoka/2010/r2/08/ 協力者 松田 大輝 君 5.添付