第 6 回 目的に応じて使ってみよう レポート課題 氏名:吉田 栞 学籍番号:c1101997 語学クラス:英語クラス6 コース(系):政策マネジメントコース 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] を配列に当てはめます。 しかし、配列の中には 25 番目までしか入っていないため、40 番目を数えること ができません。 よって、alphabet[40] = nil (無し) となります。 2.プログラム問題 A (1)考えた設定 テスト平均点を求めるプログラムです。 また、その結果によってコメントを表示させました。 (2)プログラム #!/usr/koeki/bin/ruby def average(score) # scoreは入力した数値が入る配列 sum = 0.0 # 割り算する予定なので浮動小数点数にしておく for stars in score # for A in B で B の中の A について sum += stars # printf("%d 人目 途中合計 sum=%d\n", score.length + 1, sum) end sum / score.length #配列 score に入っているデータの数で sum の数値を割る end points = Array.new # からっぽの配列 points を作る # i=0 # i が points の添字となる(入力された行を数える添字) while true STDERR.print "テストの点数を入力して下さい(終了するときはctrl-d): " line = gets if line == nil # 止めたいときは ctrl - d break end points << line.to_i end printf("\n 平均点は %3.1f 点です\n", average(points)) sleep 1 if average(points) >= 90 # もし90点以上だったら print("「よく頑張りました!」\n") elsif average(points) >= 80 # もし80点以上だったら print("「あともう一歩」\n") elsif average(points) >=70 # もし70点以上だったら print("「その調子!」\n") else #それ以下だったら print("「もう少し頑張ろう」\n") end (3)もとにしたプログラム def_ary_movie.rb を参考にしました。 (4)実行結果 例1 pan{c110199}% ./def_statistic.rb [~/Ruby] テストの点数を入力して下さい(終了するときはctrl-d): 20 テストの点数を入力して下さい(終了するときはctrl-d): 30 テストの点数を入力して下さい(終了するときはctrl-d): 40 テストの点数を入力して下さい(終了するときはctrl-d): 50 テストの点数を入力して下さい(終了するときはctrl-d): ^D 平均点は 35.0 点です 「もう少し頑張ろう」 例2 pan{c110199}% ./def_statistic.rb [~/Ruby] テストの点数を入力して下さい(終了するときはctrl-d): 60 テストの点数を入力して下さい(終了するときはctrl-d): 70 テストの点数を入力して下さい(終了するときはctrl-d): 80 テストの点数を入力して下さい(終了するときはctrl-d): 90 テストの点数を入力して下さい(終了するときはctrl-d): ^D 平均点は 75.0 点です 「その調子!」 (5)考察 実行結果が合っているかbc-lで確かめ算を行った。 例1 pan{YOSHIDA Shiori}% cd Ruby [~] pan{c110199}% bc -l [~/Ruby] (20+30+40+50)/4 35.00000000000000000000 例2 pan{c110199}% bc -l [~/Ruby] (60+70+80+90)/4 75.00000000000000000000 となり、答えが合っていることからプログラムが正しいといえる。 B (1)考えた設定 金魚を育てるプログラムです (2)プログラム #!/usr/koeki/bin/ruby def ikusei(name) # メソッドの設定 STDERR.printf("\n%sのお世話をしましょう: \n", name) STDERR.print("[1]\t餌をあげる\n") STDERR.print("[2]\t話しかける\n") STDERR.print("[3]\t何もしない\n") end def big(day,exercise) # メソッドの設定 esa = 3 * day - exercise printf("%d日目\n",day) esa.to_i # 数値を返す end printf("金魚を飼うことになりました。\n") STDERR.printf("名前はどうしますか?") name = gets.chomp if name == "" # もしnameが""だったら"" name = "キンちゃん" # もしcolorが何もなかったら"キンちゃん" end printf("%sという名前になりました。\n",name) happy = 0 # しあわせ度 weight = 0 # 体重 day = 0 # 育てた日 while true ikusei(name) answer = gets.to_i # 答えを求める happy += day * answer weight += big(day,answer) if happy > 4 # もし、しあわせ度が4より大きければ break end if weight > 4 # もし、体重が4より大きければ break end day += 1 end printf("%sは", name) if weight > 7 print("金魚レッド") elsif weight > 5 print("金魚ブルー") else print("金魚イエロー") end print("になりました\n") (3)もとにしたプログラム def_rubiocci.rb を参考にしました。 (4)実行結果 例1 papan{c110199}% ./def_rollplaying_a.rb [~/Ruby] 金魚を飼うことになりました。 名前はどうしますか?kin kinという名前になりました。 kinのお世話をしましょう: [1] 餌をあげる [2] 話しかける [3] 何もしない 2 0日目 kinのお世話をしましょう: [1] 餌をあげる [2] 話しかける [3] 何もしない 2 1日目 kinのお世話をしましょう: [1] 餌をあげる [2] 話しかける [3] 何もしない 3 2日目 kinは金魚イエローになりました 例2 pan{c110199}% ./def_rollplaying_a.rb [~/Ruby] 金魚を飼うことになりました。 名前はどうしますか?kin kinという名前になりました。 kinのお世話をしましょう: [1] 餌をあげる [2] 話しかける [3] 何もしない 1 0日目 kinのお世話をしましょう: [1] 餌をあげる [2] 話しかける [3] 何もしない 1 1日目 kinのお世話をしましょう: [1] 餌をあげる [2] 話しかける [3] 何もしない 1 2日目 kinは金魚ブルーになりました (5)考察 実行結果が合っているかbc-lで確かめ算を行った。 例1 pan{c110199}% bc -l [~/Ruby] 3*0-2 -2 3*1-2 1 3*2-3 3 -2+1+3 2 計算の答えは、2 となる。 よって、実行結果は「金魚イエロー」で合っているといえる。 例2 pan{c110199}% bc -l [~/Ruby] 3*0-1 -1 3*1-1 2 3*2-1 5 -1+2+5 6 計算の答えは、6 となる。 よって、実行結果は「金魚ブルー」で合っているといえる。 3.感想 method の考え方でカードゲームが出来ると思います。 今回の課題はプログラムを作るのも難しかったですが設定を考えるのも 大変でした。しかし、授業中に使ったプログラムがだいぶ参考になり、 少しずつ理解していくことが出来ました。 4.参考文献 西村 まどか 基礎プログラミング II 第 6 回 「目的に応じて使ってみよう」 http://roy/~madoka/2011/r2/06/