第 9 回 CGI ことえらび レポート課題 氏名:山野 駿 学籍番号:c1111429 語学クラス:英語2 コース:社会福祉 1. A. ラジオボタンとは、いくつかの選択肢の中から1つだけ選べるものである。 プログラムでは、 女 という文章を挿入することで、ラジオボタンを表示する。 最初のinput typeで、ラジオボタンということを知らせる。 name で.rbで引用するための変数を指定し、 value でラジオボタンの選択肢を表示しており、実際に表示されるのは value の部分のみである。 B. チェックボックスがラジオボタンと異なる点として、一つのもののみ選ぶことが できるラジオボタンに対してチェックボックスは複数選択できるということが挙 げられる。 プログラムでは 息子 と入力することで、チェックボックスを表示する。。 最初のinput type="checkbox"で、チェックボックスであるということを知らせ る。。 name="titi"とは、使うチェックボックスを区別する。複数のチェックボックス と区別する。 value="父"はCGI変数の値で,選択すると、プログラムに送られる。 C. char_r2_c111142.png 今回は白熊を描いた。なぜ白熊からというと、作者が白熊に似ているためである。 外枠のラインだけ出したかったため、いらないところを消すことに苦労した。ま た、熊が寝ているように描くことが難しく、時間を割いた。 ウェブページへのリンク http://roy.e.koeki-u.ac.jp/~c111142/adv2/char_r2_c111142.png 2. A. counter.rbを参考にプログラムを作成し、なぜカウンターになるかを解説する。 プログラムのURL http://roy.e.koeki-u.ac.jp/~c111142/rubycgi/fork_count.rb a)設定 来客数を表示するプログラム。 更新されるたびに1ずつ増える。 b)作成したプログラム #!/usr/bin/env ruby #coding: euc-jp require'cgi' cgi = CGI.new(:accept_charset => "EUC-JP") print("Content-type: text/html; charset=EUC-JP\n\n") number = 0 open("count.txt","r") do |yomu| while data = yomu.gets if /(\d+)/ =~ data number = $1.to_i end end end print("\n") print("来客者数\n") print("\n") printf("

%d 人目のお客様

\n",number) print("\n") print("\n") number += 1 open("count.txt","w") do |kaku| kaku.printf("%d\n",number) end c)元にしたプログラムとその変更点 ・元にしたプログラム counter.rb ・変更点 変数を適切なものにした。 d)実行結果 ウェブページのソースを貼った。 i) 来客者数

21 人目のお客様

ii) 来客者数

22 人目のお客様

iii) 来客者数

23 人目のお客様

e)考察 その1 roy{c111142}% ./fork_count.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) Content-type: text/html; charset=EUC-JP 来客者数

24 人目のお客様

その2 roy{c111142}% ./fork_count.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) Content-type: text/html; charset=EUC-JP 来客者数

25 人目のお客様

その3 roy{c111142}% ./fork_count.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) Content-type: text/html; charset=EUC-JP 来客者数

26 人目のお客様

ウェブページもktermでの結果も更新するたび、1ずつ増えていることが分かる。 このことからこのプログラムは正しく動作している。 <解説> #!/usr/bin/env ruby #coding: euc-jp require'cgi' #CGIを使用するという宣言 cgi = CGI.new(:accept_charset => "EUC-JP") #cgiはCGI print("Content-type: text/html; charset=EUC-JP\n\n") #日本語にする number = 0 #number の初期値は 0 open("count.txt","r") do |yomu| #count.txtというファイルから読み込む while data = yomu.gets #data に読み込んだものを代入 if /(\d+)/ =~ data #数字を1つ取り出すという条件 number = $1.to_i #取り出した数字を number に入れる end #if を閉じる end #while を閉じる end #open を閉じる #ruby でウェブページを設定する print("\n") print("来客者数\n") print("\n") printf("

%d 人目のお客様

\n",number) print("\n") print("\n") number += 1 #number が1ずつ増える。これが更新する度に1ずつ増えていく部分 open("count.txt","w") do |kaku| #count.txtに書き出す kaku.printf("%d\n",number) #numberを上書きする end #open を閉じる B. プログラムのURL http://roy.e.koeki-u.ac.jp/~c111142/rubycgi/fork_c111142.html a)設定 ウェブページで計算するプログラム b)作成したプログラム #!/usr/bin/env ruby #coding: euc-jp require'cgi' cgi = CGI.new(:accept_charset => "EUC-JP") print("Content-type: text/html; charset=EUC-JP\n\n") suji1 = cgi["kazu1"] suji2 = cgi["kazu2"] enzan = cgi["siki"] print("\n") print("計算結果\n") print("\n") if enzan == "tasu" total = suji1.to_i + suji2.to_i elsif enzan == "hiku" total = suji1.to_i - suji2.to_i elsif enzan =="kakeru" total = suji1.to_i * suji2.to_i elsif enzan == "waru" total = suji1.to_f / suji2.to_f end print("

計算結果

\n") if enzan == "tasu" printf("

%d + %d = %d

\n", suji1, suji2 ,total) elsif enzan == "hiku" printf("

%d − %d = %d

\n", suji1, suji2 ,total) elsif enzan == "kakeru" printf("

%d × %d = %d

\n", suji1, suji2 ,total) elsif enzan == "waru" printf("

%d ÷ %d = %f

\n", suji1, suji2 ,total) end print("") print("") c)実行結果 ○足し算 ウェブページのソース 計算結果

計算結果

560 + 211 = 771

ktermでの結果 roy{c111142}% ./keisan.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) kazu1=560 kazu2=211 siki="tasu"Content-type: text/html; charset=EUC-JP 計算結果

計算結果

560 + 211 = 771

% ○引き算 ウェブページのソース 計算結果

計算結果

680 − 654 = 26

ktermでの結果 roy{c111142}% ./keisan.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) kazu1=680 kazu2=654 siki="hiku"Content-type: text/html; charset=EUC-JP 計算結果

計算結果

680 − 654 = 26

% ○掛け算 ウェブページのソース 計算結果

計算結果

34 × 70 = 2380

ktermでの結果 roy{c111142}% ./keisan.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) kazu1=34 kazu2=70 siki="kakeru" Content-type: text/html; charset=EUC-JP 計算結果

計算結果

34 × 70 = 2380

% ○割り算 ウェブページのソース 計算結果

計算結果

64 ÷ 4 = 16.000000

ktermでの結果 roy{c111142}% ./keisan.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) kazu1=64 kazu2=4 siki="waru" Content-type: text/html; charset=EUC-JP 計算結果

計算結果

64 ÷ 4 = 16.000000

% d)考察 プログラムの計算が正しいかbc -lを使い確認する。 ○足し算 roy{c111142}% bc -l [~/public_html/rubycgi] 560 + 211 771 quit 実行結果と答えが一致している。 ○引き算 roy{c111142}% bc -l [~/public_html/rubycgi] 680 - 654 26 quit 実行結果と答えが一致している。 ○掛け算 roy{c111142}% bc -l [~/public_html/rubycgi] 34 * 70 2380 quit 実行結果と答えが一致している。 ○割り算 roy{c111142}% bc -l [~/public_html/rubycgi] 64 / 4 16.00000000000000000000 quit 実行結果と答えが一致している。 以上の結果からこのプログラムは正しいと言える。 3. http://roy.e.koeki-u.ac.jp/~c111142/adv2/index.html の中の「基礎プログラミングを学んで」というところにpdfファイルを貼り付けた。 基礎プログラミングを学んで感じたことや、学びをどう活かすかということにつ いて述べた。 4. 今回は特に苦戦したレポート立った。しかし、ウェブページやプログラムを操作 することが楽しいと思えるようになってきた。 5. http://roy/~madoka/2012/r2/09/r2_09_04_appendix_01_radio.html 西村まどか 基礎プログラミング II 第 9 回 (CGI ことえらび) 「ラジオボタン の作り方」 http://roy/~madoka/2012/r2/09/r2_09_05_appendix_02_checkbox.html 西村まどか 基礎プログラミング II 第 9 回 (CGI ことえらび) 「チェックボッ クスの作り方」 http://roy/~madoka/2012/r2/09/r2_09_06_appendix_03_textfield.html 西村まどか 基礎プログラミング II 第 9 回 (CGI ことえらび) 「短い記入欄の 作り方」 http://roy/~madoka/2012/r2/09/r2_09_08_theme_03_fileopen.html 西村まどか 基礎プログラミング II 第 9 回 (CGI ことえらび) 「File Open を 使ってみよう」 http://roy/~madoka/2012/r2/09/r2_09_03_review_02_error.html 西村まどか 基礎プログラミング II 第 9 回 (CGI ことえらび) 「エラーの分析」