添付を忘れていたファイルがあるので再送します。 感想も書き足しました。 第9回 基礎プログラミング II レポート課題 氏名:吉田瑞恵 学籍番号:C108203 語学クラス:英語(?) コース(系):社会 1. A.ラジオボタンは、 zzz で作成できる。 type="radio" でラジオボタンを作る宣言をする。 xxxはプログラムに使われる値で、使用者には見えない。 zzzは使用者が見ることができる名前である。 ◯zzz のように表示される。 ◎zzz と選択され、送信されると、yyyがプログラムに送られる。 ラジオボタンの場合、一つしか選択できない。 B.チェックボックスは、 ccc で作成できる。 type="checkbox" でチェックボックスを作る宣言をする。 選択・送信されるとbbbがcgiに送られる。 ラジオボタンと違い、複数の選択肢を選択することができる。 2.A,B,Dを作成 A.「カウンター」 設置ぺージ:http://roy/~c108203/rubycgi/fork.html 意図:ボタンをクリックしてもらうことで、何人サイトにアクセスしたか知りた いと思ったため。また、授業で扱われたカウンターの構造を理解したいので作成した。 入力部分(http://roy/~c108203/rubycgi/fork.htmlより)

カウンター

# ここで取って来た値は/counter.rbに使う # ボタンの作成。[何番目かな?]と書かれた灰色のボタンが押されることで決定 表示部分 #!/usr/koeki/bin/ruby require 'cgi' # cgiを使う宣言 cgi = CGI.new("html4") #html4で使用 print("Content-type: text/html; charset=EUC-JP\n\n") number = 0 # numberの初期値は0 open("dat/counter.txt","r") do |read| # dat内のcounter.txtを読みこむ。 while data = read.gets if /(\d+)/ =~ data # データが数字一つだけの場合 number = $1.to_i # その数字を整数として取り入れる。 end # if end # while文終了 end # open do文終了 print("\n") # html文 開始 print("\n") # head文 開始 print("カウンター\n") # ウィンドウに表示されるタイトル print("") # fork.css を 使う。 print("\n") # head文 終了 print("\n") # body文 開始 printf("

あなたは %d 人目 のお客様です

\n", number) # 一番の見出しで人数を表示 print("

いらっしゃい。何もないけどゆっくりしていって下さい

\n") print("

よかったら前のページに戻って計算機を使ってね。

\n") print("

誕生石の色が分かるCGIもあります。

\n") # ここまでは2番の見出しでメッセージ print("\n") print("\n") number += 1 # numberに1足す open("dat/counter.txt","w") do |write| # dat内のcounter.txtに書きこむ。 write.printf("%d\n",number) # 書きこむ内容は number。 end # open do 文 終了 counter.txtについて -rw-r--rw- 1 c108203 st2008 3 12月 3日 14:41 counter.txt dat内に作成した counter.txtは、chmod o+w counter.txtとすることで -rw-r--rw-となった。これは、所有者だけでなく、閲覧者もこのテキストに 書込みが出来るということである。これにより、他の人のアクセスする度 number に +1ずつされ、カウンターがまわる。 実行結果 http://roy/~c108203/rubycgi/counter.rb あなたは 1 人目 のお客様です いらっしゃい。何もないけどゆっくりしていって下さい よかったら前のページに戻って計算機を使ってね。 誕生石の色が分かるCGIもあります。 と表示された。 counter.txtを開くと 2 と書いてあった。これは次にアクセスしたときに表示さ れる数字だ。もう一度カウンターを回すと、 あなたは 2 人目 のお客様です いらっしゃい。何もないけどゆっくりしていって下さい よかったら前のページに戻って計算機を使ってね。 誕生石の色が分かるCGIもあります。 と表示された。なのでこのプログラムは正しく動いているといえる。 B.「計算機」 設置ページ:http://roy/~c108203/rubycgi/calc.html 意図:web上で使える計算機を作成したかったため。 入力部分 calc.html # html 開始 # head 開始 計算機 # ウィンドウ上部に表示されるタイトル # css を 使用する。

計算機

#一番目の見出しを使いタイトルとして表示

※割り算の場合、 / を選ぶとあまりを出し、
÷ を選ぶと小数点第一位まで出します。

# 説明文 # 入力された結果はcalc.rbで処理する。 数字1 # 一つ目の数字。8桁までの入力にした。 計算記号は? / ÷ + - * # ラジオボタンを使用。 # 割り算の記号が二つあるのは、計算方法が異なるため。 数字2 # 二つ目の数字。こちらも入力は8桁まで。

# 入力されたものをcalc.rbに # 入力されているものを全て消す

# cgiフォームを作る文終了。 # body終了 # html終了 送信結果 calc.rb #!/usr/koeki/bin/ruby require 'cgi' # cgiを使う宣言。 cgi = CGI.new("html4") # html4を使用。 print("Content-type: text/html; charset=EUC-jp\n\n") num1 = cgi["number1"] num2 = cgi["number2"] keisan=cgi["keisan"] # calc.htmlから受け取る値。 print("\n") # html 開始 print("\n") # head 開始 print("\t計算結果\n") #上部に表示されるタイトル print("") # fork.css を使う。 print("\n") # head 終了 print("\n") # body 開始 print("

計算結果

") # タイトルのように表示。 printf("

%d %s %d",num1,keisan,num2) # 2番見出しで入力された数値、計算記号を表示 if keisan == "w1" # 計算記号が / の場合 s = num1.to_i / num2.to_i # 商を出す a = num1.to_i % num2.to_i # あまりを出す printf(" = %dあまり%d",s,a) # 商 と あまり を表示。 elsif keisan == "w2" # 計算記号が ÷ の場合 s = num1.to_f / num2.to_f # 数値1 を少数として取り込んだものを # 数値2 を少数として取り込んだもので割る。 printf("= %10.1f",s) # 結果表示。10桁で、少数は第一位まで。 elsif keisan == "h" # 計算記号が - の場合 s = num1.to_i - num2.to_i # 数値1から数値2を引く printf("= %d",s) # 結果表示 elsif keisan == "t" # 計算記号が + の場合 s = num1.to_i + num2.to_i # 数値1と数値2を足す printf("= %d",s) # 結果表示 else # それ以外、計算記号が * の場合 s = num1.to_i * num2.to_i # 数値1に数値2をかける。 printf("= %d",s) # 結果表示 end # if文 終了 print("

\n") # 2番見出し終了 print("\n") # body 終了 print("\n") # html 終了 実行結果 roy{c108203}% ./calc.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) num1="56" keisan="t" num2="3542" Content-type: text/html; charset=EUC-jp 計算結果

計算結果

56 + 3542 = 3598

考察 roy{c108203}% ./calc.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) num1="100" keisan="w1" num2="6" Content-type: text/html; charset=EUC-jp 計算結果

計算結果

100 / 6 = 16あまり4

bc -lではあまりはでないので、手計算で確かめた 16 _____ 6|100 6 ----- 40 36 ---- 4 また、割った数 * 商 + あまり = 割られた数なのでこれをbc -lで計算した。 roy{c108203}% bc -l [~/public_html/rubycgi] 6*16+4 100 なので計算は正しい roy{c108203}% ./calc.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) num1="100" keisan="w2" num2="3" Content-type: text/html; charset=EUC-jp 計算結果

計算結果

100 ÷ 3 = 33.3

これをbc -lで確かめ算すると roy{c108203}% bc -l [~/public_html/rubycgi] 100/3 33.33333333333333333333 小数点2位で四捨五入なので33.3 よって計算は正しくできているといえる。 はじめ、 roy{c108203}% ./calc.rb [~/public_html/rubycgi] で実行されるか確かめるとき、 num1 = "100" keisan = "w2" num2 = "3" と空白を入れてしまい計算が出来ず、悩んだ。 今後はこの様な単純ミスで詰まることはないようにしたい。 また、web上でも実行したところ 計算結果 13231 ÷ 5 = 2646.2 とできたので、このプログラムは正常に起動しているといえる。 D.cssきせかえプログラ厶「誕生石は何色?」 設置ページ:http://roy/~c108203/rubycgi/kisekae.html 意図:cssきせかえプログラムということで、単に好きな色を選んでもらうより、 自分の生まれた月を選び、誕生石の色を知ってもらう方が面白いのではないかと 考えたため作成。 着せ替えcss # fork.cssを使う。
# 結果はkisekae.rbで処理。

あなたの誕生石の色を教えます

あなたの誕生月の石はどんな色でしょうか。

何月生まれか選んで下さい
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月
12月
# ラジオボタンで選択してもらう。

# 送信ボタン # リセット

結果表示プログラム kisekae.rb #!/usr/koeki/bin/ruby require 'cgi' # cgi使用宣言 cgi = CGI.new("html4") print("Content-type: text/html; charset=EUC-jp\n\n") month=cgi["month"].to_i # month を数字として取り込む。 print("\n") print("\n") print("\t誕生石ってどんな色?\n") # どの選択肢が選ばれてもここまでは共通。 if month == 1 # 1が選ばれたら print("") # jan.css を使う。今回は月ごとにその色のcssを作った。 # ここからは月ごとのcssを使うようにする。 print("\n") print("\n") printf("

%d月生まれのあなたの誕生石は
\n",month) printf("ガーネット

") # 結果表示。 elsif month == 2 print("") print("\n") print("\n") printf("

%d月生まれのあなたの誕生石は
\n",month) printf("アメジスト

") elsif month == 3 print("") print("\n") print("\n") printf("

%d月生まれのあなたの誕生石は
\n",month) printf("コーラル

") elsif month == 4 print("") print("\n") print("\n") printf("

%d月生まれのあなたの誕生石は
\n",month) printf("ダイヤモンド

") elsif month == 5 print("") print("\n") print("\n") printf("

%d月生まれのあなたの誕生石は
\n",month) printf("エメラルド

") elsif month == 6 print("") print("\n") print("\n") printf("

%d月生まれのあなたの誕生石は
\n",month) printf("ムーンストーン

") elsif month == 7 print("") print("\n") print("\n") printf("

%d月生まれのあなたの誕生石は
\n",month) printf("ルビー

") elsif month == 8 print("") print("\n") print("\n") printf("

%d月生まれのあなたの誕生石は
",month) printf("ペリドット

") elsif month == 9 print("") print("\n") print("\n") printf("

%d月生まれのあなたの誕生石は
\n",month) printf("サファイア

") elsif month == 10 print("") print("\n") print("\n") printf("

%d月生まれのあなたの誕生石は
\n",month) printf("トルマリン

") elsif month == 11 print("") print("\n") print("\n") printf("

%d月生まれのあなたの誕生石は
\n",month) printf("シトリン

") elsif month == 12 print("") print("\n") print("\n") printf("

%d月生まれのあなたの誕生石は
\n",month) printf("ラピスラズリ

") else # 何も選択されなかった場合 print("") print("\n") print("\n") print("

何も選択していないあなたの誕生石は
\n") print("分からないです。
") print("前のページに戻って、1月から12月までのうち1つ選択して下さい

") end #if 終了。 print("

\n") print("\n") print("\n") 実行結果 roy{c108203}% ./kisekae.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) month=1 Content-type: text/html; charset=EUC-jp 誕生石ってどんな色?

1月生まれのあなたの誕生石は
ガーネット

roy{c108203}% ./kisekae.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) month=12 Content-type: text/html; charset=EUC-jp 誕生石ってどんな色?

12月生まれのあなたの誕生石は
ラピスラズリ

webページでも背景色、結果ともに表示されたので正しいといえる。 Tgif 花札の一月札、松に鶴を描いた。 この太陽を見る鶴のように、明るい未来を目指そうという意味でキャラクターに 選んだ。 基本的には曲線を用いた。太陽はまず丸を設置し、その上にあわせ曲線を描いた。 鶴も頭以外曲線で描いた。鶴の両隣にある松も曲線だ。 その上を花札のような黒い枠で囲んだ。 感想 今回は課題作成中に小さなミスを連発した。 royでの実行での空白や、スペルミスなどだ。 小さなミスでも混乱すると何がおかしいか分からなくなるため注意が必要だと感 じた。 また、cssを大量に作成し、添付するときなどに軽く混乱した。 なので一つにまとめられた方が良かったかと思う。 参考文献 http://www.color-saion.com/knowledge/jewelry/01.php 誕生石の色と意味−カラーサロン彩音 http://www.nicopon.com/iro/stone/ 色見本大辞典 > 誕生石辞典 基礎プログラミング II 第9回 「CGIのことえらび」テキストフィールドの作り方 http://roy/~madoka/2010/r2/09/09_06_theme_04_textfield.html http://roy/~madoka/2010/r2/09/09_08_theme_06_hashfile.html 作成者:西村まどか