第 6 回 目的に応じて使ってみよう レポート課題 氏名:細田 洋平 学籍番号:c1101773 語学クラス:英語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"] alphabet[18] は、配列 alphabet 内を表している。 ここで間違いがちなのは、配列は 0 から始まるということで、a = 1 ではなく a = 0 から始まる。 なので、alphabet[18] = s ということになる。 今回配列の中身は40も無いので、alphabet[40] は nil となる。 2.A #!/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 "一日のゲーム時間を入力して下さい : " line = gets if line == nil break end points << line.to_i # 上か下かどちらかでよい # points[i] = line.to_i # p points # i += 1 end printf("\n 一日平均 %3.1f 時間です\n", average(points)) 2.B * プログラム * 考えた設定 : 筋トレをして、選択肢によって体型が変化する内容にした。 #!/usr/koeki/bin/ruby def kintore(kin) # 今回の関数 仮引数は kin とする kin.times do # 変数.times do で、繰り返し print("ふんっ!!!\t") end print("\n") sleep(1) end def choose(name) STDERR.print("さあ、夏に向けて筋トレをしよう!: \n") STDERR.print("[1]\t腕立て伏せ\n") STDERR.print("[2]\t腹筋\n") STDERR.print("[3]\tさぼる\n") end def dorilyoku(kaisu,sentaku) x = 4 * kaisu - sentaku printf("%d週目\n",kaisu) x end printf("筋トレをしよう!!。\n") STDERR.printf("キミの名前は?") name = gets.chomp if name == "" name = "きんにく" end printf("%sという名前になった。\n",name) ganbari = 1 # kinrilyoku = 1 # kaisuu = 0 # printf("たくさん筋トレすると、ムキムキになるよ!\n") while true kintore(ganbari) #[ふんっ!!] を頑張り度の数だけ表示 choose(name) # 選択肢の表示 ans = gets.chomp.to_i ganbari += kaisuu * ans # 頑張り度は選択した回数と答えのかけ算 kinrilyoku += dorilyoku(kaisuu,ans) # 筋力の強さはkintore関数に入力値を代入して計算 if ganbari > 4 # もし頑張り度が 4 より大きければ break # 終了 end if kinrilyoku > 4 # もし筋力が 4 より大きければ break # 終了 end kintore(ans) # [ふんっ!!] の関数に入力値を代入 kaisuu += 1 end kintore(kinrilyoku) # 最終的な筋力の強さによって変わる printf("%sさん は…………", name) if kinrilyoku > 8 print("うん! かなり筋肉ついたね!! ") elsif kinrilyoku <= 5 print("え? もやし?") else print("普通だね…\n") end * 実行結果 * 1: 全て 腕立て伏せ を行う pan{c110177}% ./def_rollplaying_a.rb [~/Ruby] 筋トレをしよう!!。 キミの名前は? きんにくという名前になった。 たくさん筋トレすると、ムキムキになるよ! ふんっ!!! さあ、夏に向けて筋トレをしよう!: [1] 腕立て伏せ [2] 腹筋 [3] さぼる 1 0週目 ふんっ!!! ふんっ!!! さあ、夏に向けて筋トレをしよう!: [1] 腕立て伏せ [2] 腹筋 [3] さぼる 1 1週目 ふんっ!!! ふんっ!!! ふんっ!!! さあ、夏に向けて筋トレをしよう!: [1] 腕立て伏せ [2] 腹筋 [3] さぼる 1 2週目 ふんっ!!! ふんっ!!! ふんっ!!! ふんっ!!! ふんっ!!!ふんっ!!! ふんっ!!! ふんっ!!! ふんっ!!! ふんっ!!! きんにくさん は…………うん! かなり筋肉ついたね!! 2 : 全て 腹筋 を行う pan{c110177}% ./def_rollplaying_a.rb [~/Ruby] 筋トレをしよう!!。 キミの名前は? きんにくという名前になった。 たくさん筋トレすると、ムキムキになるよ! ふんっ!!! さあ、夏に向けて筋トレをしよう!: [1] 腕立て伏せ [2] 腹筋 [3] さぼる 2 0週目 ふんっ!!! ふんっ!!! ふんっ!!! さあ、夏に向けて筋トレをしよう!: [1] 腕立て伏せ [2] 腹筋 [3] さぼる 2 1週目 ふんっ!!! ふんっ!!! ふんっ!!! ふんっ!!! ふんっ!!! さあ、夏に向けて筋トレをしよう!: [1] 腕立て伏せ [2] 腹筋 [3] さぼる 2 2週目 ふんっ!!! ふんっ!!! ふんっ!!! ふんっ!!! ふんっ!!!ふんっ!!! ふんっ!!! きんにくさん は…………普通だね… 3 : 全て さぼる pan{c110177}% ./def_rollplaying_a.rb [~/Ruby] 筋トレをしよう!!。 キミの名前は? きんにくという名前になった。 たくさん筋トレすると、ムキムキになるよ! ふんっ!!! さあ、夏に向けて筋トレをしよう!: [1] 腕立て伏せ [2] 腹筋 [3] さぼる 3 0週目 ふんっ!!! ふんっ!!! ふんっ!!! ふんっ!!! さあ、夏に向けて筋トレをしよう!: [1] 腕立て伏せ [2] 腹筋 [3] さぼる 3 1週目 ふんっ!!! ふんっ!!! ふんっ!!! ふんっ!!! ふんっ!!! ふんっ!!! ふんっ!!! さあ、夏に向けて筋トレをしよう!: [1] 腕立て伏せ [2] 腹筋 [3] さぼる 3 2週目 ふんっ!!! ふんっ!!! ふんっ!!! ふんっ!!! きんにくさん は…………え? もやし? * 考察 * 一見正常に機能しているように見えるプログラムだが、正確なところ未だ分から ないので、今回の公式 (4 * kaisu - answer) で確かめ算を行う 1 : 全て 腕立て伏せ を行う場合 pan{c110177}% bc -l [~/Ruby] 4 * 0 - 1 -1 4 * 1 -1 3 4 * 2 - 1 7 -1 + 3 + 7 9 最終的に数値が 8 以上となれば良い内容と一致している 2 : 全て 腹筋 を行う場合 pan{c110177}% bc -l [~/Ruby] 4 * 0 - 2 -2 4 * 1 -2 2 4 * 2 -2 6 -2 + 2 + 6 6 最終的に数値が 5 以上 8 未満 となれば良い内容と一致している 3 : 全て さぼる 場合 pan{c110177}% bc -l [~/Ruby] 4 * 0 - 3 -3 4 * 1 - 3 1 4 * 2 - 3 5 -3 + 1 + 5 3 最終的に数値が 5 未満となれば良い内容と一致している それぞれ一致したので、このプログラムは正しいことになる * 感想 * 携帯のサイトでよくある姓名占いがそうだと思った。 苗字と名前を入力して、それによって占いの結果が変化するというのは、メソッ ドの考え方をベースにしているのではないだろうか。 * 参考文献 * 基礎プログラミング II 第 6 回 (目的に応じて使ってみよう) 「映画の星づけランキング」 http://roy/~madoka/2011/r2/06/r2_06_08_theme_07_aryavg.html 基礎プログラミング II 第 6 回 (目的に応じて使ってみよう) 「るびおっち」 http://roy/~madoka/2011/r2/06/r2_06_11_theme_09_rubiocci.html 基礎プログラミング II 第 6 回 (目的に応じて使ってみよう) 「while 文で入力するとき」 講義ノート目次 http://roy/~madoka/2011/r2/06/r2_06_10_theme_08_while.html