第 9 回 ことえらび レポート課題
氏名:照井さつき
学籍番号:C1101589
語学クラス:中国語3
コース(系):政策マネジメント
==========
1.筆記問題
==========
1-A.選択肢を以下の表示方法で指定する。
◯
×
type="radio" でラジオボタン形式での設置を指定している。
また checked によって、既定値に設定される。
value="yy"を指定した.rbプログラムに渡す。
----------
1-B.選択肢を以下の表示方法で指定する。
◯
×
type="checkbox" でチェックボックス形式での設置を指定している。
ラジオボタンとは違い、複数解答ができる。
選ばれた value="" を指定した.rbプログラムに渡す。
----------
1-C. http://roy/e.koeki-u.ac.jp/c110158/advertise2/char_r2_c110158.png
題名: 「四角りんご」
モチーフは題名の通りリンゴであり、四角いリンゴのというデザインを
工夫した。
tgif の 直角ではない丸角の四角作成ツールを使用した。
==========
2.プログラム問題
==========
アドレス: http://roy/~c110xxx/advertise2/rubycgi/fork.html
css: body.css
----------
A-a.URL
----------
アドレス: http://roy/~c110158/advertise2/rubycgi/counter.rb
----------
A-b.CGIの題名と意図
----------
「アクセスカウンター」
ページが更新される度に記録していき、来訪者数を数え、表示するプログラム。
----------
A-c.入力と送信結果の部分
-d. 各部の解説
----------
ファイル: counter.rb
#!/usr/bin/env ruby
require 'cgi' # CGI を使用する宣言
cgi = CGI.new("html4") # HTML で CGI を使用する
print("Content-type: text/html; charset=EUC-jp\n\n")
# 言語コードを指定し、文字化けを防ぐ
number = 0
# 0人から始めるため、0と指定
open("number.txt","r") do |num|
# number.txt を読みこみとして開き、num として置き換える
while data = num.gets # 読み込まれた内容の最後まで繰り返す
if /(\d+)/ =~ data # データが数字である場合を指定
number = $1.to_i # 数値で表示させる
end
end
end
print("\n") #以下htmlで表示
print("
\n")
print(" \n")
print("アクセスカウンター \n")
print(" \n")
print("\n")
print("\n")
print("←top ")
print(" \n")
print("")
print("■アクセスカウンター□
\n")
print(" ")
print("
\n")
print("\n")
print("
\n")
print("\n")
print(" ")
print("ようこそ! \n")
printf("あなたは %d 人目のお客さまです! \n",number)
# 表示する部分
print(" \n")
print("\n")
print("\n")
number += 1 # 今までの内容に数値を1足す
open("number.txt","w") do |write|
# number.txt を書き込みとして、write として置き換える
write.printf("%d\n",number)# 結果を表示させる
end
----------
A-e.実行結果
----------
アクセスカウンター
←top
■アクセスカウンター□
----------
A-f.考察
----------
人数を表示するために number.txtを使用したが、そのままでは人数が0と
表示され、更新しても数は増えなかった。
その際 kterm にて chmod o+w としたところ、人数を増やせるようになった。
これは o+w により、外部からでも書き込みが可能になったためと考えられる。
=====
----------
B-a.URL
----------
アドレス: http://roy/~c110158/advertise2/rubycgi/keisan.html
http://roy/~c110158/advertise2/rubycgi/keisan.rb
----------
B-b.CGIの題名と意図
----------
「計算プログラム」
入力された数字をラジオボタン形式によって計算方法を選択し、
実行するプログラム
----------
B-c.入力と送信結果の部分
-d.各部の解説
----------
添付ファイル: keisan.html
計算
←top
■計算プログラム□
-----
添付ファイル: keisan.rb
#!/usr/bin/env ruby
$KCODE = 'e'
# 言語コードを指定
require'cgi'# CGI を使用する宣言
cgi = CGI.new("html4")# HTML で CGI を使用する
print("Content-type: text/html; charset=EUC-jp\n\n")
# 言語コードを指定し、文字化けを防ぐ
ans1 = cgi["ans1"]
ans2 = cgi["ans2"]
keisan = cgi["keisan"]
# keisan.htmlから出力された内容を受け取る値
print("\n")
print("\n")
print("計算 \n")
print(" \n")
print(" \n")
print("\n")
print("\n")
print("←back ")
print(" \n")
print("
\n")
print("\n")
print("
\n")
print("\n")
print("■計算結果□ \n")
print("")
if keisan == "tasu" # 足し算なら
s = ans1.to_i + ans2.to_i
elsif keisan == "hiku" # 引き算なら
s = ans1.to_i - ans2.to_i
elsif keisan == "kakeru" # かけ算なら
s = ans1.to_i * ans2.to_i
else keisan == "waru" # 割り算なら
s = ans1.to_f / ans2.to_f
end
if keisan == "tasu" # 足し算
printf("%d + %d = %d \n",ans1,ans2,s) #足し算の結果を表示
elsif keisan == "hiku" # 引き算
printf("%d - %d = %d \n",ans1,ans2,s)#引き算の結果を表示
elsif keisan == "kakeru" # 掛け算
printf("%d * %d = %d \n",ans1,ans2,s)#掛け算の結果を表示
else keisan == "waru" # 割り算
printf("%d / %d = %f \n",ans1,ans2,s.to_f)#割り算の結果を表示
end
print(" \n")
print(" \n")
print("\n") # body 終わり
print("\n") # html 終わり
----------
B-e.実行結果
----------
計算
←back
----------
B-f.考察
----------
計算をそれぞれ行い bc -l でたしかめたところ、
-----
足し算
-----
*html
20 + 3 = 23
*bc -l
pan{TERUI Satsuki}% bc -l [~]
20 + 3
23
-----
引き算
-----
*html
20 - 3 = 17
*bc -l
pan{TERUI Satsuki}% bc -l [~]
20 - 3
17
-----
掛け算
-----
*html
20 * 3 = 60
*bc -l
pan{TERUI Satsuki}% bc -l [~]
20 * 3
60
-----
割り算
-----
*html
20 / 3 = 6.666667
# 四捨五入済
*bc -l
pan{TERUI Satsuki}% bc -l [~]
20 / 3
6.66666666666666666666
という結果になり、どの計算式でも正常にプログラムが
実行されていることが分かった。
=====
----------
C-a.URL
----------
アドレス: http://roy/~c110158/advertise2/rubycgi/graph.html
http://roy/~c110158/advertise2/rubycgi/graph.rb
----------
C-b.CGIの題名と意図
----------
「グラフ作成プログラム」
ドロップダウンメニューからそれぞれ傾きや切片を一つずつ選び、
1 次関数のグラフを作成し、表示させるプログラム。
----------
C-c.入力と送信結果の部分
-d.各部の解説
----------
添付ファイル: graph.html
グラフ
←top
■グラフ作成プログラム□
-----
添付ファイル: graph.rb
#!/usr/koeki/bin/ruby
def zu(a,b,c) # メソッドの定義
g = a * b + c # aとbを掛けcを足したものを g とする
g - 1 # g から 1 引く
g.to_i # g を数字とする
end
def gurahu(d,e,f) # メソッドの定義
print("\n")
h = f - 1 # f から 1 を引いた値を代入 h に代入する
print(" " + "-" * h + "*" + "-" * 40 + "- y \n")
# (空白)で空け、- を h の量だけ表示した後、* と表示する。
# そして - を40個表示し、-y と表示する。
print("|" + " " * zu(d,e,f) + "* \n")
# | を表示した後 zu(d,e,f) を呼びだし、その値の量だけ空白を空ける。
#そして * を表示させる。
#以下は e に1ずつ増加させながら足していき、上記と同様に空白を空ける。
printf("|" + " " * zu(d,e+1,f) + "* \n")
printf("|" + " " * zu(d,e+2,f) + "* \n")
printf("|" + " " * zu(d,e+3,f) + "* \n")
printf("|" + " " * zu(d,e+4,f) + "* \n")
print("| \n")
print("x \n") # x を表示
print(" \n")
end
require 'cgi' # CGI を使用する宣言
cgi = CGI.new("html4") # HTML で CGI を使用する
print("Content-type: text/html; charset=EUC-jp\n\n")
# 言語コードを指定し、文字化けを防ぐ
x = cgi["x"]
y = cgi["y"]
z = 1
# graph.htmlから出力された内容を受け取る値
print("\n")
print("\n")
print(" \n")
print("グラフプログラム \n")
print(" \n")
print(" \n")
print("\n")
print("\n")
print("←back ")
print(" \n")
print("
\n")
print("\n")
print("
\n")
print("\n")
print("■結果□ \n")
printf("y = %dx + %d のグラフ \n",x.to_i ,y.to_i)
# 数式を表示
gurahu(x.to_i,z,y.to_i)
# グラフを表示
print(" \n")
print("
\n")
print("\n")
print("\n")
----------
C-e.実行結果
----------
グラフプログラム
←back
■結果□
y = 5x + 6 のグラフ
-----*----------------------------------------- y
| *
| *
| *
| *
| *
|
x
----------
C-f.考察
----------
print("|" + " " * zu(d,e,f) + "* \n")
printf("|" + " " * zu(d,e+1,f) + "* \n")
printf("|" + " " * zu(d,e+2,f) + "* \n")
printf("|" + " " * zu(d,e+3,f) + "* \n")
printf("|" + " " * zu(d,e+4,f) + "* \n")
の部分を gurahu(d,e,f) として入力したところ、正常な図にならず、
そこで zu(d,e,f) と入力したところ正常なに図になった。
その後、様々なパターンのグラフを作成したが、全て正常なグラフが作成された
ため、このプログラムは正しく実行されていると言うことが出来る。
=====
----------
D-a.URL
----------
アドレス: http://roy/~c110158/advertise2/rubycgi/color.html
http://roy/~c110158/advertise2/rubycgi/color.rb
css: color1.css
color2.css
color3.css
----------
D-b.CGIの題名と意図
----------
「色変更プログラム」
選択された項目ごとにcssファイルを変更し、背景色などを変更するプログラム
----------
D-c.入力と送信結果の部分
-d.各部の解説
----------
添付ファイル: color.html
色変更
←top
■色変更プログラム□
-----
添付ファイル: color.rb
#!/usr/bin/env ruby
require 'cgi' # CGI を使用する宣言
cgi = CGI.new("html4") # HTML で CGI を使用する
print("Content-type: text/html; charset=EUC-jp\n\n")
# 言語コードを指定し、文字化けを防ぐ
color = cgi["color"]
# color.htmlから出力された内容を受け取る値
print("\n")
print("\n")
print(" 色変更 \n")
print(" ")
if color == "red" # 赤 を選択
print(" \n")
elsif color == "green" # 緑 を選択
print(" \n")
else color == "blue" # 青 を選択
print(" \n")
end
# ここでcss変更をする
print("\n")
print("\n")
print("←back ")
print(" \n")
print("
\n")
print("\n")
print("
\n")
print("\n")
if color == "red" # 赤 を選択
print("\n")
print("■色変更完了!□
\n")
print(" \n")
print("赤ベースの配色になります!
\n")
elsif color == "green" # 緑 を選択
print("\n")
print("■色変更完了!□
\n")
print(" \n")
print("緑ベースの配色になります!
\n")
else color == "blue" # 青 を選択
print("\n")
print("■色変更完了!□
\n")
print(" \n")
print("青ベースの配色になります!
\n")
end
# それぞれの選択肢ごとの文章
print(" \n")
print("\n")
print("\n")
----------
D-e.実行結果
----------
赤を選択
-----
色変更
←back
-----
緑を選択
-----
色変更
←back
-----
青を選択
-----
色変更
←back
----------
D-f.考察
----------
なにも選択せずに ok を選んだ場合勝手に青が選択されたため、赤に cheked と
入力したところ、赤が既定値になった。
その後どの選択肢を選んでも、プログラムどおりに実行されたため
このプログラムは正し実行されていると言うことが出来る。
==========
==========
3.感想
==========
今回のレポート課題は量が多く、期日までに出来るか不安だったが、友人と協力
して無事に完成させることが出来た。
しかしCGIについてはまだ理解できていないところが多く、グラフ作成プログラ
ムでは、偶然出来た部分が大きかった。
今後はそんな部分を無くせるようにしたい。
==========
4.参考文献
==========
基礎プログラミング II 第 9 回 「ことえらび」
西村まどか
http://roy/~madoka/2011/r2/09/
CGI[1]
http://roy/~naoya/cgi-bin/9.html
CGI[2]
神田直弥
http://roy/~naoya/cgi-bin/10.html
共同作成者
小林 愛実