11 月 28 日 第 9 回レポート 「CGI スクリプトを作ってみよう」
c106XXXX
XXXXXXXX
中国語XX
社会系
1 A
推測
配列 momo=[0,9,7] には 0 9 7 が、配列 komomo=[3,4,5] には 3 4 5 が各々収
納されています。配列 momo と 配列 komomoを合わせて配列 (momo+komomo)を作
ります。それは 配列 (momo+komomo)= [0,9,7,3,4,5] の様に適当に並べられた
数になると考えます。その適当に並んだ配列に sort を付けると、配列の中の数
字は小さい順に並べられ (momo+komomo).sort = [0,3,4,5,7,9] となり、さらに
reverse を付けることで 小さい順が大きい順に変更され
(momo+komomo).sort.reverse = [9,7,5,4,3,0] に成ると考えました
証明
以下の様な簡単なプログラムを組んで証明をしてみました。
#!/usr/koeki/bin/ruby
momo=[0,9,7]
komomo=[3,4,5]
p momo
p komomo
p momo+komomo
p momo += komomo
p momo.sort
p momo.sort.reverse
./momo+komomo.rb [~/Ruby]
[0, 9, 7]
[3, 4, 5]
[0, 9, 7, 3, 4, 5]
[0, 3, 4, 5, 7, 9]
[9, 7, 5, 4, 3, 0]
処理の方法を分かりやすくするために、一つ一つのコードに p 文を付けて行な
いました。
推測の様に処理をされているので良かったのですが、
(momo+komomo).sort.reverse の様に入力すると .sort.reverse が行なわれず、
唯配列を足しただけの (momo+komomo).sort.reverse = [0, 9, 7, 3, 4, 5] と
表示されてしまったので、その部分を momo+komomo = momo += komomoであるこ
とを確かめ、 (momo+komomo).sort.reverse ではなく p momo += komomo
p momo.sort.reverse として検証しました。
B
推察
alphabet = ["a""b"......"z"] の様に入力されていた場合は、前問の様に
momo=[0,9,7] = 0 9 7 と成っているので、今回の場合も alphabet =
["a""b"......"z"] = a b ......z と入力されていると推測されます。
Hash配列やArray.new等の配列を参考にすると 0 から始まっていることから、
a = 0 b = 1.......z = 25 となると考えます
このことから考えると alphabet[15] = p では無いかと考えられます。
それと同じ様に考えると28番目の文字は入力されていないので、エラーとして
nilと表示されると考えました。
証明
アルファベット26文字を配列として入力したプログラムを、作成して実際に確か
めてみました。
#!/usr/koeki/bin/ruby
alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
p alphabet[0]
p alphabet[1]
p alphabet[2]
p alphabet[3]
p alphabet[4]
p alphabet[5]
p alphabet[6]
p alphabet[7]
p alphabet[8]
p alphabet[9]
p alphabet[10]
p alphabet[11]
p alphabet[12]
p alphabet[13]
p alphabet[14]
p alphabet[15]
p alphabet[16]
p alphabet[17]
p alphabet[18]
p alphabet[19]
p alphabet[20]
p alphabet[21]
p alphabet[22]
p alphabet[23]
p alphabet[24]
p alphabet[25]
p alphabet[26]
p alphabet[27]
p alphabet[28]
p alphabet[15]
p alphabet[28]
./alphabet.rb [~/Ruby]
"a"
"b"
"c"
"d"
"e"
"f"
"g"
"h"
"i"
"j"
"k"
"l"
"m"
"n"
"o"
"p"
"q"
"r"
"s"
"t"
"u"
"v"
"w"
"x"
"y"
"z"
nil
nil
nil
"p"
nil
実行結果を見ると alphabet[15] = p で、 alphabet[25] = nil となり推察で
考えた様に alphabet[0] 〜 alphabet[25] 迄がアルファベットの列びどうりで
、それ以降の入力されていない alphabet[26] 〜 alphabet[28] は nil と表示
されます。
2
CGI を使ってテキストフィールド、ドロップダウンメニュー、ラジオボックスの、
各々を名前を入力して頂くスペース、と質問の問に答えて頂く部分を作りたいと
思いました。
HTML 本体
cgi占いの館
多分占いの館
CGI Ruby プログラム
#!/usr/bin/env ruby
require 'cgi' #cgi を使う
cgi = CGI.new("html4") #CGI を HTML 文章に使う
printf("Content-type: text/html; charset=EUC-JP\n\n") #日本語コードの定義
print("\n")
print("\n")
print("今日の運勢\n")
print("\n")
print("
")
print("")
happy = 0
namae = cgi["nickname"]
kibun = cgi["tyousi"]
taberu = cgi["eat"]
ao = cgi["bure"]
aka = cgi["red"]
kiiro = cgi["yellow"]
kuro = cgi["black"]
print("")
if (namae == "")
print(" 名無し さんの運勢は……\n")
else
printf(" %s さんの運勢は……\n",namae)
end
print("
")
print("")
if /選択して下さい/e =~ kibun
print("今日の気分を入力しわすれたアナタ\n")
happy +=1
print("")
if /カリー/e =~ taberu
print("ラッキーアイテム:カリー\n")
happy +=4
elsif /アイス/e =~ taberu
print("今日はアイスと食べるともっと良くなるかも\n")
happy +=2
elsif /寿司/e =~ taberu
print("ラッキーアイテム:腕時計\n")
happy -=1
end
print("
")
elsif /最高〜♪/e =~ kibun
print("当たるも八卦、当たらぬも八卦\n")
happy +=3
print("")
if /カリー/e =~ taberu
print("ラッキーアイテム:ポケットティッシュ\n")
elsif /アイス/e =~ taberu
print("アイスを食べて元気が出てくるかも\n")
happy +=2
elsif /寿司/e =~ taberu
print("ラッキーアイテム:おまもり\n")
happy -=3
end
print("
")
elsif/普通/e =~ kibun
print("占いは何処まで行っても占いです\n")
happy +=1
print("")
if /カリー/e =~ taberu
print("ラッキーアイテム:パソコン\n")
happy +=4
elsif /アイス/e =~ taberu
print("アイスを買ってもらえるかも?\n")
happy -=1
elsif /寿司/e =~ taberu
print("ラッキーアイテム:コミック\n")
happy +=2
end
print("
")
elsif/最悪 ; ;/e =~ kibun
print("占いに左右されないで!!\n")
happy -=3
print("")
if /カリー/e =~ taberu
print("カレーと何かと縁があるかも…\n")
happy +=3
elsif /アイス/e =~ taberu
print("ラッキーアイテム:お酒\n")
happy +=8
elsif /寿司/e =~ taberu
print("ラッキーアイテム:携帯?\n")
happy +=6
print("
")
end
end
print("
")
print("")
if happy == 3
print("中吉\n")
elsif happy == 5
print("大吉\n")
elsif happy == 0
print("大凶")
end
print("
")
print("ブラウザの戻るボタン等で戻って下さい。")
print("\n")
print("\n")
テキストフィールド、ドロップダウンメニュー、ラジオボックスの表示と作動は
問題なく作動しました。テキストフィールドに名前を、入力するときに入力されて
いないときは 名無し さん と表示させるようにしました。
最初 nil を使って作ろうとしたのですが、表示されなかったので "" として入
力しました。
それに今回は、if や elsif 文の時に今までのRubyの書方が違い if /選択して下
さい/e =~ kibun の様に書きました。
body{background-color: gray;}
")の部分は情報プログラミング||の水曜二時間目の加藤さんに教えて頂きました。
其れ以外にも、どうしても動作しなかった時には友人に見て頂いて一緒に考えて
頂きました。
今回はRubyのプログラムの中に、 HTML の様に線やリンクを貼ることが出来なかっ
たのが残念ですが、其れ以外の動作は問題なかったので良かったと思います。
今回作成した CGI の占いページ
http://roy/~c106103/rubycgi/uranai.html
ホームのページ
http://roy.e.koeki-u.ac.jp/~c106103/
参考
基礎プログラミング I
「アイディアの整頓 / ロゴ作成」
ロゴの作成
http://roy/~madoka/2007/r1/11/11-02-gimp.html
ロゴの作成
http://roy/~madoka/2007/r1/11/11-03-script-fu.html
基礎プログラミング II
「第 09 回: CGI スクリプトを作ってみよう」
入力 form の部品
http://roy/~madoka/2007/r2/10/cgi/example_cgi.html
利用者にデータを入力させる部品
http://roy/~madoka/2007/r2/10/10-04-datainputpart.html
CGI スクリプトの解説
http://roy/~madoka/2007/r2/10/10-06-actionprogram.html
試作品のエラーを探せ
http://roy/~madoka/2007/r2/10/10-09a-error.html
「第 10 回: Ruby で CGI スクリプト」
結果を分岐させるには
http://roy/~madoka/2007/r2/10/10-10-branch.html
Hash 配列で表示しよう
http://roy/~madoka/2007/r2/10/10-23-textarea.html
4
Rubyの感想
今日までRubyのプログラムを講義で組んで来ましたが、未だに分からない事が多
いです。しかし、最初の頃よりは理解が進んで分からないところが分かるように
なって来ました、前期では此処までのプログラムが組めるようになるとは思って
もいませんでした。
そのRubyのプログラムはエラーとの闘いで、組めないときはとても大変でしたが
組めて実行出来た時は爽快でした。
今でもプログラムを組んでみるとエラーとの闘いですが、其れも色々と試行錯誤
をして直して行く大切さ、レポートや提出するもの等の書方などプログラム以外
にも学ぶところが多い講義でした。
今までのプログラムの、講義はとても面白く奥の深い物で、自分はこれからもプ
ログラムに対しても理解を深めて行きたいと思います。