第9回 基礎プログラミング II レポート課題 氏名: 池田博哉 学籍番号: c1090147 語学クラス: 英語3 コース(系): 地域共創 1.筆記問題 A.ラジオボタンの仕組み input type="radio" input type の中に入力するものは、"radio"だけでいい。 ラジオボタンを使うことを表し、◯の中にチェックを入れられる。ただし、 一度チェックした項目と違う項目をチェックすると、前のチェックが解除さ れるようになっている。 B.チェックボックスの仕組み input type="checkbox" input type の中には、"checkbox"まで入力する。 チェックボックスを使うことを表し、□の中にチェックを入れられる。ラジ オボタンと違うところは、□の中にチェックを何個でも入れられるところ。 2.プログラム問題 8回目の講義でも行ったことだが、rubycgi の下に .html と .rb のファイル だけ作って実行しても、結果ページがプログラム本文が表示されるだけの状態 になってしまう。今回はCGIスクリプトを使うので、.htaccess というものを ディレクトリ内にあらかじめ作っておく必要がある。 ホームページ「http://roy/~c109014/advertise2/rubycgi/fork.html」 B. a.アドレス「http://roy/~c109014/advertise2/rubycgi/keisan.html」 b.CGIの題「簡易計算機」 意図 … 手早く計算したい人のために、すぐ計算できるプログラムを作成し た。また、足算か引算なども指定できるようにして、電卓らしさを 出してみた。 c.◯入力部分のページ◯ 「keisan.html」 ------------------------------------------------------------------------------- CGIホームページB問題

◯簡易計算機◯

※ 数字以外で入力すると、正しく結果が表示されません。


◯足算、引算、掛算、割算、階乗を計算◯

数値1 :

数値2 :



※著作権について※

このプログラムは、東北公益文科大学 池田博哉が著作権を保有しています。

プログラムの入手・改変・再配布は、自由に行っても構いません。

なお、このプログラムの取り扱いによって生じた問題については責任を負いませんので、注意して下さい。

このプログラムに対する感想・意見・苦情など言いたいことがありましたら、

c109014@e.koeki-u.ac.jp 」へお願いします。



前のページに戻る
------------------------------------------------------------------------------- ◯送信結果のページ◯「keisan.rb」 ------------------------------------------------------------------------------- #!/usr/bin/env ruby require 'cgi' cgi = CGI.new("html4") print("Content-type: text/html; charset=EUC-JP\n\n") k1 = cgi["kazu1"].to_i # 文字列として取り込んだものを数値にする k2 = cgi["kazu2"].to_i # 文字列として取り込んだものを数値にする d = cgi["do"] print("\n") print("\n") print("◯計算結果◯\n") print("\n") print("\n") print("

◯計算結果◯

\n") print("
\n") if d == "足す( + )" # もし、+ なら、足算をする result1 = k1 + k2 printf("

[ %d ] + [ %d ] = [ %d ]

\n", k1, k2, result1) elsif d == "引く( - )" # もし、- なら、引算をする result2 = k1 - k2 printf("

[ %d ] - [ %d ] = [ %d ]

\n", k1, k2, result2) elsif d == "掛ける( × )" # もし、× なら、掛算をする result3 = k1 * k2 printf("

[ %d ] × [ %d ] = [ %d ]

\n", k1, k2, result3) elsif d == "割る( ÷ )" # もし、÷ なら、割算をする result4 = k1.to_f / k2.to_f printf("

[ %d ] ÷ [ %d ] = [ %4.5f ]

\n", k1, k2, result4) elsif d == "階乗( ×× )" # もし、×× なら、階乗をする result5 = k1 ** k2 printf("

[ %d ] の [ %d ] 乗は、[ %d ]です。

\n", k1, k2, result5) end print("\n") print("\n") ------------------------------------------------------------------------------- d.実行結果 数値1 を「3」 、数値2 を「2」、計算方法は「引く( - )」 ------------------------------------------------------------------------------- pan{c109014}% ./keisan.rb [~/public_html/advertise2/rubycgi] (offline mode: enter name=value pairs on standard input) kazu1="3" do="引く( - )" kazu2="2" Content-type: text/html; charset=EUC-JP ◯計算結果◯

数値1 : 3

数値1 : 2

◯計算結果◯


[ 3 ] - [ 2 ] = [ 1 ]

------------------------------------------------------------------------------- ◯ktermで計算 pan{c109014}% bc -l [~/public_html/advertise2/rubycgi] 3 - 2 1 数値1 を「4」 、数値2 を「10」、計算方法は「階乗( ×× )」 ------------------------------------------------------------------------------- pan{c109014}% ./keisan.rb [~/public_html/advertise2/rubycgi] (offline mode: enter name=value pairs on standard input) kazu1="4" kazu2="10" do="階乗( ×× )" Content-type: text/html; charset=EUC-JP ◯計算結果◯

数値1 : 4

数値1 : 10

◯計算結果◯


[ 4 ] の [ 10 ] 乗は、[ 1048576 ]です。

------------------------------------------------------------------------------- ◯ktermで計算 pan{c109014}% bc -l [~/public_html/advertise2/rubycgi] 4 * 4 * 4 * 4 * 4 * 4 * 4 * 4 * 4 * 4 1048576 e.考察 入力した部分は代入されており、計算結果は合っていた。 ただ、ktermでの入力の仕方を間違えて実行すると、入力したものが正しく 代入されなかった。 例えば、 kazu1="4" → kazu1 = "4" kazu2="10" → kazu2 = "10" do="階乗( ×× )" → do = "階乗( ×× )" と、= や "" の間をスペースで空けて、実行してみる。 ------------------------------------------------------------------------------- pan{c109014}% ./keisan.rb [~/public_html/advertise2/rubycgi] (offline mode: enter name=value pairs on standard input) kazu1 = "4" kazu2 = "10" do = "階乗( ×× )" Content-type: text/html; charset=EUC-JP ◯計算結果◯

数値1 : 0

数値1 : 0

◯計算結果◯


------------------------------------------------------------------------------- となり、正しく代入されない。 この部分を注意してKtermを実行しなければならないと分かった。 C. C問題は完成まで至らなかったので、分からないなりに自力でプログラミング したものの途中経過を載せます。 a.アドレス「http://roy/~c109014/advertise2/rubycgi/onigiri.html」 b.CGIの題「おにぎり屋」 意図 … おにぎりの種類と、それを何個買うかをチェックさせ、値段が表示 されるようにした。また、何を何個買うかで値段が変わってくるの で、棒グラフで値段を表示するプログラムにしようとした。 c.◯入力部分のページ◯ ------------------------------------------------------------------------------- CGIホームページC問題

◯おにぎり屋さん◯


◯おにぎり◯

筋子おにぎり 焼おにぎり 昆布おにぎり





※著作権について※

このプログラムは、東北公益文科大学 池田博哉が著作権を保有しています。

プログラムの入手・改変・再配布は、自由に行っても構いません。

なお、このプログラムの取り扱いによって生じた問題については責任を負いませんので、注意して下さい。

このプログラムに対する感想・意見・苦情など言いたいことがありましたら、

c109014@e.koeki-u.ac.jp 」へお願いします。



前のページに戻る
------------------------------------------------------------------------------- ◯送信結果のページ◯ ------------------------------------------------------------------------------- #!/usr/bin/env ruby require 'cgi' cgi = CGI.new("html4") print("Content-type: text/html; charset=EUC-JP\n\n") def barplot(p,q) print(" 10 20 30 40 50\n") print("+---------|---------|---------|---------|---------|------y軸\n") # y軸を表示 for o in p .. q print("|" + "*" * total(o) + "\n") end print("|\nx軸\n") # x軸を表示 end def total(o,k) o * k end type = cgi["type"] kosu = cgi["kosu"].to_i # 文字列として取り込んだものを数値にする print("\n") print("\n") print("◯お会計◯\n") print("\n") print("\n") print("

◯会計◯

\n") print("
\n") printf("

おにぎりの種類 : %s

\n", type) printf("

おにぎりの数 : %d

\n", kosu) if type == "筋子おにぎり" STDERR.print("筋子おにぎりの値段:130") oni = gets.to_i elsif type == "焼おにぎり" STDERR.print("焼おにぎりの値段:140") oni = gets.to_i elsif type == "昆布おにぎり" STDERR.print("昆布おにぎりの値段:100") oni = gets.to_i end if kosu == "1" STDERR.print("

数:1

") ko = gets.to_i elsif kosu == "2" STDERR.print("

数:2

") ko = gets.to_i elsif kosu == "3" STDERR.print("

数:3

") ko = gets.to_i elsif kosu == "4" STDERR.print("

数:4

") ko = gets.to_i elsif kosu == "5" STDERR.print("

数:5

") ko = gets.to_i end printf("

「%d」になります。

\n", total(oni,ko)) print("\n") print("\n") ------------------------------------------------------------------------------- d.実行結果 昆布おにぎりを3個買った時の実行結果 ------------------------------------------------------------------------------- pan{c109014}% ./onigiri.rb [~/public_html/advertise2/rubycgi] (offline mode: enter name=value pairs on standard input) type="昆布おにぎり" kosu="3" Content-type: text/html; charset=EUC-JP ◯お会計◯

◯会計◯


おにぎりの種類 : 昆布おにぎり

おにぎりの数 : 3

昆布おにぎりの値段:100 ./onigiri.rb:21:in `*': nil can't be coerced into Fixnum (TypeError) from ./onigiri.rb:21:in `total' from ./onigiri.rb:66 ------------------------------------------------------------------------------- e.考察 printf("

おにぎりの数 : %d

\n", kosu) のところまでは正常に実行できたが、それ以降の if文になると一度止まり、 return を押すと、 ./onigiri.rb:21:in `*': nil can't be coerced into Fixnum (TypeError) from ./onigiri.rb:21:in `total' from ./onigiri.rb:66 が表示された。 後期の第4回目の講義ノートを参考にしながら作業をしたが、STDERR.printf で入力させたものを gets.chomp.to_i で取り込んで、def文で計算し、それ を def barplot で棒グラフにしようと思った。だが、そもそもCGIスクリプ トで def文が使えるのかがよく分からなかった。 おそらく、STDERR文 か def文 が間違っている部分だと思われる。 3.基礎プログラミングのキャラクター ファイル名「char_r2_c109104.png」 掲載したアドレス「http://roy/~c109014/char_r2_c109014.png」 塗りつぶしを多く使って、顔のある樹を描いてみた。工夫した点は、3種類の 色で塗りつぶした円を何個も重ねて葉っぱを作ったこと。 ただ、ホームページにリンクを貼り、画像を表示させようとしたところ、 http://roy/~c109014/char_r2_c109014.png という画像が出て、正常に表示されなかった。一応リンク先には行けるような ので、ファイル自体に問題があるのではないかと思う。 今回のレポートは途中経過の状態で提出した。 4.感想 今回の作業時間がかなりかかってしまい、時間に追われながら取り組んでいま した。友達と協力しながらだったので、時間はかかったけれどとても助かりま した。 プログラム問題は頑張って取り組んだけれど、完成に至らなかったも のがあるので中途半端な感じのレポートになってしまいました。 今回出来なかったことを次回からでもすこしずつ解消していきたいと思います。 5.参考文献 ◯tgifの使い方 「http://www.ice.gunma-ct.ac.jp/~mame/kougi/kisoron/tgif.html」 ◯共同学習者 ・遠藤孝之 ・藤井駿 ・佐藤裕康 ・布川大地 ・渡辺力