第 8 回 ことはじめ レポート課題 氏名: 松田 大輝 学籍番号: c1101804 語学クラス: 中国語 コース(系): 地域共創コース 1、筆記問題 A、CGI 変数は、選択したものと何かが結ぶ付く。 のように、お互いが関係している。 Hash は key に対して value のように 2つが対応し関係している。 上記から私が考えたCGI 変数と Hash の似ている点は、 どちらも選択したものと対応し関係しているということだ。 B、講義中に .htaccess として下の文章を入力した。 AddHandler cgi-script .rb Options +ExecCGI ここでまず、最初にCGIプログラムを利用することを表す。 上のプログラムの文章があるため、.rb という名前で終わるファイルは CGIスクリプトと認識されるようになった。 .HTML は利用者にデータを入力してもらうためであり、 .rb は HTML で入力されたものを結果として、表示させている。 C、
結果を吐かせるプログラムを ticket.rb として、 利用者にデータを入力させるところを で埋めた。 CGI 変数 (ここでは value )を ticket.rb に送っている。 D、require "cgi" CGI 変数 を使用することを定義した。 cgi = CGI.new("heml4") print("Content-type: text/html; charset=EUC-jp\n\n") 受け取ったデータを使用することを定義した。 arv = cgi["arrive"] 変数 arv に arrive を代入して 使用できるようにした。 2、プログラム問題 A、 1、考えた設定 出発駅と到着駅を指定してもらう。すると、その駅間の 走行距離と運賃が書かれた Web チケット を表示させる プログラムを作成した。初乗り 120 円などの細かい設定も付け加え また、運賃に関しては小数点以下を四捨五入するプログラムにした。 2、作成したプログラム(説明) =========================ticket.rb==================================== #!/usr/koeki/bin/ruby # 最初に書かなければいけないもの require 'cgi' # ここで CGI 変数を使用することを定義した cgi = CGI.new("html4") # CGI を HTML 文書で使用することを定義した print("Content-type: text/html; charset=Euc-jp\n\n") # 上の2文で受け取ったデータを使用しCGIを実行することを定義した sta = cgi["start"] # 変数 sta に start を代入して # CGIにおいて使用できるようにした arr = cgi["arrive"] # 変数 arr に arrive を代入して # CGIにおいて使用できるようにした eki = Hash.new # ここで 配列 eki を使用することを定義した eki["新庄"] = 0.0 # 新庄などの駅名が key で eki["升形"] = 7.5 # 走行距離の値が value となった eki["羽前前波"] = 10.6 eki["津谷"] = 12.9 eki["古口"] = 17.0 eki["高屋"] = 24.8 eki["清川"] = 31.1 eki["狩川"] = 34.9 eki["南野"] = 38.9 eki["余目"] = 43.0 print("\n") # ここから html 文が始まる print("\n") # 本文前の タイトルやスタイルを定義するための # 場所である head が始まる print("\tチケット\n") # ここでタイトルを定義した print("\n") # ここで 4 行前の head を閉じた print("\n") # ここから 本文を書くための body が始まる if sta == arr # もし出発駅と到着駅が同じ場合 print("

") # ここから 一番の見出しの h1 が始まる print("同じ駅には行けません!!!") # print を用いて文を表示 print("

") # ここで 2 行前も h1 を閉じた else # 出発駅と到着駅が違う場合 print("

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

") # print を使用し見やすくした printf("

%s -- %s間\n

",sta,arr) # printf を用いて 選択してもらった sta と arr を表示させた if eki[sta] > eki[arr] # もし、出発駅の値が到着駅の値より大きい場合 printf("

運賃 %d 円
", 120 + ((eki[sta] - eki[arr] + 0.5).to_i ) * 20) # printf を用いて、計算結果を表示させた。 # 初乗りが 120 円で以下、1km ごとに20円となるため # 上のような計算結果になった。 # また、小数点以下は四捨五入するため、0.5 を走行距離に加算した print("

\n") printf("走行距離 %3.1f km
",(eki[sta]-eki[arr]).to_f) # ここで走行距離を計算した # 表示結果桁を揃えるために %3.1f とした # また、小数点以下も表示するため .to_f を使用した print("※ 初乗り 120円、以下 1 Km ごとに 20 円を加算
") print("走行距離の小数点以下は四捨五入しています") # print を用いて 注意文を表示した else # 出発駅の値が到着駅の値より大きくない場合 # 数式にすると eki[sta] < eki[arr] となる printf("

運賃 %d 円
", 120 + ((eki[arr] - eki[sta] + 0.5).to_i ) * 20 ) # 先程と同じプログラム # ここでは eki[arr] の値の方が大きいため これに # eki[sta] の値を 減算した print("

\n") printf("走行距離 %3.1f km
",(eki[sta]-eki[arr]).to_f * (-1)) # 結果が -(マイナス)の値になるため (-1) を掛けて # + の値になるようにした print("※ 初乗り 120円、以下 1 Km ごとに 20 円を加算
") print("※ 走行距離の小数点以下は四捨五入しています") # 先程と同じプログラム end # 39行前の if の end print("

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

") # print を使用し見やすくした end # 58行前の if の end print("\n") # ここで body を閉じた print("\n") # ここで html を閉じた ========================ticket.html==================================== オンライン券売機

オンライン券売機

  • 出発駅
  • 到着駅


  • このプログラムは 学籍番号c1101804 松田 大輝が著作権を保有しています。このプログラムの 入手・実行・改変・再配布は、いずれも無料で自由に行なうことができます。ただしこのプログラム を取り扱うことで生じたいかなる結果に対しても著作権者は責任を負いません。

    このプログラムに対する、感想・助言・要望・愚痴・説教など大歓迎致します。
    c110180@f.koeki-u.ac.jp
    までメッセージをお送り下さい。

    トップページ c1101804 松田 大輝

    個人作品ページ advertise2/index.html

    3、もとにしたプログラムからの変更点 講義中に作成した public_html/rubycgi/.htaccess public_html/rubycgi/ticket.html public_html/rubycgi/ticket.rb を基にした。 .htaccess は変更せずそのまま使用。 変更点は ticket.html は プログラムの表示方法とデータ数を変更した。 また、著作権についても付け加えた。 ticket.rb は 具体的な数値と計算を付け加わえた。 そして、駅名のデータは rikuusaisen.dat を使用した。 4、実行結果 a, 南野 → 古口 の場合 --------------------------------------------------- 南野 -- 古口 運賃 560 円 走行距離 21.9 km ※ 初乗り 120円、以下 1 Km ごとに 20 円を加算 走行距離の小数点以下は四捨五入しています --------------------------------------------------- b, 新庄 → 狩川 の場合 --------------------------------------------------- 新庄 -- 狩川間 運賃 820 円 走行距離 34.9 km ※ 初乗り 120円、以下 1 Km ごとに 20 円を加算 ※ 走行距離の小数点以下は四捨五入しています --------------------------------------------------- c, 新庄 → 新庄 の場合 同じ駅には行けません!!! 5、結果の考察 計算が正しいか調べる。 a, eki[sta] > eki[arr] のパターン pan{c110180}% bc -l [~/public_html/rubycgi] 38.9-17.0 # 走行距離の計算 21.9 # + 0.5 で四捨五入 21.9 は 22 となる。 120+22*20 560 # 運賃 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー b ,eki[sta] < eki[arr] のパターン pan{c110180}% bc -l [~/public_html/rubycgi] 34.9-0.0 # 走行距離の計算 34.9 # + 0.5 で四捨五入 34.9 は 35 となる。 120+35*20 820 # 運賃 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー c, sta == arr のパターン pan{c110180}% bc -l [~/public_html/rubycgi] 0.0-0.0 0 # 走行距離と運賃 すべての計算が正しいことを確認できた。 B、基礎プログラミング II の バナー http://roy/~c110180/logo_r2_c110180.png C、「基礎プログラミングを学んで」 PDF ファイル http://roy/~c110180/advertise2/r2_c110180.pdf 3、感想 今回の課題はどれも難しくかなり時間がかかった。 特にプログラム問題の A は html や rb また、計算などの すべての要素が入っていたため、難しかったが、自分の力になった。 一応、今回の課題を 個人プログラム広告ページの http://roy/~c110180/advertise2/index.html 第 8 回 の講義レポートという枠の中にすべて載せておいた。 4、参考文献 西村先生の2011 年度 基礎プログラミング II 講義ノート http://roy/~madoka/2011/r2/ 基礎プログラミング II 第 8 回 「ことはじめ」 http://roy/~madoka/2011/r2/08/ 1. Ruby で CGI スクリプト http://roy/~madoka/2011/r2/08/r2_08_01_theme_01_rubycgi.html 2. CGI 専用作業 directory http://roy/~madoka/2011/r2/08/r2_08_02_theme_02_mkdir.html 3. CGIの作り方 http://roy/~madoka/2011/r2/08/r2_08_03_theme_03_makecgi.html 4. CGI を使用することを宣言しよう http://roy/~madoka/2011/r2/08/r2_08_04_theme_04_declare.html 5. 利用者にデータを入力させる部品 http://roy/~madoka/2011/r2/08/r2_08_05_theme_05_form.html 6. 基本の CGI ホームページの作りかた http://roy/~madoka/2011/r2/08/r2_08_06_theme_06_firstcgi.html 7. CGI スクリプトの解説 http://roy/~madoka/2011/r2/08/r2_08_07_theme_07_actionprogram.html 8. 動作プログラム作成 http://roy/~madoka/2011/r2/08/r2_08_08_theme_08_ruby.html 9. Ruby で CGI を作る宣言 http://roy/~madoka/2011/r2/08/r2_08_09_theme_09_declare.html 10. print() 文と HTML 文書のなかみ http://roy/~madoka/2011/r2/08/r2_08_10_theme_10_printhtml.html 11. 自動券売機 http://roy/~madoka/2011/r2/08/r2_08_12_theme_11_ticket.html 12. 試作品のエラーを探せ http://roy/~madoka/2011/r2/08/r2_08_13_theme_12_tryanderror.html 西村先生の2011 年度 基礎プログラミング I 講義ノート http://roy/~madoka/2011/r1/ 11. 自由課題準備 / ロゴ作成 http://roy/~madoka/2011/r1/11/ 1. アイディアをまとめよう http://roy/~madoka/2011/r1/11/r1_11_01_theme_01_compose.html 2. ロゴの作成 http://roy/~madoka/2011/r1/11/r1_11_02_theme_02_logo.html 3. ロゴに署名を入れるには http://roy/~madoka/2011/r1/11/r1_11_04_theme_03_signature.html 4. ロゴの例 / バナーの例 http://roy/~madoka/2011/r1/11/r1_11_05_theme_04_banner.html 共同学習者 渡辺 龍