第 6 回 目的に応じて使ってみよう レポート課題 氏名:羽田圭介 学籍番号:c1101690 語学クラス:英語2 コース(系):地域共創 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"] 配列は数える際、0、1、2、3、…というように数えていく。 alphabet[18]は、配列を先頭から数えて18番目なので、数えてみると、 " s "に当てはまる。 よって、alphabet[18] = s となる。 次に alphabet[40]は、配列を先頭から数えて40番目ということだが、 配列には 25 番目までしかないため、40 番目を数えることができない。 よって、alphabet[40] = nil となる。 2.プログラム問題 A.クラスの平均身長を求めるプラグラムを考えた。 作成したプログラム #!/usr/koeki/bin/ruby def sintyou(long) # メソットの設定 total = 0.0 for average in long total += average # 平均を求めるために合計を求める end # forに対するend total / long.length # 平均を求める end # defに対するend cm = Array.new # 新しく配列をつくる while true # 繰り返し STDERR.print("\クラス一人一人の身長を教えて下さい。(終了はCrtl+D)\n") STDERR.print("身長は小数点で入力してください。例 175cm:1.75\n") image = gets # imageをとってくる if image == nil # もしimageがなかったら break # whileからぬける end # ifに対するend cm << image.to_f # 配列にimageを少数に変換して追加していく end # whileに対するend printf("\nあなたクラスの平均身長は %3.2f cmです。\n", sintyou(cm)) 実行結果 pan{c110169}% ./def_statistic.rb [~/Ruby] クラス一人一人の身長を教えて下さい。(終了はCrtl+D) 身長は小数点で入力してください。例 175cm:1.75 1.72 クラス一人一人の身長を教えて下さい。(終了はCrtl+D) 身長は小数点で入力してください。例 175cm:1.75 1.75 クラス一人一人の身長を教えて下さい。(終了はCrtl+D) 身長は小数点で入力してください。例 175cm:1.75 1.35 クラス一人一人の身長を教えて下さい。(終了はCrtl+D) 身長は小数点で入力してください。例 175cm:1.75 1.36 クラス一人一人の身長を教えて下さい。(終了はCrtl+D) 身長は小数点で入力してください。例 175cm:1.75 ^D あなたクラスの平均身長は 1.55 cmです。 確かめ算 pan{c110169}% bc -l [~/Ruby] 1.72 + 1.75 + 1.35 + 1.36 6.18 6.18/4 1.54500000000000000000 となる。 1.54500000000000000000を四捨五入すると、1.55になるのでこのプログラムは 正しいといえる。 B.野球選手を育てるプログラムを作った。 プログラム #!/usr/koeki/bin/ruby def yakyu(ct) ct.times do print("★\t") end print("\n") sleep(0.5) end def message(name) STDERR.printf("\n%sに練習させよう。 \n", name) STDERR.print("[1]\tバッティング?\n") STDERR.print("[2]\tノック?\n") STDERR.print("[3]\tストレッチ?\n") end def player(perday,exercise) x = 4 * perday - exercise printf("%d日目\n",perday) printf("筋力増加量 %d\n", x) x end printf("野球選手を育てよう。\n") STDERR.printf("どんな名前にしますか?\n") name = gets.chomp # 文字をnameに入れる if name == "" # もしnameが""だったら"" name = "パワフル君" # もしnameが何もなかったら"パワフル君" end # ifに対するend printf("\n%sという名前にしました。\n",name) rensyu = 1 # 習得度 kinryoku = 1 # 筋力 day = 0 # 育てた日付 printf("★が増えると良い選手になるよ\n") while true yakyu(rensyu) message(name) ans = gets.chomp.to_i rensyu += day * ans kinryoku += player(day,ans) printf("習得度 rensyu=%d\n", rensyu) printf("筋力 kinryoku=%d\n", kinryoku) if rensyu > 4 break end if kinryoku > 4 break end yakyu(ans) day += 1 end yakyu(kinryoku) # 最終段階の筋力が★になる printf("%sは", name) if kinryoku > 8 print("プロ野球選手レベル") elsif kinryoku <= 5 print("高校球児レベル") else print("小学生レベル") end print("になりました\n") プログラムの実行結果 pan{c110169}% ./def_rollplaying_a.rb\ [~/Ruby] 野球選手を育てよう。 どんな名前にしますか? 志摩健太郎 志摩健太郎という名前にしました。 ★が増えると良い選手になるよ ★ 志摩健太郎に練習させよう。 [1] バッティング? [2] ノック? [3] ストレッチ? 1 0日目 筋力増加量 -1 習得度 1 筋力 0 ★ ★ 志摩健太郎に練習させよう。 [1] バッティング? [2] ノック? [3] ストレッチ? 1 1日目 筋力増加量 3 習得度 2 筋力 3 ★ ★ ★ 志摩健太郎に練習させよう。 [1] バッティング? [2] ノック? [3] ストレッチ? 1 2日目 筋力増加量 7 習得度 4 筋力 10 ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ 志摩健太郎はプロ野球選手レベルになりました. 考察 確かめ算をしてみた。 0日目 [1] 1日目 [1] 2日目 [1] なので、 pan{c110169}% bc -l [~/Ruby] 4 * 0 - 1 + 1 0 4 * 1 - 1 3 4 * 2 - 1 7 0 + 3 + 7 10 となる。 計算の答えが 10 になったので実行結果が 8 以上の「プロ野球選手 レベル」となった。 確かめ算により、実行結果の計算が正しく表示されていることが分かったので、 このプログラムは正しいといえる。 3.感想 人生ゲームが該当すると思う。 数字の出た分だけ進み、ついたマスのイベントを行うため、 メソットの考え方を使ってできるものだと思う。 4.参考文献 基礎プログラミング II 第6回 ページ