第 9 回 ことえらび レポート課題 氏名:五十嵐兼一 学籍番号:c1100153 語学クラス:英語2 コース(系):社会福祉コース 1.筆記問題 A.「ラジオボタンのしくみについて説明」 ラジオボタンとは比較的小数の選択肢の中から一つだけ選択する場合に多用さ れることがある。どれか一つを選択するとその他の選択は解除される。 複数の選択肢それぞれに input 要素を用意し、同じグループのラジオボタンに 属するものには共通の name を指定する。そして、選択されたボタンを示すた めに、それぞれに異なる value 属性を与える。また、name の値は画面に表示 されないので、文字ラベルを加える必要がある。 B.「チェックボックスのしくみについて説明」 チェックボックスは on/off のコントロールができる。ラジオボタンと同じよ うに複数の input 要素で同じ名前を提供することが出来るが、一度に複数の項 目を選択することができる。同じ項目を選択する度に、on/off 切り替わる。 C.「自作による基礎プログラミングキャラクタ」 題名「カルビーくん」 夜中にプログラミングを行っているとき、お腹が空いて焼き肉を食べたいと思 い考えついた。カルビとルビーを合わせて「カルビーくん」が完成した。 工夫した点は、パソコンを長時間続けていて疲れたときに癒されるように、少 し可愛い表情に作成した。 作成方法 : ほとんどの作業を折線から曲線に変わるものを使って行った。 また、円や半円を描くものも使用した。 ---------------------------------------------------------------------------- 2.プログラム問題 ●「プログラム問題 ホームページ」 http://roy/~c110015/advertise2/rubycgi/fork.html A.「カウンタ」 ●設定 訪問者の数をカウントしたかった ●「カウントURL」 http://roy/~c110015/advertise2/rubycgi/fork.html ●作成したプログラム #!/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 # number の初期値を 0 とする open("number.txt","r") do |read| # open で number.txt を開き、r で読み込み while data = read.gets # date に gets でデータを入れる作業を繰り返す if /(\d+)/ =~ data number = $1.to_i end # if に対する end end # while に対する end end # open み対する end # ここからは web で出力される print("\n") print("\n") print("カウンター\n") print("\n") print("\n") print("
\n") printf("

あなたは %d 番目の訪問者です

\n", number) print("
\n") print("\n") print("\n") number += 1 # ページが開かれる度に 1 プラスする open("number.txt","w") do |write| # open で number.rb を開き、w で書き込む write.printf("%d\n",number) # write に number を代入 end ---------------------------------------------------------------------------- ●実行結果 roy{c110015}% ./count.rb [~/public_html/advertise2/rubycgi] (offline mode: enter name=value pairs on standard input) Content-type: text/html; charset=EUC-JP カウンター

あなたは 10 番目の訪問者です

roy{c110015}% ./count.rb [~/public_html/advertise2/rubycgi] (offline mode: enter name=value pairs on standard input) Content-type: text/html; charset=EUC-JP カウンター

あなたは 11 番目の訪問者です

< Web上での結果 > あなたは 16 番目の訪問者です あなたは 17 番目の訪問者です ---------------------------------------------------------------------------- ●考察 kterm と Web で実行したところ、どちらもカウントされていたのでこのプログ ラムは正しく動いている。 ---------------------------------------------------------------------------- B.「健康管理 CGI」 ●設定 最高傑作で作成したプログラムを CGI でできるようにした ●「健康管理URL」 http://roy/~c110015/advertise2/rubycgi/keisan.html ●「keisan.html」 健康管理

健康診断

性別

男性 女性

---------------------------------------------------------------------------- ●作成したプログラム #!/usr/koeki/bin/ruby require 'cgi' # CGI を使う宣言 cgi = CGI.new("html4") # html 文章で CGI を使用 print("Content-type: text/html; charset=EUC-jp\n\n") # 日本語コードを使用 def taizyu(tall) # 適正体重 = 身長 * 身長 * 22 (tall/100) * (tall/100) * 22 # cm を m に直すので、a を 100 で割る end def taisya1(wei1,tall1,age1) # 男性: 66+13.7×体重kg+5.0×身長cm−6.8×年齢 66 + 13.7 * wei1 + 5.0 * tall1 - 6.8 * age1 end def taisya2(wei2,tall2,age2) # 女性: 665+9.6×体重kg+1.7×身長cm−7.0×年齢 665 + 9.6 * wei2 + 1.7 * tall2 - 7.0 * age2 end def haikatu1(age1,tall1) # 男性肺活量ml=(27.63−0.112×年齢)×身長cm (27.63 - 0.112 * age1) * tall1 end def haikatu2(age2,tall2) # 女性肺活量ml=(21.78−0.101×年齢)×身長cm (21.78 - 0.101 * age2) * tall2 end e = cgi["erabu"] # Ruby に CGI でもらってきた値を代入 s = cgi["sex"] # Ruby に CGI でもらってきた値を代入 a = cgi["age"] # Ruby に CGI でもらってきた値を代入 t = cgi["tall"] # Ruby に CGI でもらってきた値を代入 w = cgi["weight"] # Ruby に CGI でもらってきた値を代入 a = a.to_i # a を数値に変換 t = t.to_f # t を数値に変換 w = w.to_f # w を数値に変換 print("\n") print("\n") print("結果発表\n") print("\n") print("\n") print("

測定結果

\n") print("

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

\n") printf("

性別 : %s

",s) # 性別を表示 printf("

年齢 : %d 歳

",a) # 年齢を表示 printf("

身長 : %0.1f cm

",t) # 身長を表示 printf("

体重 : %0.1f kg

",w) # 体重を表示 if e == "適正体重" # 適正体重が選択された場合 printf("

結果 : 適正体重は %0.1f [kg] です。

",taizyu(t)) elsif e == "基礎代謝" # 基礎代謝が選択された場合 if s == "男" # 性別が男性だった場合 printf("

結果 : 基礎代謝量は %0.1f [kcal] です。

",taisya1(w,t,a)) elsif s == "女" # 性別が女性だった場合 printf("

結果 : 基礎代謝量は %0.1f [kcal] です。

",taisya2(w,t,a)) end # s の if に対する end elsif e == "肺活量" # 肺活量が選択された場合 if s == "男" # 性別が男性だった場合 printf("

結果 : 肺活量予測値は %0.3f [ml] です。

",haikatu1(a,t)) elsif s == "女" # 性別が女性だった場合 printf("

結果 : 肺活量予測値は %0.3f [ml] です。

",haikatu2(a,t)) end # s の if に対する end end # e の if に対する end print("

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

\n") print("\n") print("\n") ---------------------------------------------------------------------------- ●実行結果 <適正体重> 結果発表

測定結果

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

性別 : 男性

年齢 : 19 歳

身長 : 172.0 cm

体重 : 65.0 kg

結果 : 適正体重は 65.1 [kg] です。

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

●確かめ算 pan{c110015}% bc -l [~/public_html/advertise2] ( 172 / 100 ) * ( 172 / 100 ) * 22 65.08480000000000000000 quit プログラムでは四捨五入されて 65.1kg となっている。 ---------------------------------------------------------------------------- <基礎代謝 : 男性> 結果発表

測定結果

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

性別 : 男性

年齢 : 19 歳

身長 : 172.0 cm

体重 : 65.0 kg

結果 : 基礎代謝量は 1687.3 [kcal] です。

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

●確かめ算 pan{c110015}% bc -l [~/public_html/advertise2] 66 + 13.7 * 65 + 5.0 * 172 - 6.8 * 19 1687.3 quit ---------------------------------------------------------------------------- <基礎代謝 : 女性> 結果発表

測定結果

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

性別 : 女性

年齢 : 19 歳

身長 : 153.0 cm

体重 : 53.0 kg

結果 : 基礎代謝量は 1300.9 [kcal] です。

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

●確かめ算 pan{c110015}% bc -l [~/public_html/advertise2/rubycgi] 665 + 9.6 * 53 + 1.7 * 153 - 7.0 * 19 1300.9 quit ---------------------------------------------------------------------------- <肺活量 : 男性> 結果発表

測定結果

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

性別 : 男性

年齢 : 19 歳

身長 : 172.0 cm

体重 : 65.0 kg

結果 : 肺活量予測値は 4386.344 [ml] です。

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

●確かめ算 pan{c110015}% bc -l [~/public_html/advertise2] (27.63 - 0.112 * 19) * 172 4386.344 quit ---------------------------------------------------------------------------- <肺活量 : 女性> 結果発表

測定結果

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

性別 : 女性

年齢 : 19 歳

身長 : 153.0 cm

体重 : 53.0 kg

結果 : 肺活量予測値は 3038.733 [ml] です。

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

●確かめ算 pan{c110015}% bc -l [~/public_html/advertise2] (21.78 - 0.101 * 19) * 153 3038.733 quit ---------------------------------------------------------------------------- ●もとにしたプログラム 第7回で作成した「健康管理プログラム」と sihtseeing.rb を参考に CGI で作 り直した。 ---------------------------------------------------------------------------- ●考察 CGI での計算結果と bc -l で行った計算結果が合っているので、このプログラ ムは正しく動いている。 ---------------------------------------------------------------------------- 3.感想 今回、tgif を使ってキャラクタを作成する作業は楽しく取り組むことができた。 しかし、カウンタープログラムの作成では、chmod o+w counter.txt とすることで -rw-r--rw-となり、所有者だけでなく観覧者もテキストに書き込みが出来るよ うになると言うことが分からなかったため、前年度の先輩のレポートを参考に して何とか完成させることができた。 計算プログラムでは、入力してもらった値を数値に変換するところが分からな くて苦労した。また、CGI で計算できるようにしたことにより、以前よりも使 いやすくなったと思う。 ---------------------------------------------------------------------------- 4.参考文献 著 : 西村まどか 基礎プログラミング I 第 12 回 (自由課題コンペティション / 画像作成) 「描画ソフト」 ( http://roy/~madoka/2011/r1/12/r1_12_02_theme_02_painttool.html ) 著 : 西村まどか 基礎プログラミング II 第 8 回 「ことはじめ」 ( http://roy/~madoka/2011/r2/08/ ) 著 : 西村まどか 基礎プログラミング II 第 9 回 「ことえらび」 ( http://roy/~madoka/2011/r2/09/ ) 著 : 半塲 滋 Tgif入門( http://dsl4.eee.u-ryukyu.ac.jp/DOCS/tgif/ ) 基本的なフォーム ( http://www.kanzaki.com/docs/html/htminfo31.html#input_radio ) 前年度の先輩のページ 吉田瑞恵さん ( http://roy/~madoka/2010/r2/09/rpt/c108203.txt ) ---------------------------------------------------------------------------- ●共同学習者 宮原 絵美里 見川 英駿