第 9 回 Ruby であそぼ / 広告ページの作成 氏名:齋藤允貴 学籍番号:C111069A 語学クラス:英語 2 コース:地域共創コース 1、筆記問題 A a、0x32 + 0x24 = 0x?? 16進法どうしなので数値はそのままにして、足す。 0x32 + 0x24 = 0x56 したがって、a の答えは、「0x56」である。 b、0x15 + 0x2d = 0x?? まず、16進数を10進数に直す。 「d」は、10進数で表すと、「13」になる。 次に、16進数を10進数に変換したいときは、16の倍数をかけて行く。 0x15 = 1 * 16 + 5 * 1 = 21 0x2d = 2 * 16 + 13 * 1 = 45 2つを足すと、0d21 + 0d45 = 0d66 となる。 もう一度16進数に直す。 「0d66」を「16」で割っていき、割り切った最後の商と、余りを下から上に 並べる。 66 / 16 = 4 余り 2 4 / 16 = 0 余り 4 したがって、b の答えは、「0x42」となる。 c、0xed - 0x12 = 0x?? まず、bの問題と同様、16進数を10進数に直す。 「e」は、10進数に直すと、「14」になる。 「d」は、10進数に直すと、「13」になる。 次に、16進数を10進数に変換する。 0xed = 14 * 16 + 13 * 1 = 224 + 13 = 237 0x12 = 1 * 16 + 2 * 1 = 16 + 2 = 18 2つを引くと、0d237 - 0d18 = 0d219 となる。 もう一度16進数に直す。 「0d219」を「16」で割っていき、割り切った最後の商と、余りを下から上 に並べる。 219 / 16 = 13 余り 11 13 / 16 = 0 余り 13 したがって、cの答えは、「0x1311」となるが、16進法の場合は、アルファ ベットに変換しなければならない。 「13」の場合は「d」、「11」の場合は「b」となる。 よって、cの答えは、「0xdb」となる。 B、1から31までの整数で、7で割ると余りが2になるのは、全部で3つある。 9、16、23 2、プログラム問題 a、 1、設定 今回僕が考えた設定は、前にデータを作成する際に入力した、本の題名 のリストを作成し、選んだ本の詳細を掲示するプログラムを作成した。 2、作成したプログラム 以前、基礎プログラミングの授業で作成した「regexp_stdin.rb」の検索 結果を参考に作成した。 作成したプログラムは以下の通りである。 #!/usr/koeki/bin/ruby #coding: euc-jp book = Array.new # 本の題名の変数 writer = Array.new # 作者の変数 kaisha = Array.new # 出版社の変数 price = Array.new # お値段の変数 i = 0 # 最初の数字 open("hon.dat" , "r") do |read| # 読み込み機能を使って、ファイル を読み込ませる。 while title = read.gets if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ title # (\S+) は「空白以外の文字列が1個以上並んでいるものを探 す。」 # \s+ は「空白文字が1個以上並んでいるものを探す。」 book[i] = $1 # 本の題名を代入 writer[i] = $2 # 作者を代入 kaisha[i] = $3 # 出版社を代入 price[i] = $4.to_i # 値段を代入する。to_i は、文字列を整数 にするという意味である。 i += 1 end # ifの終わり end # whileの終わり end # openの終わり #p book, writer, kaisha, price j = 0 while j < book.length printf("オススメの本 %d: %s\n", j+1, book[j]) # 本の題名を反映させる。 j += 1 end STDERR.print("気になる本の番号: ") # 番号を入力する k = gets.to_i printf("%s という本の詳しい内容は以下の通りです。\n", book[k-1]) #open("hon.dat" , "r") do |title| # while road = title.gets # if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ road sleep 3 # 3秒待って以下の項目が表示される設定。 print("< 詳細 >\n") printf("タイトル: %s \n", book[k-1]) # 本の題名を代入 print("\t \n") #1行空ける。 printf("作者: %s \n", writer[k-1]) # 作者名を代入 print("\t \n") printf("出版社: %s \n", kaisha[k-1]) # 出版社を代入 print("\t \n") printf("お値段: %s \n", price[k-1].to_i) # 値段を代入 # end # end #end 3、実行結果 pan{c111069}% ./booksearch.rb [~/public_html/adv] オススメの本 1: 紙の民 オススメの本 2: メモリーウォール オススメの本 3: 忘れられた花園 オススメの本 4: 犯罪 オススメの本 5: ホームレス中学生 オススメの本 6: 謎解きはディナーのあとで オススメの本 7: 名探偵コナン オススメの本 8: くちびるに歌を オススメの本 9: プリズム オススメの本 10: ユリゴゴロ オススメの本 11: 誰かが足りない オススメの本 12: 偉大なる、しゅららぼん オススメの本 13: ビブリア古書堂 オススメの本 14: ジェノサイド オススメの本 15: 人質の朗読会 オススメの本 16: ピエタ オススメの本 17: 舟を編む 気になる本の番号: 1 紙の民 という本の詳しい内容は以下の通りです。 < 詳細 > タイトル: 紙の民 作者: サルバドール 出版社: 白水社 お値段: 3570 pan{c111069}% ./booksearch.rb [~/public_html/adv] オススメの本 1: 紙の民 オススメの本 2: メモリーウォール オススメの本 3: 忘れられた花園 オススメの本 4: 犯罪 オススメの本 5: ホームレス中学生 オススメの本 6: 謎解きはディナーのあとで オススメの本 7: 名探偵コナン オススメの本 8: くちびるに歌を オススメの本 9: プリズム オススメの本 10: ユリゴゴロ オススメの本 11: 誰かが足りない オススメの本 12: 偉大なる、しゅららぼん オススメの本 13: ビブリア古書堂 オススメの本 14: ジェノサイド オススメの本 15: 人質の朗読会 オススメの本 16: ピエタ オススメの本 17: 舟を編む 気になる本の番号: 7 名探偵コナン という本の詳しい内容は以下の通りです。 < 詳細 > タイトル: 名探偵コナン 作者: 青山剛昌 出版社: 小学館 お値段: 1350 pan{c111069}% ./booksearch.rb [~/public_html/adv] オススメの本 1: 紙の民 オススメの本 2: メモリーウォール オススメの本 3: 忘れられた花園 オススメの本 4: 犯罪 オススメの本 5: ホームレス中学生 オススメの本 6: 謎解きはディナーのあとで オススメの本 7: 名探偵コナン オススメの本 8: くちびるに歌を オススメの本 9: プリズム オススメの本 10: ユリゴゴロ オススメの本 11: 誰かが足りない オススメの本 12: 偉大なる、しゅららぼん オススメの本 13: ビブリア古書堂 オススメの本 14: ジェノサイド オススメの本 15: 人質の朗読会 オススメの本 16: ピエタ オススメの本 17: 舟を編む 気になる本の番号: 17 舟を編む という本の詳しい内容は以下の通りです。 < 詳細 > タイトル: 舟を編む 作者: 三浦しをん 出版社: 光文社 お値段: 1575 4、考察 実際に「hon.dat」のファイルで調べてみると、 紙の民 サルバドール 白水社 3570 名探偵コナン 青山剛昌 小学館 1350 舟を編む 三浦しをん 光文社 1575 左から本の題名、作者名、出版者名、お値段を表示しているが、どの詳細 も順番どおりに反映されいているので、このプログラムは成立していると いえる。 B、ホームページに企画書と取扱説明書とプログラム本体を入力した。 企画書の内容 [企画書] 〔題名〕 ベストセラーブックサーチランド 〔企画内容〕 毎年、様々な本が発売されていますが、その中でも今話題の本をいくつか挙げ、 その本の題名、作者、出版社、お値段の順でくわしく掲載したプログラムを作成 してみました。 本を良く読む人も、そうでもない人も、きっと役に立つと思いますよ。 〔今後の課題〕 本のリストを更に増やして、利用者から「役に立った。」などと言われるように 良いプログラムを作っていきたい。 取扱説明書の内容 [取扱説明書] 〔準備するもの〕 プログラム本体とデータの2つをダウンロードし、 同じディレクトリ内に保存して下さい。 データ: booksearch.rb プログラム本体: hon.dat 〔使用するさいの準備〕 1、まず、Kterm の画面を出力します。 2、その後、「chmod +x booksearch.rb」を入力する。 例 pan{name}%chmod +x booksearch.rb これを使わないとファイルを作っても起動しなくなりますので、 必ず入力するようにしてください。 3、あとは、「./booksearch.rb」を入力すれば、開始することができます。 例 pan{name}%./booksearch.rb 〔使用方法〕 まず本のリストが表示されます。 その本のなかであなたが興味のある本の番号を入力して下さい。 気になる本の番号: 約3秒後に結果が表示されます。 ※ご意見 / ご感想※ このプログラムに関するご意見 / ご感想がありましたら、こちらまでお寄せ下さい。 c111069@e.koeki-u.ac.jp プログラム本体の内容 #!/usr/koeki/bin/ruby #coding: euc-jp book = Array.new writer = Array.new kaisha = Array.new price = Array.new i = 0 open("hon.dat" , "r") do |read| while title = read.gets if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ title book[i] = $1 writer[i] = $2 kaisha[i] = $3 price[i] = $4.to_i i += 1 end end end #p book, writer, kaisha, price j = 0 while j < book.length printf("オススメの本 %d: %s\n", j+1, book[j]) j += 1 end STDERR.print("気になる本の番号: ") k = gets.to_i printf("%s という本の詳しい内容は以下の通りです。\n", book[k-1]) #open("hon.dat" , "r") do |title| # while road = title.gets # if /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ road sleep 3 print("< 詳細 >\n") printf("タイトル: %s \n", book[k-1]) print("\t \n") printf("作者: %s \n", writer[k-1]) print("\t \n") printf("出版社: %s \n", kaisha[k-1]) print("\t \n") printf("お値段: %s \n", price[k-1].to_i) # end # end #end これらをリンクしなければならないので、「index.html」のファイルに以下 の項目を作成した。
企画書(plan.txt)
取扱説明書(00readme)
プログラム本体(booksearch.rb)
プログラムに使用したデータ(hon.dat)
このように作成したところ、指定したホームページにしっかりとリンクする ことができた。 その後、僕の場合は実用部門にエントリーするため、一番上に「実用部門」 を入力した。実用部門
内容についての概略とキャッチフレーズは、タイトルの下に入力した。最近、気になっている「本」はありませんか? きっと見つかるかも!!
そして、僕が1年生の頃に作成したメインホームページへのリンクを作成し た。実用部門
最近、気になっている「本」はありませんか? きっと見つかるかも!!
企画書(plan.txt)
取扱説明書(00readme)
プログラム本体(booksearch.rb)
プログラムに使用したデータ(hon.dat)
このプログラムは東北公益文科大学 齋藤允貴 が著作権を保有しています。
このプログラムを入手したり、実行を行ったり、改変するのは自由ですが、 取り扱った結果に対しては一切責任を負いませんので、ご了承下さい。
このプログラムに対するご意見、ご感想がありましたら、 下記のアドレスまでお願いします。