5 月 16 日のレポートについて 語学クラス:XXXX語選択XX 系:XXXX系 学籍番号:c106XXXX 氏名:XXXXXXXX 1. 相手の名前を知るには、 「 printf("%c%c%c%c%cちゃんはかわいいなあ\n",0x45,0x6d,0x69,0x6c,0x79) 」 上記の後半部分を読む必要がある。よってASCII コード表を参考にすると、 0x45 → E 0x6d → m 0x69 → i 0x6c → l 0x79 → y となるので、相手の名前は「Emily」であることがわかる。 参考HP ・西村先生のホームページ 〜ASCIIコード表〜 http://roy.e.koeki-u.ac.jp/~madoka/2007/r1/05/05-03-ascii.html 2.A. a)考えた設定 オススメのバンドを紹介するプログラム。 b)作成したプログラム #!/usr/koeki/bin/ruby band = Array.new # 配列を与えるメソッド n = 0 # カウントをする変数 band[0] = ["dustbox","13 Brilliant Leaves","Try My Luck","ハイトーンボーカル"] band[1] = ["WRONG SCALE","TRIANGLE TO SQUARE","PHOTO","美メロ"] band[2] = ["OVER ARM THROW","SOUNDRIP","MUSIC","メロディックパンク"] band[3] = ["HAWAIIAN6","BEGINNINGS","I BELIEVE","哀愁ロック"] band[4] = ["NOB","colors","This is a song for you","哀愁系メロコア"] print("オススメのバンドを紹介します。\n") while n < 5 # nが5を超えるまで繰り返す print("\n紹介されたい?(yes or no):") syoukai = gets.chomp if syoukai == "no" print("残念です。\n") break elsif syoukai == "yes" printf("\nNo.%d : %s \n 『 %s 』 というCDがオススメ。特に %s という曲がヤバいです!\n%s 好きは必聴!!\n\n",n+1 ,band[n][0],band[n][1],band[n][2],band[n][3],band[n][4]) printf("No.%dバンドがいい?(yes or no):",n+1) yorn = gets.chomp if yorn == "no" print("では次のバンド。\n") n +=1 next elsif yorn == "yes" printf("\nあなたは No.%d のバンドを選択。センスが良いですね!\n\n",n+1) break else print("yes or no です。\n\n") break end else print("yes or no です。\n\n") break end end print("終わりです。\n") c)もとにしたプログラムからの変更点 授業で作成したtrain.rbを元にした。変更点が多数あるのでプログラムの細かく 説明していくことにする。 6〜10行目 配列するデータ 16行目 print("紹介されたい??(yes or no) : ") この先の処理をするか選択させる。 18〜22行目 noと答えた場合break。yesと答えた場合、6〜10行目のデータを出力する。 24行目 printf("No.%dバンドがいい?(yes or no):",n+1) 処理を続けるかどうか選択させる。 28行目〜43行目 noと答えた場合続ける。yesと答えた場合どのバンドを選択したか表示しbreak。 1行ずつデータを読み込み、読み込むたびにyesかnoで聞いてくる。 yesとno以外のものを入力した場合break。 d)プログラムを実行した結果画面 irsv{c106179}% ./form_a.rb [~/Ruby] オススメのバンドを紹介します。 紹介されたい?(yes or no):yes No.1 : dustbox 『 13 Brilliant Leaves 』 というCDがオススメ。特に Try My Luck という曲がヤバいです! ハイトーンボーカル 好きは必聴!! No.1バンドがいい?(yes or no):no では次のバンド。 紹介されたい?(yes or no):yes No.2 : WRONG SCALE 『 TRIANGLE TO SQUARE 』 というCDがオススメ。特に PHOTO という曲がヤバいです! 美メロ 好きは必聴!! No.2バンドがいい?(yes or no):no では次のバンド。 紹介されたい?(yes or no):yes No.3 : OVER ARM THROW 『 SOUNDRIP 』 というCDがオススメ。特に MUSIC という曲がヤバいです! メロディックパンク 好きは必聴!! No.3バンドがいい?(yes or no):yes あなたは No.3 のバンドを選択。センスが良いですね! 終わりです。 e)導き出された結果の考察 if文を使うことで複雑なプログラムにできたと思う。 f)参考HP ・西村先生のホームページ 〜検索案内プログラム〜 http://roy.e.koeki-u.ac.jp/~madoka/2007/r1/05/05-12-form2.html B. a)考えた設定 Aと同様。 b)作成したプログラム #!/usr/koeki/bin/ruby fopen = open("word.dat") band = Array.new # 配列を与えるメソッド n = 0 # カウントをする変数 print("オススメのバンドを紹介します。\n") while band_data = fopen.gets print("\n紹介されたい?(yes or no):") syoukai = gets.chomp if syoukai == "no" print("残念です。\n") break elsif syoukai == "yes" /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ band_data band[0] = $1 band[1] = $2 band[2] = $3 band[3] = $4 n += 1 else print("yes or no です。\n\n") break end printf("\nNo.%d : %s \n 『 %s 』 というCDがオススメ。特に %s という曲がヤバいです!\n%s 好きは必聴!!\n\n",n ,band[0] ,band[1] ,band[2] ,band[3]) printf(" No.%d のバンドがいい?(yes or no) : ",n) yorn = gets.chomp if yorn == "no" print("では次のバンド。\n") elsif yorn == "yes" printf("\nあなたは No.%d のバンドを選択。センスが良いですね!\n",n) break else print("yes or no です。\n\n") break end end print("終わりです。\n") fopen.close c)もとにしたプログラムからの変更点 Aと同様train.rbを参考にした。Aで説明した部分は省略して説明する。 3行目 fopen = open("word.dat") openメソッド。word.datを開く。 9行目 while band_data = fopen.gets band_dataにgetsで データを一行取り込んで代入。 45行目 fopen.close closeメソッド。3行目で開いたword.datを閉じる。 d)プログラムを実行した結果画面 irsv{c106179}% ./form_b.rb [~/Ruby] オススメのバンドを紹介します。 紹介されたい?(yes or no):yes No.1 : dustbox 『 13Brilliant_Leaves 』 というCDがオススメ。特に Try_My_Luck という曲がヤバいです! ハイトーンボーカル 好きは必聴!! No.1 のバンドがいい?(yes or no) : no では次のバンド。 紹介されたい?(yes or no):yes No.2 : WRONG_SCALE 『 TRIANGLE_TO_SQUAR 』 というCDがオススメ。特に PHOTO という曲がヤバいです! 美メロ 好きは必聴!! No.2 のバンドがいい?(yes or no) : no では次のバンド。 紹介されたい?(yes or no):yes No.3 : OVER_ARM_THROW 『 SOUNDRIP 』 というCDがオススメ。特に MUSIC という曲がヤバいです! メロディックパンク 好きは必聴!! No.3 のバンドがいい?(yes or no) : no では次のバンド。 紹介されたい?(yes or no):yes No.4 : HAWAIIAN6 『 BEGINNINGS 』 というCDがオススメ。特に I_BELIEVE という曲がヤバいです! 哀愁ロック 好きは必聴!! No.4 のバンドがいい?(yes or no) : yes あなたは No.4 のバンドを選択。センスが良いですね! 終わりです。 e)導き出された結果の考察 配列するデータを書くときにスペースを空けると、一つの要素として判断するの か要素がずれて表示されたので「_」を入れることで回避した。 f)参考文献 ・「たのしいRuby」高橋征義・後藤裕蔵著  第15章 IOクラス openメソッド・closeメソッド p271 3.感想 授業ではデータとプログラムを別にする場合、実行時にデータを指定しなければ ならなかったが、今回はプログラム内でデータを読み込むことができるopenメソッ ドとcloseメソッドを使用した。 講義で習っていないことでも自分で教科書を見てできそうなことは、プログラム に組み込んで工夫を加えていきたいと思う。 ----Next_Part(Sat_May_19_00_03_39_2007_387)-- Content-Type: Text/Plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="form_b.rb" #!/usr/koeki/bin/ruby fopen = open("word.dat") band = Array.new # 配列を与えるメソッド n = 0 # カウントをする変数 print("オススメのバンドを紹介します。\n") while band_data = fopen.gets print("\n紹介されたい?(yes or no):") syoukai = gets.chomp if syoukai == "no" print("残念です。\n") break elsif syoukai == "yes" /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/ =~ band_data band[0] = $1 band[1] = $2 band[2] = $3 band[3] = $4 n += 1 else print("yes or no です。\n\n") break end printf("\nNo.%d : %s \n 『 %s 』 というCDがオススメ。特に %s という曲がヤバいです!\n%s 好きは必聴!!\n\n",n ,band[0] ,band[1] ,band[2] ,band[3]) printf(" No.%d のバンドがいい?(yes or no) : ",n) yorn = gets.chomp if yorn == "no" print("では次のバンド。\n") elsif yorn == "yes" printf("\nあなたは No.%d のバンドを選択。センスが良いですね!\n",n) break else print("yes or no です。\n\n") break end end print("終わりです。\n") fopen.close ----Next_Part(Sat_May_19_00_03_39_2007_387)-- Content-Type: Application/Ms-Tnef Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="word.dat" ZHVzdGJveAkJMTNCcmlsbGlhbnRfTGVhdmVzICAgIFRyeV9NeV9MdWNrICAgIKXPpaSlyKG8pfOl 3KG8paul6wpXUk9OR19TQ0FMRSAgIAlUUklBTkdMRV9UT19TUVVBUiAgICAgUEhPVE8gICAgCSAg ICAgyP6l4aXtCk9WRVJfQVJNX1RIUk9XICBTT1VORFJJUAkgICAgICBNVVNJQyAgICAJICAgICCl 4aXtpcelo6XDpa+l0aXzpa8KSEFXQUlJQU42ICAJQkVHSU5OSU5HUyAJICAgICAgSV9CRUxJRVZF CSAgICAgsKW9paXtpcOlrwpOT0IJCWNvbG9ycwkJICAgICAgVGhpc19pc19hX3NvbmdfZm9yX3lv dQmwpb2lt8+l4aXtpbOlogo= ----Next_Part(Sat_May_19_00_03_39_2007_387)-- Content-Type: Text/Plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="form_a.rb" #!/usr/koeki/bin/ruby band = Array.new # 配列を与えるメソッド n = 0 # カウントをする変数 band[0] = ["dustbox","13 Brilliant Leaves","Try My Luck","ハイトーンボーカル"] band[1] = ["WRONG SCALE","TRIANGLE TO SQUARE","PHOTO","美メロ"] band[2] = ["OVER ARM THROW","SOUNDRIP","MUSIC","メロディックパンク"] band[3] = ["HAWAIIAN6","BEGINNINGS","I BELIEVE","哀愁ロック"] band[4] = ["NOB","colors","This is a song for you","哀愁系メロコア"] print("オススメのバンドを紹介します。\n") while n < 5 # nが5を超えるまで繰り返す print("\n紹介されたい?(yes or no):") syoukai = gets.chomp if syoukai == "no" print("残念です。\n") break elsif syoukai == "yes" printf("\nNo.%d : %s \n 『 %s 』 というCDがオススメ。特に %s という曲がヤバいです!\n%s 好きは必聴!!\n\n",n+1 ,band[n][0],band[n][1],band[n][2],band[n][3],band[n][4]) printf("No.%dバンドがいい?(yes or no):",n+1) yorn = gets.chomp if yorn == "no" print("では次のバンド。\n") n +=1 next elsif yorn == "yes" printf("\nあなたは No.%d のバンドを選択。センスが良いですね!\n\n",n+1) break else print("yes or no です。\n\n") break end else print("yes or no です。\n\n") break end end print("終わりです。\n") ----Next_Part(Sat_May_19_00_03_39_2007_387)----