第 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)

著作権について

このプログラムは東北公益文科大学 齋藤允貴 が著作権を保有しています。

このプログラムを入手したり、実行を行ったり、改変するのは自由ですが、 取り扱った結果に対しては一切責任を負いませんので、ご了承下さい。

このプログラムに対するご意見、ご感想がありましたら、 下記のアドレスまでお願いします。

c111069@e.koeki-u.ac.jp

トップへ

これでホームページを起動するか調べてみたところ、しっかりと掲載するこ とができたのでよかった。 C、 広告ホームページのURL http://roy/~c111069/adv/ 僕は、「実用部門」にエントリーします。 3、感想 今回は、Ruby でいろんなことをやったが、まさか Ruby でじゃんけんや、 かかった時間を調べる機能を作成することができるとは思わなかった。 今回のレポート課題で、先輩の作品を参考に作成してみたが、どれもすばら しいものばかりで、どういう設定にしようか迷ってしまった。でも、しっか りと作成することができたので良かった。 参考文献 http://roy/~madoka/2012/r1/07/r1_07_10_theme_08_fileread.html 西村まどか 第7回 基礎プログラミングI 正規表現と Ruby 言語でのプログラミング 「データを読み込むようにするには」 http://roy/~madoka/2012/r1/07/r1_07_12_theme_09_candidate.html 西村まどか 第7回 基礎プログラミングI 正規表現と Ruby 言語でのプログラミング 「候補駅を選べるようにするには」 http://roy/~madoka/2012/r1/07/r1_07_13_theme_10_selection.html 西村まどか 第7回 基礎プログラミングI 正規表現と Ruby 言語でのプログラミング 「選択する部分を作るには」 http://roy/~madoka/2012/r1/04/r1_04_16_appendix_06_exercise.html 西村まどか 第4回 基礎プログラミングI プログラミングの方法 「進数計算練習」 http://roy/~madoka/2012/r1/04/r1_04_21_appendix_07_answer.html 西村まどか 第4回 基礎プログラミングI プログラミングの方法 「進数計算解答」 http://roy/~madoka/2012/r1/09/r1_09_14_theme_10_termsofcondition.html 西村まどか 第9回 基礎プログラミングI Ruby であそぼ / 広告ページの作成 「ソフトウェアの公開時の条項」 http://roy/~madoka/2012/r1/09/r1_09_16_theme_11_sales.html 西村まどか 第9回 基礎プログラミングI Ruby であそぼ / 広告ページの作成 「広告において主張しておくべきこと」 http://roy/~madoka/2010/r1/09/rpt/crt.html 西村まどか 第9回 基礎プログラミングI (2010年版) Ruby であそぼ / 広告ページの作成 「第9回 レポート講評」