第 9 回 CGI ことえらび レポート課題
氏名:齋藤允貴
学籍番号:C111069A
語学クラス:英語 2
コース:地域共創コース
1、筆記問題
A、ラジオボタンとは、色んな選択肢の中から、1 つだけ選ぶ方法である。
プログラム上で作成する場合は、以下のようになる。
答え 1
答え 2
答え 3
type に書いてある、radio でラジオボタンが表示されるのを示す。
name のところは、使うラジオボタンを区別するために用いられている。
value のところは、ユーザー選んだ場合にこの値がプログラムに送られる。
B、チェックボックスとは、色んな選択肢の中から複数の選択肢を選択すること
が可能である。
プログラム上で作成する場合は、以下のようになる。
答え 1
答え 2
答え 3
type に書いてある、checkbox でチェックボックスが表示されるのを示す。
name のところは、使うチェックボックスを区別するために用いられている。
value のところは、ユーザーが選んだ場合にこの値がプログラムに送られる。
C、キャラクターの名前「財布くん」
自分が後期に作成したプログラムは、「家計診断センター」というお金にま
つわるプログラムを作成した。財布には、いろんな種類があるが、その中で
も今ではあまり見なくなった「がまくち財布」を参考にして、その財布に目
と口をつけて作成した。
ただ、それだけだともの足りないと思い、財布くんの上に、1 円玉、500 円
玉、10 円玉を 描いてみた。
2、プログラム問題
A、カウンタのプログラム
i, カウンターのアドレス
http://roy/~c111069/rubycgi/counter.rb
ii, CGI の題名「いらっしゃいませ」
意図
このホームページにどれだけの数の人がアクセスしたかを知りたいから。
iii, 表示部分
「counter.rb」というプログラムで以下のように作成した。
#!/usr/bin/env ruby
#coding: euc-jp
require 'cgi' # CGI を使う宣言
cgi = CGI.new(:accept_charset => "EUC-JP")
# CGI は EUC-JPで受け付ける。
print("Content-type: text/html; charset=EUC-JP\n\n")
# CGI の値を EUC-JP で書き出す
arv = cgi["suuzi"]
bango = 0 # bango の初期値
open("bango.txt","r") do |yomu| # bango.txt を「r」を入力して読み込む。
while data = yomu.gets
if /(\d+)/ =~ data # データが一つだけで、数字なので、(\d+)
bango = $1.to_i # その数字を「整数」として取り入れる。
end # if 文の終わり
end # while 文の終わり
end # open 文の終わり
print("\n") # html 文の始まり
print("
\n") # head 文の始まり
print("いらっしゃいませ\n")
# ウィンドウに表示されるタイトル
print("\n") # head 文の終わり
print("\n") # body 文の始まり
printf("あなたは %d 番目のお客様です。
\n", bango)
# 一番の見出しとして大きく表示し、「%d」の部分に
数字を代入するよう「bango」を代入する。
print("\n") # body 文の終わり
print("\n") # html 文の終わり
bango += 1 # bango に 1 を足す。
open("bango.txt", "w") do |kaku| # bango.txt を「w」入力して書き込む。
kaku.printf("%d\n", bango) # 書き込む内容は 「bango」。
end # open 文の終わり
iv, bango.txt は、chmod o+w で、他者がアクセスすることが可能となる。
これにより、他の人がアクセスをする度に bango に 1ずつプラスされ、カ
ウンターが回る。
bango.txt については、Kterm 上で次のように表示された。
-rw-r--rw- 1 c111069 st2011 3 11月 24日 12:20 bango.txt
v, 実行結果
http://roy/~c111069/rubycgi/counter.rb で確認すると、
あなたは 30 番目のお客様です。
というように表示された。
また、Kterm 上でbango.txt を見てみると、
pan{c111069}% cat bango.txt [~/public_html/rubycgi]
31
と表示された。これは、次にアクセスしたときに表示される数字である。
もう一度カウンターを回すと、
あなたは 31 番目のお客様です。
と表示された。
Kterm 上で実行すると、
pan{c111069}% ./counter.rb [~/public_html/rubycgi]
(offline mode: enter name=value pairs on standard input)
Content-type: text/html; charset=EUC-JP
いらっしゃいませ
あなたは 32 番目のお客様です。
というように表示された。よって、このプログラムは正しく動いているので、
成立する。
B、「計算機」
i, リンクのアドレス
計算機のアドレス: http://roy/~c111069/rubycgi/calculation.html
(数字や記号を入力してもらうページ)
計算結果のアドレス: http://roy/~c111069/rubycgi/calculation.rb
(計算機のページに入力した数字と記号を計算しての
結果が表示されるページ)
ii, CGI の題名「計算プログラム」
意図
ホームページ上で計算できるプログラムを作ってみたかったから。
iii, 入力部分と送信部分を作成したそれぞれのプログラムは以下のとおりであ
る。
入力部分
# html の始まり
# head の終わり
計算機プログラム # ウィンドウに表示されるタイトル
# css を使って色をつける。
# head の終わり
# body の始まり
計算プログラム
# 一番の見出しでタイトルを表示させる。
数値のところには数値以外のものを入れないでください。
# form の終わり
# body の終わり
# html の終わり
送信結果
#!/usr/bin/env ruby
#coding: euc-jp
require 'cgi' # CGI を使う宣言
cgi = CGI.new(:accept_charset => "EUC-JP")
# CGI は EUC-JP で受け付ける
print("Content-type: text/html; charset=EUC-JP\n\n")
# CGI の値を EUC-JP で書き出す
num1 = cgi["number1"]
num2 = cgi["number2"]
keisan = cgi["houhou"]
print("\n") # html の始まり
print("\n") # head の始まり
print("計算結果\n") # ウェブページのタイトル
print("\n") # head の終わり
print("\n") # body の始まり
if keisan == "addition" # 足し算「+」が入力されていた場合
s = num1.to_i + num2.to_i # 足し算の計算方法
elsif keisan == "subtraction" # 引き算 「-」が入力されていた場合
s = num1.to_i - num2.to_i # 引き算の計算方法
elsif keisan == "multiplication"
# 掛け算「×」が入力されていた場合
s = num1.to_i * num2.to_i # 掛け算の計算方法
elsif keisan == "division" # 割り算「÷」が入力されていた場合
s = num1.to_f / num2.to_f # 割り算の計算方法
end
print("計算結果
\n")
if keisan == "addition" # 足し算の計算結果
printf("%d + %d = %d
\n",num1 ,num2 ,s)
elsif keisan == "subtraction" # 引き算の計算結果
printf("%d − %d = %d
\n",num1 ,num2 ,s)
elsif keisan == "multiplication" # 掛け算の計算結果
printf("%d × %d = %d
\n",num1 ,num2 ,s)
elsif keisan == "division" # 割り算の計算結果
printf("%d ÷ %d = %f
\n",num1 ,num2 ,s.to_f)
end
print("\n") # body の終わり
print("\n") # html の終わり
iv, 各部の解説
入力部分
入力するにはテキストフィールドを作成しなければならないので、
を用いて作成した。
input type="text" でテキストフィールドを作成。
maxlength で半角文字で指定した分だけ入力することが可能である。
また、計算方法を選択する項目を作成した。
+
input type="radio" で、一つだけ選択することができる、「ラジオボタ
ン」を作成。
name で使うラジオボタンを区別するため、value でユーザー選んだとき
にこの値がプログラムに送られる。
送信結果
足し算、引き算、掛け算、割り算のそれぞれの計算方法を作成するため、
if 文を用いて、以下のように作成した。
足し算の場合
if keisan == "addition"
s = num1.to_i + num2.to_i
引き算の場合
elsif keisan == "subtraction"
s = num1.to_i - num2.to_i
掛け算の場合
elsif keisan == "multiplication"
s = num1.to_i * num2.to_i
割り算の場合
elsif keisan == "division"
s = num1.to_f / num2.to_f
足し算や引き算はいつも計算している時に使う、「+」 「-」をそのまま
利用する。掛け算や割り算の場合は、パソコンで計算するときに使う、
「*」 「/」 を利用する。
そして、計算結果を表示する場合も以下のように作成した。
足し算の場合
if keisan == "addition"
printf("%d + %d = %d
\n",num1 ,num2 ,s)
引き算の場合
elsif keisan == "subtraction"
printf("%d − %d = %d
\n",num1 ,num2 ,s)
掛け算の場合
elsif keisan == "multiplication"
printf("%d × %d = %d
\n",num1 ,num2 ,s)
割り算の場合
elsif keisan == "division"
printf("%d ÷ %d = %f
\n",num1 ,num2 ,s.to_f)
「%d」 には、入力部分で利用者が入力した数値と、選択した計算方法を
代入する。なお、割り算の場合は割り切れない場合もあるので、小数点以
下も表示させるように、「%f」 を用いた。
v, 実行結果
pan{c111069}% ./calculation.rb [~/public_html/rubycgi]
(offline mode: enter name=value pairs on standard input)
number1="4"
number2="7"
houhou="addition"
Content-type: text/html; charset=EUC-JP
計算結果
計算結果
4 + 7 = 11
pan{c111069}% ./calculation.rb [~/public_html/rubycgi]
(offline mode: enter name=value pairs on standard input)
number1="40"
number2="20"
houhou="subtraction"
Content-type: text/html; charset=EUC-JP
計算結果
計算結果
40 − 20 = 20
pan{c111069}% ./calculation.rb [~/public_html/rubycgi]
(offline mode: enter name=value pairs on standard input)
number1="55"
number2="66"
houhou="multiplication"
Content-type: text/html; charset=EUC-JP
計算結果
計算結果
55 × 66 = 3630
pan{c111069}% ./calculation.rb [~/public_html/rubycgi]
(offline mode: enter name=value pairs on standard input)
number1="2838"
number2="2"
houhou="division"
Content-type: text/html; charset=EUC-JP
計算結果
計算結果
2838 ÷ 2 = 1419.000000
考察
pan{c111069}% bc -l [~/public_html/rubycgi]
4 + 7
11
40 - 20
20
55 * 66
3630
2838 / 2
1419.00000000000000000000
quit
どの計算もしっかりと計算することができた。また、足し算、引き算、掛
け算、割り算のそれぞれの結果を表示することができた。
したがってこのプログラムは成立する。
3、Writer を使って文章を作成して、この 1 年間の基礎プログラミングの感想
を作成した。
作成した文章は以下の通りである。
基礎プログラミングを学んで
西村クラス・英語 2 C111069A 齋藤允貴
大学2年生になると、必修科目の一つとして「基礎プログラミング」を一年通
してやっていかなければならない。その時に出会うのが、「Ruby」というコン
ピュータである。今まで使っているパソコンとは違い、デスクトップには、
「Emacs」、「Kterm」、「Console」の3つのウィンドウが表示されていたの
で最初は何が何だか分からなかった。
この授業では、「Ruby」を通じて、色んなプログラムを作ってきた。プログラ
ムはまず、Emacs 上でプログラムを作成し、Kterm 上で作成するというもので
ある。もし、プログラムに不具合があったときには、Kterm 上でプログラム名
を入力したときにエラーが表示されるが、そのエラーが英語で書かれていたの
で最初見たときは、頭が真っ白になった。でも、エラーの原因がわかって、
Kterm 上でプログラムが起動したときにはとても嬉しかった。今でもその気持
ちは残っている。
また、この授業では毎回レポート課題というものがある。最初はこれを毎週や
るのはつらいなと思っていた。でも、プログラム課題が上手くいったときには
とても嬉しく、成績の評価で「A」ともらったときにはとても驚いたし、嬉し
かった。また前期のときには、2進数、10進数、16進数というように進数計算
の課題が出てきて、高校のときにもやっていたが、すっかり忘れていた。でも、
この授業でしっかりと復習することができたので、もし試験などに出たときに
は、しっかりと計算方法が思い出せるようにしっかりと勉強して試験等でしっ
かりと計算ができるようにしていきたいと思った。
基礎プログラミングの授業では、プログラムの作成だけでなく、ウェブページ
を作成する作業を行ってきた。前期では、print 文を使ってhtml の文章を作
成したり、検索のプログラムを利用して利用者が選択した作品の詳細を表示す
るプログラムを作成し、ロゴマークや、画像を作成するなどの機能を作成した。
一方で後期でも、自分の最高傑作として後期で学んだプログラムを参考にしなが
ら、自分がこれまでに使ったお金を入力してもらい、その合計金額によってお金
の使い方があっているかどうかを判断する、「家計診断センター」というものを
作成した。また「仕様書」はemacs 上で入力したものがhtml でアドレスを入力
すると、仕様書をクリックしたときに emacs で打った文章がそのまま掲載され
ているのでとても便利な機能だなと思った。また、ウェブページでアンケート等
でよく見る「ラジオボタン」や「チェックボックス」という機能があるが、それ
が、html を使って自分で作ることができるとは思わなかった。こうした機能は
社会に出たときにとても役に立ちそうだ。ウェブページの機能は、自分がホーム
ページを作るさいに、html の基本をしっかりと思い出して作成していきたいと
思った。
「基礎プログラミング」は非常に大変そうだと思っていたが、プログラムやウェ
ブページでしっかりと表示されると、とても嬉しくなった。
この感想が見れるホームページのアドレスは
http://roy/~c111069/adv2/r2_c111069.pdf である。
4、感想
今回は、テキストエリアの作り方や、前期でもやったFile Open を使ってデー
タの入出力を行ったが、「chmod」は、いままで、「+x」というやり方を使っ
て、プログラムを起動してきたが、今日新たに、「o+w」を使って他者がア
クセスすることが可能になるということが分かった。
また、ラジオボタンや、テキストフィールドの作り方を学んだので、もし、
ウェブページを作成するときには、入力を覚えてしっかりとやっていきたい。
5、参考文献
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_04_appendix_01_radio.html
西村まどか 基礎プログラミングII 第 9 回 CGI ことえらび
「ラジオボタンの作り方」
http://roy/~madoka/2012/r2/09/r2_09_06_appendix_03_textfield.html
西村まどか 基礎プログラミングII 第 9 回 CGI ことえらび
「短い記入欄の作り方」
http://roy/~madoka/2012/r1/08/r1_08_06_appendix_01_structure.html
西村まどか 基礎プログラミングI 第 8 回 電子チケットを作ろう
「HTML 文章の見本」
http://roy/~madoka/2012/r1/08/r1_08_11_review_06_colorandfonts.html
西村まどか 基礎プログラミングI 第 8 回 電子チケットを作ろう
「色をつけよう」
共同学習者
小野貴己