第 9 回 ことえらび レポート課題 氏名:薮田 大樹 学籍番号:c110191 語学クラス:中国語3 コース(系):地域共創コース 1. 筆記問題 A ラジオボタンの仕組み ラジオボタンは、いくつかの項目の中から1つを選ぶ仕組みである。 例として、電車のチケットを買うときに通路側と窓側が選べる場合には 通路側 窓側 となる。 このときのinput type="radio"は ラジオボタンを使う宣言で value="CGI 変数の値" は、ユーザーが選択した値をプログラムに送る。 B チェックボックスの仕組み チェックボックスは、いくつかの項目の中から複数を選ぶ仕組みである。 ラジオボタンは一つしか選べないが、チェックボックスは複数選べる その点がラジオボタンとチェックボックスの違いである。 選択肢1 選択肢2 このようにプログラムでは表すことが出来る。 C Tgif課題 掲載したリンク → http://roy/~c110191/advertise2/index.html 題名 「るびお」 画像作る際、直線だけのものはつまらないと思い生き物を 書こうと考えた。馬にした理由は、馬が好きだから。 工夫した点は特には無いが、強いて言えば体のデザイン。 2 プログラム問題ホームページ CGI集のリンク → http://roy/~c110191/advertise2/rubycgi/fork.html A カウントプログラムのリンク http://roy.e.koeki-u.ac.jp/~c110191/advertise2/rubycgi/count.rb カウンタープログラムの説明、実際作って考えた 作ったプログラムの名前は count.rbである。 作成したプログラム #!/usr/koeki/bin/ruby require 'cgi' # CGIを使えるように cgi = CGI.new("html4") print("Content-type: text/html; charset=EUC-jp\n\n") # データを使う宣言をする people = 0 # 最初は0人から始める為に、初期値を設定しておく sta = cgi["start"] open("count.txt","r") do |c| # オープンメソッドで count.txt を読み取り、c という名前に置き換える while number = c.gets if /(\d+)/ =~ number # もしデータが数字だったら people = $1.to_i # peopleにデータを代入 end end end print("\n") print("\n") print("よく来たな!!!\n") print("\n") print("\n") printf("

貴様は俺の %d番目の下僕だ

\n", people) # %dにはpeopleに代入された数値が入る。 print("

死ぬまで働くがいい。

\n") print("\n") print("\n") people += 1 #0人からひとりずつ増えるようにする。 open("count.txt","w") do |write| write.printf("%d\n",people) # count.txt に値を書き、数値を表示させる end もとにしたプログラム 第9回 レポート課題の カウンタ例 を参考にした。 実行結果及び考察 pan{YABUTA Taiki}% ./count.rb [~/public_html/advertise2/rubycgi] (offline mode: enter name=value pairs on standard input) Content-type: text/html; charset=EUC-jp よく来たな!!!

貴様は俺の 10番目の下僕だ

死ぬまで働くがいい。

となる。実際に続けて数値が足されていくか調べるために実行してみる pan{c110191}% ./count.rb [~/public_html/advertise2/rubycgi] (offline mode: enter name=value pairs on standard input) Content-type: text/html; charset=EUC-jp よく来たな!!!

貴様は俺の 11番目の下僕だ

死ぬまで働くがいい。

pan{c110191}% ./count.rb [~/public_html/advertise2/rubycgi] (offline mode: enter name=value pairs on standard input) Content-type: text/html; charset=EUC-jp よく来たな!!!

貴様は俺の 12番目の下僕だ

死ぬまで働くがいい。

。 実行結果で表示させた際は数値が 10 となり、次に 11 、12 と次の数値が表示 されたので、このプログラムは正しいといえる。 B 計算プログラム ラジオボタンやCGIを使用し計算を出来るようにした。 作成したプログラム keisan.html http://roy.e.koeki-u.ac.jp/~c110191/advertise2/rubycgi/keisan.html 足して引いて掛けて割ってドーーン!!!

計算出来ます。

# ユーザーに入力させ、結果を keisan.rbに出す

数値1: 数値2:

\ + - × ÷ # input type="radio" ラジオボタン # value="CGI 変数の値" ユーザーが選んだ値がプログラムに送られる

keisan.rb #!/usr/koeki/bin/ruby require 'cgi' # CGIを使えるよう cgi = CGI.new("html4") print("Content-type: text/html; charset=EUC-jp\n\n") point1 = cgi["point1"] point2 = cgi["point2"] point3 = cgi["point3"] print("\n") print("\n") print("計算プログラム\n") print("\n") print("\n") if point3 == "tasu" # もし cgi["point3"]で"tasu" が選ばれたら s = point1.to_i + point2.to_i # sは point1とpoint2を足したものになる # 以下同じように、足す・引く・掛ける・割る elsif point3 == "hiku" s = point1.to_i - point2.to_i elsif point3 == "kakeru" s = point1.to_i * point2.to_i else point3 == "waru" s = point1.to_f / point2.to_f end print("

計算結果

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

%d + %d = %d

\n",point1 ,point2 ,s) # 足すが選択された場合の計算の結果を出すページ。 # %d + %d = %d は point1 + point2 = s となる。以下同じ elsif point3 == "hiku" printf(" %d - %d = %d \n",point1 ,point2 ,s) elsif point3 == "kakeru" printf(" %d * %d = %d \n",point1 ,point2 ,s) else point3 == "waru" printf("%d / %d = %f \n",point1 ,point2 ,s.to_f) # ユーザーが打ち込んだ計算式を答えとともに表示させるために、print 文 を作成した。 end print("\n") print("\n") 実行結果 pan{YABUTA Taiki}% ./keisan.rb [~/public_html/advertise2/rubycgi] (offline mode: enter name=value pairs on standard input) point1=100 point2=100 point3="kakeru" Content-type: text/html; charset=EUC-jp 計算プログラム

計算結果

100 * 100 = 10000 確かめ算 pan{c110191}% bc -l [~] 100*100 10000 どちらも計算はあっている。よって正しい。 4 感想 今回はあまり時間が無くへたなプログラムになってしまった。 もっと時間を掛けて良いプログラムを作成したい。 5 参考文献 西村まどか 基礎プログラミング II 第 9 回 「ことえらび」 http://roy/~madoka/2011/r2/09/rpt/rpt.html 基礎プログラミング II 第 9 回 (ことえらび) 「ラジオボタンの作り方」 http://roy/~madoka/2011/r2/09/r2_09_04_theme_04_radio.html 基礎プログラミング I 第 7 回 「正規表現と Ruby 言語でのプログラミング」 http://roy/~madoka/2011/r1/07/#structure