第 6 回 目的に応じて使ってみよう レポート課題 氏名: 松本 洋輔 学籍番号: C111133A 語学クラス: 英語1 コース: 環境サイエンス 1.筆記問題 A. 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"] alphabet[22]は[ ]内の22番目の文字を示している。 アルファベットの22番目は「v」だが、配列の始めは0から数えるので、 22番目の文字は「w」となる。 alphabet[-1]は[ ]内の-1番目の文字を示している。 しかし、数値を見ただけでは-1が何を示すのか分からないので、 プログラムを作り試してみた。 *作成したプログラム #!/usr/koeki/bin/ruby # coding: euc-jp 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"] #アルファベットの配列 print("22番目の文字は:") printf("%s\n", alphabet[22]) #配列から22番目を取り出す print("-1番目の文字は:") printf("%s\n", alphabet[-1]) #配列から-1番目を取り出す print("-2番目の文字は:") printf("%s\n", alphabet[-2]) #配列から-2番目を取り出す print("-3番目の文字は:") printf("%s\n", alphabet[-3]) #配列から-3番目を取り出す *実行結果 pan{c111133}% ./alpabet.rb [~] 22番目の文字は:w -1番目の文字は:z -2番目の文字は:y -3番目の文字は:x *考察 最初は22番目と-1番目だけを確認した。結果、22番目は上記の通り「w」となり、 -1番目は「z」と表示された。このことから-1番目とは後から1番目の文字ではな いかと思い、-2番目と-3番目も確認した。すると-2番目は「y」-3番目は「x」と なった。 この結果からalphabet[-1]は[ ]内の後から1番目の文字「z」を示している。 B. *平均の求め方 まず平均を出したい数値を全て足す。その後合計を要素の数で割る。 例(bc -l で計算) pan{c111133}% bc -l [~] 10+20+30+40+50 150 150/5 30.00000000000000000000 10、20、30、40、50の平均は 30 *標準偏差の求め方 標準偏差を求めるにはまず、分散(各要素と平均の差の2乗の値を全部足したも のを要素の数で割る)し、その結果から平方根を出したものが標準偏差。 例(bc -l で計算) pan{c111133}% bc -l [~] (10-30)^2+(20-30)^2+(30-30)^2+(40-30)^2+(50-30)^2 1000 1000/5 200.00000000000000000000 sqrt(200) 14.14213562373095048801 quit 10、20、30、40、50の標準偏差は 14.14213562373095048801 2.プログラム問題 A. *設定(def_statistic.rb) method を使用し、配列を取りこんで、平均を計算するプログラムを作成する。 *作成したプログラム #!/usr/koeki/bin/ruby # coding: euc-jp def average(total) #total は数値を入れる配列 sum =0.0 #割り算する予定なので浮動小数点数にしておく for old in total #totalの内容を old とする。 sum += old #oldを足してsumとする。 end sum / total.length #sumから要素数を割る。 end ave = Array.new print("平均年齢を計算します。\n") print("数値入力後「C+d」を押して下さい。\n\n") while true #操作を止めるまで繰り返す。 STDERR.print("年齢を入力して下さい。:") age = gets #数値をageに代入 if age == nil break #繰り返しから抜ける。 end ave << age.to_i #aveに入力した値をageから取り込む。 end printf("平均は %3.1f歳です。\n",average(ave)) *元のプログラムからの変更点 授業で作成した def_ary_movie.rb を参考に平均年齢を計算するプログラムを 作成した。それに合わせて関数名、変数名を変更した。 *実行結果 pan{c111133}% [~/Ruby] 平均年齢を計算します。 数値入力後「C+d」を押して下さい。 年齢を入力して下さい。:23 年齢を入力して下さい。:45 年齢を入力して下さい。:17 年齢を入力して下さい。:85 年齢を入力して下さい。:43 年齢を入力して下さい。:25 年齢を入力して下さい。:68 年齢を入力して下さい。:平均は 43.7歳です。 *考察 bc -lで確かめ算 pan{c111133}% bc -l [~/Ruby] 23+45+17+85+43+25+68 306 306/7 43.71428571428571428571 quit 小数点第1位以上の値が実行結果と一致したためこのプログラムは正しく作動し たと言える。 B-b.(def_rollplaying_b.rb) *設定 るびおっち的ゲームに自作の絵やアニメーションが飛び出るようにしたプログ ラムを作成する。 *作成したプログラム #!/usr/koeki/bin/ruby # coding: euc-jp def sammon(star) star.times do #method sammon の繰り返しを指示 print("☆\t") end sleep 0.5 end def message(name) #選択肢の method print("\n") print("\n--------------------------------------------------------\n") printf("触媒を選んで%sを召喚しよう。\n",name) STDERR.print("1:ミラネルウォーター\n") STDERR.print("2:大容量バッテリー\n") STDERR.print("3:ぬか臭い漬け物石\n") STDERR.print("4:賢者の石?\n") end print("\n") print("精霊召喚プログラム\n\n") sleep 1 print("4つの素材を触媒にして精霊を呼び出そう。\n\n") STDERR.print("呼び出す精霊に名前を付けよう。:") name = gets.chomp if name == "" #もし何も入力されなければ name = "精霊1号" #name は「精霊1号」になる。 end printf("名前は %s です。\n",name) mag = 0 #パラメーター mag を0から代入して行く spi = 0 #パラメーター spi を0から代入して行く sozai = 1 #パラメーター sozai を1から代入して行く while true #操作を止めるまで繰り返し sammon(mag) #mag の数値分「★」を表示 message(name) #選択肢を表示 ans = gets.chomp.to_i #選択肢の答えの入力を求める sammon(ans) #選択肢の数値を ans に入れる printf("\n") printf("<%dつ目の素材>\n",sozai) mag *= ans #mag に ans をかける printf("魔力 = %d\n", mag) spi += ans #spi に ans を足す printf("霊力 = %d\n", spi) sum = mag + spi #sum = mag と spi の合計値 if sozai == 4 #sozai が4になったら break #whileを抜ける end sozai += 1 #1 ずつ加算する mag += 1 end sammon(sum) #sum の数値分「★」を表示 sleep 1 print("\n") if sum > 75 #合計値が75より上なら print("\n\e[33m召喚成功!!\t\e[m") sleep 1 system('animate -delay 50 http://roy.e.koeki-u.ac.jp/~c111133/rpg/sara.gif &') #アニメーションの表示 print("\e[35mサラマンダー\e[m") printf("の%sが召喚された!\n", name) sleep 1 print("画像は「q」で消えます。\n") quit = gets.chomp if quit == "q" #「q」が押されたら system("pkill -U `whoami` animate") #アニメーション終了 end elsif sum >= 60 #合計値が65以上なら print("\n\e[33m召喚成功!!\t\e[m") sleep 1 system('animate -delay 50 http://roy.e.koeki-u.ac.jp/~c111133/rpg/shil.gif &') print("\e[32mシルフ\e[m") printf("の%sが召喚された!\n", name) print("画像は「q」で消えます。\n") quit = gets.chomp if quit == "q" system("pkill -U `whoami` animate") end elsif sum >= 55 ##合計値が55以上なら print("\n\e[33m召喚成功!!\t\e[m") sleep 1 system('animate -delay 50 http://roy.e.koeki-u.ac.jp/~c111133/rpg/udne.gif &') print("\e[36mウンディーネ\e[m") printf("の%sが召喚された!\n", name) print("画像は「q」で消えます。\n") quit = gets.chomp if quit == "q" system("pkill -U `whoami` animate") end else #上記の数値以外なら print("\n\e[33m召喚成功!!\t\e[m") sleep 1 system('animate -delay 50 http://roy.e.koeki-u.ac.jp/~c111133/rpg/norm.gif &') print("\e[33mノー厶\e[m") printf("の%sが召喚された!\n", name) print("画像は「q」で消えます。\n") quit = gets.chomp if quit == "q" system("pkill -U `whoami` animate") end end print("\n") *元のプログラムからの変更点 def_rubiocci.rb を参考に選択した素材の種類と順番によって個となる種類の 精霊を呼び出すプログラムを作成した。また結果に応じてアニメーションが表 示されるようにした。 *実行結果 1.サラマンダーを召喚した場合 pan{c111133}% ./def_rollplaying_b.rb [~/Ruby] 精霊召喚プログラム 4つの素材を触媒にして精霊を呼び出そう。 呼び出す精霊に名前を付けよう。: 名前は 精霊1号 です。 -------------------------------------------------------- 触媒を選んで精霊1号を召喚しよう。 1:ミラネルウォーター 2:大容量バッテリー 3:ぬか臭い漬け物石 4:賢者の石? 2 ☆ ☆ <1つ目の素材> 魔力 = 0 霊力 = 2 ☆ -------------------------------------------------------- 触媒を選んで精霊1号を召喚しよう。 1:ミラネルウォーター 2:大容量バッテリー 3:ぬか臭い漬け物石 4:賢者の石? 3 ☆ ☆ ☆ <2つ目の素材> 魔力 = 3 霊力 = 5 ☆ ☆ ☆ ☆ -------------------------------------------------------- 触媒を選んで精霊1号を召喚しよう。 1:ミラネルウォーター 2:大容量バッテリー 3:ぬか臭い漬け物石 4:賢者の石? 4 ☆ ☆ ☆ ☆ <3つ目の素材> 魔力 = 16 霊力 = 9 ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ -------------------------------------------------------- 触媒を選んで精霊1号を召喚しよう。 1:ミラネルウォーター 2:大容量バッテリー 3:ぬか臭い漬け物石 4:賢者の石? 4 ☆ ☆ ☆ ☆ <4つ目の素材> 魔力 = 68 霊力 = 13 ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ 召喚成功!! サラマンダーの精霊1号が召喚された! 画像は「q」で消えます。 q 2.ウンディーネを召喚した場合 pan{c111133}% ./def_rollplaying_b.rb [~/Ruby] 精霊召喚プログラム 4つの素材を触媒にして精霊を呼び出そう。 呼び出す精霊に名前を付けよう。:精霊2号 名前は 精霊2号 です。 -------------------------------------------------------- 触媒を選んで精霊2号を召喚しよう。 1:ミラネルウォーター 2:大容量バッテリー 3:ぬか臭い漬け物石 4:賢者の石? 3 ☆ ☆ ☆ <1つ目の素材> 魔力 = 0 霊力 = 3 ☆ -------------------------------------------------------- 触媒を選んで精霊2号を召喚しよう。 1:ミラネルウォーター 2:大容量バッテリー 3:ぬか臭い漬け物石 4:賢者の石? 4 ☆ ☆ ☆ ☆ <2つ目の素材> 魔力 = 4 霊力 = 7 ☆ ☆ ☆ ☆ ☆ -------------------------------------------------------- 触媒を選んで精霊2号を召喚しよう。 1:ミラネルウォーター 2:大容量バッテリー 3:ぬか臭い漬け物石 4:賢者の石? 4 ☆ ☆ ☆ ☆ <3つ目の素材> 魔力 = 20 霊力 = 11 ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ -------------------------------------------------------- 触媒を選んで精霊2号を召喚しよう。 1:ミラネルウォーター 2:大容量バッテリー 3:ぬか臭い漬け物石 4:賢者の石? 2 ☆ ☆ <4つ目の素材> 魔力 = 42 霊力 = 13 ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ 召喚成功!! ウンディーネの精霊2号が召喚された! 画像は「q」で消えます。 q 3.ノー厶を召喚した場合 pan{MATSUMOTO Yosuke}% ./def_rollplaying_b.rb [~/Ruby] 精霊召喚プログラム 4つの素材を触媒にして精霊を呼び出そう。 呼び出す精霊に名前を付けよう。:精霊3号 名前は 精霊3号 です。 -------------------------------------------------------- 触媒を選んで精霊3号を召喚しよう。 1:ミラネルウォーター 2:大容量バッテリー 3:ぬか臭い漬け物石 4:賢者の石? 3 ☆ ☆ ☆ <1つ目の素材> 魔力 = 0 霊力 = 3 ☆ -------------------------------------------------------- 触媒を選んで精霊3号を召喚しよう。 1:ミラネルウォーター 2:大容量バッテリー 3:ぬか臭い漬け物石 4:賢者の石? 4 ☆ ☆ ☆ ☆ <2つ目の素材> 魔力 = 4 霊力 = 7 ☆ ☆ ☆ ☆ ☆ -------------------------------------------------------- 触媒を選んで精霊3号を召喚しよう。 1:ミラネルウォーター 2:大容量バッテリー 3:ぬか臭い漬け物石 4:賢者の石? 2 ☆ ☆ <3つ目の素材> 魔力 = 10 霊力 = 9 ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ -------------------------------------------------------- 触媒を選んで精霊3号を召喚しよう。 1:ミラネルウォーター 2:大容量バッテリー 3:ぬか臭い漬け物石 4:賢者の石? 2 ☆ ☆ <4つ目の素材> 魔力 = 22 霊力 = 11 ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ 召喚成功!! ノー厶の精霊3号が召喚された! 画像は「q」で消えます。 4.シルフを召喚した場合 pan{c111133}% ./def_rollplaying_b.rb [~/Ruby] 精霊召喚プログラム 4つの素材を触媒にして精霊を呼び出そう。 呼び出す精霊に名前を付けよう。:精霊4号 名前は 精霊4号 です。 -------------------------------------------------------- 触媒を選んで精霊4号を召喚しよう。 1:ミラネルウォーター 2:大容量バッテリー 3:ぬか臭い漬け物石 4:賢者の石? 4 ☆ ☆ ☆ ☆ <1つ目の素材> 魔力 = 0 霊力 = 4 ☆ -------------------------------------------------------- 触媒を選んで精霊4号を召喚しよう。 1:ミラネルウォーター 2:大容量バッテリー 3:ぬか臭い漬け物石 4:賢者の石? 3 ☆ ☆ ☆ <2つ目の素材> 魔力 = 3 霊力 = 7 ☆ ☆ ☆ ☆ -------------------------------------------------------- 触媒を選んで精霊4号を召喚しよう。 1:ミラネルウォーター 2:大容量バッテリー 3:ぬか臭い漬け物石 4:賢者の石? 4 ☆ ☆ ☆ ☆ <3つ目の素材> 魔力 = 16 霊力 = 11 ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ --------------------------------------------------------触媒を選んで精霊4号を召喚しよう。 1:ミラネルウォーター 2:大容量バッテリー 3:ぬか臭い漬け物石 4:賢者の石? 3 ☆ ☆ ☆ <2つ目の素材> 魔力 = 3 霊力 = 7 ☆ ☆ ☆ ☆ -------------------------------------------------------- 触媒を選んで精霊4号を召喚しよう。 1:ミラネルウォーター 2:大容量バッテリー 3:ぬか臭い漬け物石 4:賢者の石? 4 ☆ ☆ ☆ ☆ <3つ目の素材> 魔力 = 16 霊力 = 11 ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ -------------------------------------------------------- 触媒を選んで精霊4号を召喚しよう。 1:ミラネルウォーター 2:大容量バッテリー 3:ぬか臭い漬け物石 4:賢者の石? 3 ☆ ☆ ☆ <4つ目の素材> 魔力 = 51 霊力 = 14 ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆☆ ☆ ☆ ☆ ☆ 召喚成功!! シルフの精霊4号が召喚された! 画像は「q」で消えます。 q *考察 魔力と霊力の合計が設定した数値の範囲に入ることでそれぞれに対応する精霊が 呼び出された。また★の数も合計と一致し、qキーでアニメーションの終了も正 しく作動したため、このプログラムは正しく作動したと言える。 感想 選択した数字の組み合わせで強弱や勝敗が変化するトランプゲーム(ポーカーや ブラックジャックなど)が思い浮かんだ。 今までよく理解できていなかったが、今回の課題で自作method の使い方が だいぶ分かってきたので良かったと思う。 参考文献 インターネット&PC120%活用研究 演算子(算術演算子、関係演算子) http://kasayan86.web.fc2.com/perl/perl5.htm 制作者 Kasayan or Ojisan 基礎プログラミング II 第 6 回 (目的に応じて使ってみよう) 「るびおっち」 http://roy/~madoka/2012/r2/06/r2_06_11_theme_09_rubiocci.html 制作者 西村 まどか 基礎プログラミング II 第 6 回 (目的に応じて使ってみよう) 「映画の星づけ ランキング」 http://roy/~madoka/2012/r2/06/r2_06_08_theme_07_aryavg.html 制作者 西村 まどか 基礎プログラミング II 第 6 回 (目的に応じて使ってみよう) 「method の中に method」 http://roy/~madoka/2012/r2/06/r2_06_09_appendix_01_methodinmethod.html 制作者 西村 まどか 基礎プログラミング II 第 6 回 「目的に応じて使ってみよう」 レポート講評 http://roy/~madoka/2011/r2/06/rpt/crt.html