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のプログラムはエラーとの闘いで、組めないときはとても大変でしたが 組めて実行出来た時は爽快でした。 今でもプログラムを組んでみるとエラーとの闘いですが、其れも色々と試行錯誤 をして直して行く大切さ、レポートや提出するもの等の書方などプログラム以外 にも学ぶところが多い講義でした。 今までのプログラムの、講義はとても面白く奥の深い物で、自分はこれからもプ ログラムに対しても理解を深めて行きたいと思います。