第 9 回 ことえらび レポート課題 氏名: 鈴木椎菜 学籍番号: C1101276 語学クラス: 英語6 コース: 社会福祉コース 第 9 回の講義は欠席してしまったのですが、レポート課題は取り組んだので 採点よろしくお願いします。 1.筆記問題 A.ラジオボタンとは、選択肢の中から一つだけを選ぶ方法。 htmlに以下の文を書くことによってラジオボタンが表示される。 ------------------------------------------------------------------ 選択肢その1 選択肢その2 ・ ・ ------------------------------------------------------------------ 解説 input type="radio" 「これはラジオボタンです」という設定 name="変数" ラジオボタンの名前(固有名詞) value="値" 結果を表示させるプログラムに送る値 選択肢 htmlで表示する選択肢 結果を表示させるプログラムでは、ラジオボタンの名前をCGI変数に代入する形 で 設定しておく。 --------------------------------- 変数 = CGI[ (htmlで設定した)変数 ] --------------------------------- このようにすると、htmlで設定した変数と対になっているvalueがでてくる。 そのため、 HTML で選んだ選択肢の valueが 結果に返ることになる。 B.チェックボックスとは、選択肢の中から複数の選択が可能は方法。 htmlに以下の文を書くことによってチェックボックスが表示される。 ------------------------------------------------------------------ 選択肢その1 選択肢その2 選択肢その3 ・ ・ ------------------------------------------------------------------ 解説 input type="checkbox 「これはチェックボックスです」という設定 name="変数" チェックボタンの名前(固有名詞) ※これは、ラジオボックスとは違い、選択肢ひとつにつき 一つの変数を設定する。 value="値" 結果を表示させるプログラムに送る値 選択肢 htmlで表示する選択肢 結果を表示させるプログラムでは、結果を入れ込んでいく配列をつくり、要素0 から順番に配列に CGI変数 を入れていく形をつくっておく。 --------------------------------- 配列[0] = CGI[ (htmlで設定した)変数その1] 配列[1] = CGI[ (htmlで設定した)変数その2] 配列[2] = CGI[ (htmlで設定した)変数その3] ・ ・ --------------------------------- そして、HTMLで選択された選択肢の変数が CGI変数に入る。 このとき、htmlで設定した変数 と 対になっているvalue が配列に代入される。 ※ 選択されなかった選択肢の変数 が入ることになっている要素番号には、 なにも入っていないことになる。 そのため、配列の中身は選ばれた選択肢の value のみとなり、それが結果に返 ることになる。 <参考文献> 基礎プログラミングII 第9回(ことえらび) 講義ノート URL:http://roy/~madoka/2011/r2/09/lec/resume.html チェックボックスの作り方 URL:http://roy/~madoka/2011/r2/09/r2_09_05_theme_05_checkbox.html http://roy/~madoka/2011/r2/src/service.rb C.基礎プログラミングのキャラクタ画像 <題名> ファイティングパンダ 略して FP君 <解説> プログラミングをするに当たって気合を入れてくれるようなキャラクターにし たいと考えた。 また、プログラミングは適度なパワーの源と体当りの姿勢が必要だと思った。 両者を考慮した結果、パワーの源(笹)を持って体当りの姿勢(飛ぶ蹴り)のパン ダを作成した。 <作成方法> パンダは黄色(ffd700)を使用し、主に円を用いて描いた。 笹は緑色(66ff84)を使用し、直線とフリーハンドを用いて描いた。 また、躍動感を演出するための部分はピンク(ff0047)を使用し、 線分を駆使して描いた。 <工夫した点> 飛び蹴りの躍動感を演出するためにピンクの衝突振動のようなものを描いた。 パンダに「rb」とかいてあるはち巻きをさせ、より一層プログラミングを頑張 るような姿にした。 <参考文献> 基礎プログラミングI 第12回 (自由課題コンペティション / 画像作成) 「ツールバー各部分の解説」 http://roy/~madoka/2011/r1/12/r1_12_04_theme_04_tgiftoolbar.html 2.プログラム問題 ホームページ (fork.html) ------------------------------------------------ 第 9 回 レポート課題

第 9 回 レポート課題

*問題 A

題名; カウンター

ここをクリックしてください。


*問題 B

題名; 計算はパソコン君に任せよう!!

パソコン君「どの計算をしますか??」

パソコン君

足し算 引き算 かけ算 割り算

「最大 9桁 の数値を入れてください(小数点含んで 9桁 です)。」
1:
2:

「小数は含んでいますか??」

Yes No


*キャラクター

題名; ファイティングパンダ 略して FP君

ここをクリック


このページは 鈴木椎菜 が著作権を保有しています。
連絡先: c110127@f.koeki-u.ac.jp
※ @は全角にしていますので小文字にしてお使いください。

------------------------------------------------ 選んだ問題: A <題名> カウンター <意図> アクセスするごとに数字が 1ずつ増えていくプログラム。 ※プログラムはhttp://roy/~madoka/2011/r2/src/counter.rbを参考にし、 主に解説、考察がメイン。 <本体 fork_a.rb> ------------------------------------------------- #!/usr/bin/env ruby require 'cgi' # CGI を使いますという宣言 cgi = CGI.new("html4") # CGI変数は HTML に使用する print("Content-type: text/html; charset=EUC-JP\n\n") # 日本語コードの定義 # CGI変数 をプログラムで使用する変数に代入していく arv = cgi["arrive"] # Ruby に CGI でもらってきた値 arrive を arv 代入する no = 0 # no に 0を代入 open("fork_a.txt","r") do |read| # fork_a.txt というファイルを読み込み、readに代入 while data = read.gets # read を data に代入 if /(\d+)/ =~ data # もし data の中に 1回以上繰り返している数字があったら no = $1.to_i # その数字を no に代入する。 end end end print("\n") # HTMLの規定 print("\n") # HTMLの設定 print("かうんたー\n") # HTMLのタイトル設定 print("\n") # HTMLの設定(閉) print("\n") # HTMLの表示部分 printf("

あなたは %d 人目です

\n", no) # h1の表示 print("\n") # HTMLの表示部分(閉) print("\n") # HTMLの規定(閉) no += 1 # no に 1 を加算代入 open("fork_a.txt","w") do |write| # fork_a.txt というファイルを上書き専用として読み込み、writeに代入 write.printf("%d\n",no) # printfで表示する内容を 上書きする end ------------------------------------------------- <実行結果> 1回目 ------------------------------------------------ pan{c110127}% ./fork_a.rb [~/public_html/advertise2/rubycgi] (offline mode: enter name=value pairs on standard input) Content-type: text/html; charset=EUC-JP かうんたー

あなたは 9 人目です

------------------------------------------------ 2回目 ------------------------------------------------ pan{c110127}% ./fork_a.rb [~/public_html/advertise2/rubycgi] (offline mode: enter name=value pairs on standard input) Content-type: text/html; charset=EUC-JP かうんたー

あなたは 10 人目です

pan{c110127}% [~/public_html/advertise2/rubycgi] ------------------------------------------------ <解説> まず始めに、 ---------------------------------- open("fork_a.txt","r") do |read| while data = read.gets if /(\d+)/ =~ data no = $1.to_i end end end ---------------------------------- この部分で fork_a.rb を読み込み、 読み込んだ値を no に代入している。 次に、その値を HTML に表示している。 最後に、 ---------------------------------- no += 1 open("fork_a.txt","w") do |write| write.printf("%d\n",no) end ---------------------------------- no に 1 を足して、足した値を fork_a.txt に上書きする。 ここで注意したいのが、 上書きされる fork_a.txt は、 ktermで chmod o+w fork_a.txt の作業をする これにより、機械による書き込みが可能となる。 この過程により、アクセスするごとに数字が 1 ずつ増えていく。 <考察> この問題は、第 9 回 課題レポートのページに掲載されていた、 http://roy/~madoka/2011/r2/src/counter.rb を参考に作成した。 そのうえで、 この作業がなぜ CGI として行われているのか、arv = cgi["arrive"]の "arrive"はどこからきたのか、またどのような役割を果たしているかがわからな かった。 そのため、public_html/advertise/ に別名で実行する内容は同じで、CGIでは ないファイルを作って実行した。 すると、HTMLにはそのファイルの中身そのものが表示された。 これは、rubycgi というディレクトリの中で、.htaccessファイルがあるからこ そはたらくものであったことを思い出した。 また、cgi = CGI.new("html4") の部分で HTML に使用することが設定されてい たため、それがなくなれば HTML として表示されないのは当たりまえのことであ った。 しかし、それでもなぜ CGI を使用しなければいけないのかわからなかった。 そのため、CGI の意味についてもう一度考えた。 CGI とは、HTMLのデータ入力ウィンドウにデータを入力すると、それに応じ て変化するものである。そして入力された値を他のプログラムに受け渡すしくみ をスクリプトという。 この 問題A では、入力するという過程はないが、アクセスする度に読み込むファ イルであるtxtも変化する。同じプログラムの中でも変化をし、それをHTMLに受 け渡していることになる。 つまり、プログラムとして動くものを HTML として表示させるはたらきをして いる。 よって、CGI を使用しなければいけない理由がわかった。 だが、どうしても arv = cgi["arrive"]が果たす役割がわからなかった。 arv = cgi["arrive"] に # をつけてコメント機能にしてみても実行結果に差 はうまれなかった。 p arv として結果を表示しようとするとHTML では真白 になり、ktermで実行しても何も変化はなかった。 もしかしたら、そこにアクセスしたこと自体が arrive なのだろうか。 選んだ問題: B <題名> 計算はパソコン君に任せよう!! <意図> 計算の方法(加算、減算、乗算、除算)を選び、2つの数字を入力すると パソコン君が計算してくれる CGIスクリプトプログラムを作成した。 <本体 fork.html (問題B に関する部分)> -------------------------------------------------

*問題 B

題名; 計算はパソコン君に任せよう!!

パソコン君「どの計算をしますか??」

パソコン君

足し算 引き算 かけ算 割り算

「最大 9桁 の数値を入れてください(小数点含んで 9桁 です)。」
1:
2:

「小数は含んでいますか??」

Yes No

------------------------------------------------- <本体 fork_b.rb> ------------------------------------------------- #!/usr/bin/env ruby $KCODE = 'e' # 日本語コードの定義 require 'cgi' # CGI を使いますという宣言 cgi = CGI.new('html4') # CGI変数は HTML に使用する print("Content-type: text/html; charset=EUC-jp\n\n") # 日本語コードの定義 # CGI変数 をプログラムで使用する変数に代入していく houhou = cgi["keisan"] # Ruby に CGI でもらってきた値 keisan を houhou代入する one = cgi["ichi"] # Ruby に CGI でもらってきた値 ichi を one 代入する two = cgi["ni"] # Ruby に CGI でもらってきた値 two を two 代入する ten = cgi["shosu"] p houhou p one p two p ten # 計算 if houhou == "+" # もし houhou が "+" だったら answer = one.to_f + two.to_f # 足し算をする elsif houhou == "−" # もし houhou が "−" だったら answer = one.to_f - two.to_f # 引き算をする elsif houhou == "×" # もし houhou が "×" だったら answer = one.to_f * two.to_f # かけ算をする else # それ以外、すなわち houhou が "÷" だったら answer = one.to_f / two.to_f # 割り算をする end # HTML部分 print("\n") # HTMLの規定 print("\n") # HTMLの設定 print("\n") print("計算結果\n") # HTMLのタイトル設定 print("\n") # HTMLの設定(閉) print("\n") # HTMLの表示部分 print("

パソコン君の計算結果

\n") # h1の表示 print("

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

\n") # pの表示 if ten == "yes" # もし ten が "yes" だったら printf("

%f %s %f

\n", one.to_f, houhou, two.to_f) # pの表示 printf("

= %f

\n", answer) # pの表示 elsif ten =="no" # もし ten が "no" だったら printf("

%d %s %d

\n", one.to_i, houhou, two.to_i) # pの表示 if houhou == "÷" # もし houhou が "÷" だったら printf("

= %f

\n", answer) # pの表示 else # それ以外だったら printf("

= %d

\n", answer) # pの表示 end end print("

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

\n") # pの表示 print("

パソコン君、がんばりました。

\n") # pの表示 print("\n\n") # 改行 print("

著作権 鈴木椎菜

\n") # pの表示 print("\n") # HTMLの表示部分(閉) print("\n") # HTMLの規定(閉) ------------------------------------------------- <実行結果> 加算 ------------------------------------------------ roy{c110127}% ./fork_b.rb [~/public_html/advertise2/rubycgi] (offline mode: enter name=value pairs on standard input) keisan="+" ichi="3" ni="1" shosu="no" Content-type: text/html; charset=EUC-jp "+" "3" "1" "no" 計算結果

パソコン君の計算結果

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

3 + 1

= 4

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

パソコン君、がんばりました。

著作権 鈴木椎菜

------------------------------------------------ たしかめ ---------------------------- roy{SUZUKI Shiina}% bc -l [~/public_html/advertise2/rubycgi] 3+1 4 ---------------------------- 減算 ------------------------------------------------ roy{c110127}% ./fork_b.rb [~/public_html/advertise2/rubycgi] (offline mode: enter name=value pairs on standard input) keisan="−" ichi="10.8" ni="5.4" shosu="yes" Content-type: text/html; charset=EUC-jp "−" "10.8" "5.4" "yes" 計算結果

パソコン君の計算結果

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

10.800000 − 5.400000

= 5.400000

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

パソコン君、がんばりました。

著作権 鈴木椎菜

------------------------------------------------ たしかめ ---------------------------- roy{SUZUKI Shiina}% bc -l [~/public_html/advertise2/rubycgi] 10.8-5.4 5.4 ---------------------------- 乗算 ------------------------------------------------ roy{SUZUKI Shiina}% ./fork_b.rb [~/public_html/advertise2/rubycgi] (offline mode: enter name=value pairs on standard input) keisan="×" ichi="883" ni="298" shosu="no" Content-type: text/html; charset=EUC-jp "×" "883" "298" "no" 計算結果

パソコン君の計算結果

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

883 × 298

= 263134

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

パソコン君、がんばりました。

著作権 鈴木椎菜

------------------------------------------------ たしかめ ---------------------------- roy{SUZUKI Shiina}% bc -l [~/public_html/advertise2/rubycgi] 883*298 263134 ---------------------------- 除算 ------------------------------------------------ roy{c110127}% ./fork_b.rb [~/public_html/advertise2/rubycgi] (offline mode: enter name=value pairs on standard input) keisan="÷" ichi="18.9" ni="7.7" shosu="yes" Content-type: text/html; charset=EUC-jp "÷" "18.9" "7.7" "yes" 計算結果

パソコン君の計算結果

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

18.900000 ÷ 7.700000

= 2.454545

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

パソコン君、がんばりました。

著作権 鈴木椎菜

------------------------------------------------ たしかめ ---------------------------- roy{SUZUKI Shiina}% bc -l [~/public_html/advertise2/rubycgi] 18.9/7.7 2.45454545454545454545 ---------------------------- どれも正常に作動した。 <考察> 作成当初は、結果では小数点を必ず表示させることにしていた。 しかし、整数同士の計算において、小数点以下が表示されるととても見映えが悪 かった。 そのため、小数点を表示させる場合と表示させない場合をつくることを考えた。 まず始めに、入力部分である HTML に、小数点を含むか否かの設問を加えた。 その結果により、小数点を表示するかしないかを if 文で選択させれば良い。 しかし、もし小数点を含まない計算だったとしても、除算である場合は、結果が 小数を含む場合が考えられる。 そのため、さらに if文 を使用して、整数の計算では、除算の場合のみ結果を実 数で表示させるようにした。 <参考文献など> (作成の全過程) 基礎プログラミングII第9回(ことえらび) 講義ノート URL: http://roy/~madoka/2011/r2/09/lec/resume.html (CGIについて) 基礎プログラミングII第8回(ことはじめ) 「Ruby で CGI スクリプト」 URL: http://roy/~madoka/2011/r2/08/r2_08_01_theme_01_rubycgi.html (fork_b.rbで HTML への表示をつくるときのcssの出し方) 昨年度の先輩のレポート URL: http://roy/~madoka/2010/r2/08/rpt/c109058.txt 3.感想 今回は、体調不良により講義を欠席してしまった。 しかし、友人や講義のページをみながら何とかレポート課題に取り組むことがで きてよかったと思う。取り組んでいる途中、何度か本当にわからなくなって困っ たが、その分基本的なところから考えて、提出するところまで作成できた。 今回のレポートを書きながら、今までつくってきたプログラムも、ものによっ てはCGIスクリプトとして作り直したほうが面白いし、見やすいのではないかな、 と思った。 4.参考文献など 参考文献は各項目に記している。 共同制作者: 兵藤理沙 菅原彩花 小川まどか --------------------------- 東北公益文科大学 公益学部 公益学科 2年 鈴木椎菜 c110127@f.koeki-u.ac.jp