第 6 回 目的に応じて使ってみよう レポート課題 氏名:渡辺 龍 学籍番号:c1102057 語学クラス:中国語 3クラス コース(系):地域共創コース 1.筆記問題 A alphabet[18]とalphabet[40]の答えはどうなるのか? 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"] まず配列とは0からはじまる。つまり a = 0 b =1 … z = 25 となる。 上記に則ったやり方をすると、alphabet[18] = s となる。 次にalphabet[40]だが、アルファベットは z = 25 が最後で後は存在しない。 よって、alphabet[40]は配列に存在しないため、nilとなる。 2.プログラム問題 A. def_statistic.rb a.考えた設定(A) 一日の運転時間を入力してもらい、小数点単位まで計算し一日の平均運転時間を 求めるプログラム。 b.作成したプログラム(A) #!/usr/koeki/bin/ruby def day(zikan) # メソッドの設定。 sum = 0.0 # sum は合計。0.0は時間を求めるもの。 for heikin in zikan # 変数 heikin に zikan を代入。 sum += heikin # 平均を求めるために合計を計算。 end # for を閉じるため。 sum / zikan.length # 平均を求めるための式。 end # def を閉じるため。 unten = Array.new # 新たな配列を作成。 while true # 繰り返し作業。 STDERR.print("\n1日に運転する時間を入力して下さい。(終了はCrtl+D)\n") STDERR.print("時間は小数点で入力してください。\n") car = gets # car を引用。 if car.to_f < 0 # 条件指定。car が 0 より小さい場合。小数点単位のため to_f。 print"0.0時間以上の数字を入力して下さい。再入力をお願いします。\n" redo # その回繰り返しを無効。 elsif car == nil # 条件指定。car に何も入力しないで終了する場合。 break # 繰り返しから抜ける。 end # if elsif を閉じる。 unten << car.to_f # 配列に car を代入する。その際 car を小数に変換。 end # While に対する end。 printf("\n1日に運転する時間は %3.2f 時間です。\n", day(unten)) # 3.2f なのは小数点を表示するため。 c.実行結果(A) 今回はふたつ実行結果を載せることにした。 a.普通の計算 pan{c110205}% ./def_statistic.rb [~/Ruby] 1日に運転する時間を入力して下さい。(終了はCrtl+D) 時間は小数点で入力してください。 1.11 1日に運転する時間を入力して下さい。(終了はCrtl+D) 時間は小数点で入力してください。 2.22 1日に運転する時間を入力して下さい。(終了はCrtl+D) 時間は小数点で入力してください。 3.33 1日に運転する時間を入力して下さい。(終了はCrtl+D) 時間は小数点で入力してください。 ^D 1日に運転する時間は 2.22 時間です。 b.もし負の数字を入力した場合。 pan{c110205}% ./def_statistic.rb [~/Ruby] 1日に運転する時間を入力して下さい。(終了はCrtl+D) 時間は小数点で入力してください。 1 1日に運転する時間を入力して下さい。(終了はCrtl+D) 時間は小数点で入力してください。 2 1日に運転する時間を入力して下さい。(終了はCrtl+D) 時間は小数点で入力してください。 3 1日に運転する時間を入力して下さい。(終了はCrtl+D) 時間は小数点で入力してください。 -6 0.0時間以上の数字を入力して下さい。再入力をお願いします。 1日に運転する時間を入力して下さい。(終了はCrtl+D) 時間は小数点で入力してください。 ^D 1日に運転する時間は 2.00 時間です。 d.考察(A) 計算は正確か?また負の数が入力された回はきちんと無効になっているか? 確かめ算 pan{c110205}% bc -l [~/Ruby] (1.11+2.22+3.33)/3 2.22000000000000000000 quit 計算は正確に出来ていた。 pan{c110205}% bc -l [~/Ruby] (1+2+3)/3 2.00000000000000000000 quit もし負の数が無効されていなければ、/4 という形になるため redo は正確に実 行出来ていることが言える。 B.def_rollplaying_a.rb a.考えた設定(B) ユーザーに数字を選択してもらい、おいしい牛丼を作ってもらうプログラム。 b.作成したプログラム(B) #!/usr/koeki/bin/ruby def gyu(hokahoka) # メソッドの設定。 hokahoka.times do # 繰り返し作業。 print("ほかほか\t") end # do を閉じる。 print("\n") sleep(1) # ()内の数字に比例して表示速度が変わる。 end # def を閉じる。 def sagyou(name) # メソッドの設定。変数 name。 STDERR.print("%sを作ろう!!: \n", name) STDERR.print("[1]\tトッピングをかける?\n") STDERR.print("[2]\tゆっくり煮る?\n") STDERR.print("[3]\t脂を抜く?\n") end # def を閉じる。 def umasa(kaisuu,move) # メソッドの設定。変数 kaisuu move。 x = 4 * kaisuu - move # 手入れ度を求めるための式 printf("%d回目\n",kaisuu) printf("手入れ度%d\n", x) x end # def を閉じる。 printf("牛丼を作ることにした。\n") STDERR.printf("名前は何にする?") name = gets.chomp # 入力を求める。入力されたものは name に引用される。 if name == "" # 条件指定。何も入力されていない場合。 name = "牛丼" # 入力されない場合の名前。 end # if を閉じる。 printf("%sという名前になった。\n",name) teinei = 1 # 丁寧度の初期値。 ryou = 1 # 量の初期値。 teire = 0 # 手入れの初期値。 while true # 繰り返し作業 gyu(teinei) # 変数 teinei に gyu メソッドを呼び出す。 sagyou(name) # 変数 name に sagyou メソッドを呼び出す。 kotae = gets.chomp.to_i # get に入力されたものを整数に変換し kotae に代入する。to_i は整数を表す。 teinei += teire * kotae # 丁寧度の答えを出すための式。 printf("丁寧度 teinei=%d\n", teinei) ryou += umasa(teire,kotae) # 量の答えを出すための式。 printf("量 ryou=%d\n", ryou) if teinei > 4 # 条件指定。teinei が 4 以上になった場合。 break # While の繰り返しから抜ける。 end # if を閉じる。 if ryou > 4 # 条件指定。ryou が 4 以上になった場合。 break # While の繰り返しから抜ける。 end # if を閉じる。 gyu(kotae) # 変数 kotae に gyu メソッドを呼び出す。 teire += 1 # 日が変わると変数 teire に 1 がプラスされる。 end # While を閉じるもの。 gyu(ryou) # 変数 ryou に gyu メソッドを呼び出す。 printf("%sは", name) if teinei > 8 # 条件指定。teinei が 8 以上の場合。 print("最高においしい牛丼に") elsif ryou <= 5 # 条件指定。ryou が 5 以下の場合。if の次の条件指定のため elsif を使用。 print("ただの牛丼") else # 条件指定。上記二つ以外の条件に合致しない場合表示される。 # elsif の次の条件指定のため elseを使用。 print("そこそこおいしい牛丼") end # if elsif else を閉じるもの。 print("になりました\n") c.実行結果(B) pan{c110205}% ./def_rollplaying_a.rb [~/Ruby] 牛丼を作ることにした。 名前は何にする? 牛丼という名前になった。 ほかほか %sを作ろう!!: 牛丼[1] トッピングをかける? [2] ゆっくり煮る? [3] 脂を抜く? 1 丁寧度 teinei=1 0回目 手入れ度-1 量 ryou=0 ほかほか ほかほか %sを作ろう!!: 牛丼[1] トッピングをかける? [2] ゆっくり煮る? [3] 脂を抜く? 2 丁寧度 teinei=3 1回目 手入れ度2 量 ryou=2 ほかほか ほかほか ほかほか ほかほか ほかほか %sを作ろう!!: 牛丼[1] トッピングをかける? [2] ゆっくり煮る? [3] 脂を抜く? 3 丁寧度 teinei=9 2回目 手入れ度5 量 ryou=7 ほかほか ほかほか ほかほか ほかほか ほかほかほかほか ほかほか 牛丼は最高においしい牛丼にになりました d.考察(B) プログラムを実行する際にエラー表示などないか?また名前が入力されていない 場合きちんと"牛丼"となっているか? pan{c110205}% ./def_rollplaying_a.rb [~/Ruby] 牛丼を作ることにした。 名前は何にする? 牛丼という名前になった。 ほかほか %sを作ろう!!: 牛丼[1] トッピングをかける? [2] ゆっくり煮る? [3] 脂を抜く? 1 丁寧度 teinei=1 0回目 手入れ度-1 量 ryou=0 ほかほか ほかほか %sを作ろう!!: 牛丼[1] トッピングをかける? [2] ゆっくり煮る? [3] 脂を抜く? 2 丁寧度 teinei=3 1回目 手入れ度2 量 ryou=2 ほかほか ほかほか ほかほか ほかほか ほかほか %sを作ろう!!: 牛丼[1] トッピングをかける? [2] ゆっくり煮る? [3] 脂を抜く? 3 丁寧度 teinei=9 2回目 手入れ度5 量 ryou=7 ほかほか ほかほか ほかほか ほかほか ほかほかほかほか ほかほか 牛丼は最高においしい牛丼にになりました プログラムは正確に実行でき、名前も牛丼になっていた。 3.感想 人生ゲームが当てはまると考える。 決まった数字の中ルーレットをまわす。でた数字の分マスを進む。 様々なイベントがあるため、メソッドを使用しやすいと考える。 4.参考文献 と 協力者 参考文献 西村まどか先生 講義ノート 基礎プログラミング II 第 6 回 「目的に応じて使ってみよう」 http://roy/~madoka/2011/r2/06/ 協力者 樋口 貴士くん 松田 大輝くん 4.添付