第6回 基礎プログラミング II レポート課題 氏名:木内雄 学籍番号:c1090561 語学クラス:中国語 コース(系):政策 1.筆記問題 先ずアルファベットをならべる。 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]は「s」になる。これは最初のアルファベットを0として考え て18番目に来る文字が「s」だからである。 alphabet[40]は存在しないのでnil(無し)ということになる。 2.プログラム問題 A 考えた設定:平均を出すプログラム #!/usr/koeki/bin/ruby def average(time) # scoreは数値がたくさんしまわれる配列 total = 0.0 # 割り算する予定なので浮動小数点数にしておく for best in time # for A in B で B の中の A について total += best end total / time.length #配列 score の要素数を数え、それで sum を割る end points = Array.new # からっぽの配列 points を作る i=0 # i が points の添字となる(入力された行を数える添字) while true print("あなたの今年の50m泳のタイムの平均を出します。\n") print "タイムを入力して下さい: " line = gets if line == nil break end points << line.to_f # 上か下かどちらかでよい p points end printf("\n みんなの平均は %3.1f です\n", average(points)) 実行結果 pan{c109056}% ./def_statistic.rb [~/Ruby] あなたの今年の50m泳のタイムの平均を出します。 タイムを入力して下さい: 30.4 [30.4] あなたの今年の50m泳のタイムの平均を出します。 タイムを入力して下さい: 29.9 [30.4, 29.9] あなたの今年の50m泳のタイムの平均を出します。 タイムを入力して下さい: 29.3 [30.4, 29.9, 29.3] あなたの今年の50m泳のタイムの平均を出します。 タイムを入力して下さい: 28.0 [30.4, 29.9, 29.3, 28.0] あなたの今年の50m泳のタイムの平均を出します。 タイムを入力して下さい: ^D みんなの平均は 29.4 です 確かめ算 pan{c109056}% bc -l [~/Ruby] (30.4+29.9+29.3+28.0)/4 29.40000000000000000000 考察 確かめ算よりこのプログラムが正しいことがわかった。 基にしたプログラムからの変更点 def_ary_move.rbを小数点まで入力出来るようにline.to_fにした。 B 考えた設定:子供を成長させていくプログラム。 プログラム本体 #!/usr/koeki/bin/ruby def cry(ct) ct.times do print("ばぶ\t") end print("\n") sleep(0.5) end def message(name) STDERR.printf("%sを世話しよう: \n", name) STDERR.print("[1]\tゲームをさせる\n") STDERR.print("[2]\t勉強させる\n") STDERR.print("[3]\tスポーツをさせる\n") end def fat(perday,exercise) x = 4 * perday - exercise x end printf("子供が産まれた!!\n") STDERR.printf("どんな名前にするの?") name = gets.chomp if name == "" name = "しんのすけ" end printf("%sという名前になった。\n",name) undou = 1 # 運動神経 kasikosa = 1 # 賢さ day = 1 # 育てた日付 while true cry(undou) message(name) ans = gets.chomp.to_i printf("%d日目\n",day) undou += day * ans printf("運動神経 =%d\n", undou) kasikosa += fat(day,ans) printf("賢さ =%d\n", kasikosa) if undou > 17 break end if kasikosa > 17 break end cry(ans) day += 1 end cry(kasikosa) printf("%sは", name) if kasikosa > 16 print("東大生") elsif kasikosa <= 5 print("ヘビー級世界チャンピオン") else print("キムタク") end print("になりました\n") 実行結果 賢さが16の場合 pan{c109056}% ./def_rollplaing_a.rb [~/Ruby] 子供が産まれた!! どんな名前にするの? しんのすけという名前になった。 ばぶ しんのすけを世話しよう: [1] ゲームをさせる [2] 勉強させる [3] スポーツをさせる 3 1日目 運動神経 =4 賢さ =2 ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ しんのすけを世話しよう: [1] ゲームをさせる [2] 勉強させる [3] スポーツをさせる 3 2日目 運動神経 =10 賢さ =7 ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ しんのすけを世話しよう: [1] ゲームをさせる [2] 勉強させる [3] スポーツをさせる 3 3日目 運動神経 =19 賢さ =16 ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ しんのすけはヘビー級世界チャンピオンになりました 賢さが16以下の場合ヘビー級世界チャンピオンになるように設定したのでこのプ ログラムは正しい。 賢さが19の場合 pan{c109056}% ./def_rollplaing_a.rb [~/Ruby] 子供が産まれた!! どんな名前にするの? しんのすけという名前になった。 ばぶ しんのすけを世話しよう: [1] ゲームをさせる [2] 勉強させる [3] スポーツをさせる 2 1日目 運動神経 =3 賢さ =3 ばぶ ばぶ ばぶ ばぶ ばぶ しんのすけを世話しよう: [1] ゲームをさせる [2] 勉強させる [3] スポーツをさせる 2 2日目 運動神経 =7 賢さ =9 ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ しんのすけを世話しよう: [1] ゲームをさせる [2] 勉強させる [3] スポーツをさせる 2 3日目 運動神経 =13 賢さ =19 ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶばぶ ばぶ ばぶ ばぶ ばぶ ばぶ ばぶ しんのすけは東大生になりました 賢さが18以上のときは東大生になるように設定したのでこのプログラムは正しい。 感想 今回のレポートは先生が作ったるびおっちをちょっと変えるぐらいしか出来なかっ た。しかし、自分がゲームのプログラマーになったような気がして楽しかった。 実際に恋愛ゲームにmethodが使われているような気がする。 参考文献 第6回 目的に応じて使ってみよう http://roy/~madoka/2010/r2/06/ 著者:西村先生 共同学習者 遠藤君、横山君