第6回のレポート課題です。 添付し忘れたので再送します。 氏名: 時田佳穂 学籍番号: C1101603 語学クラス:中国語3 コース(系): 環境サイエンス 1-A. 配列変数のインデックスは0から始まるので、 alphabet[18]はアルファベットの19番目のsとなる。 alphabet[40]はアルファベットの41番目となるが、 アルファベットは27文字しかないので何も入っておらず、 nilを返される。 2-A. ○作成したプログラム・説明 #!/usr/koeki/bin/ruby # 平均を計算する関数を呼び出し def average(month) sum = 0 for m in month sum += m # month の中身を1つずつmに代入してsumに足すのを繰り返し end ave = sum / month.length # 合計をmonth の長さで割る(=平均) ave # aveの値を返す end print"電気代の統計データを計算します。\n" print"月ごとの電気代を数字のみで入力して下さい。\n \n" STDERR.print"何月から始めますか?数字で入力して下さい: " qmonth = gets.to_i heikin = [] i = 0 while true STDERR.printf("%d月の電気代(終了はCtrl-d): ",qmonth) answer = gets if answer == nil break # 終了(Ctrl-d)を選んだときに繰り返しから抜け出す end heikin[i] = answer.to_i i += 1 qmonth += 1 if qmonth == 13 qmonth = 1 # 1を足して月が13になったら1月に戻る end end #p heikin.length printf("\n平均: %5.2f 円\n",average(heikin)) # 関数を呼び出して平均を出す ○実行結果 pan{TOKITA Kaho}% ./def_statistic.rb [~/Ruby] 電気代の統計データを計算します。 月ごとの電気代を数字のみで入力して下さい。 何月から始めますか?数字で入力して下さい: 7 7月の電気代(終了はCtrl-d): 2341 8月の電気代(終了はCtrl-d): 1242 9月の電気代(終了はCtrl-d): 5161 10月の電気代(終了はCtrl-d): 1515 11月の電気代(終了はCtrl-d): 4151 12月の電気代(終了はCtrl-d): 2512 1月の電気代(終了はCtrl-d): 2315 2月の電気代(終了はCtrl-d): 3412 3月の電気代(終了はCtrl-d): 3322 4月の電気代(終了はCtrl-d): ^D 平均: 2885.00 円 ○考察 上の実行結果では、4月のところにCtrl-dの^Dが入っているが、 .lengthで配列heikinの長さを出すと --------------------------------------------------------------- pan{c110160}% ./def_statistic.rb [~/Ruby] 電気代の統計データを計算します。 月ごとの電気代を数字のみで入力して下さい。 何月から始めますか?数字で入力して下さい: 7 7月の電気代(終了はCtrl-d): 2341 8月の電気代(終了はCtrl-d): 1242 9月の電気代(終了はCtrl-d): 5161 10月の電気代(終了はCtrl-d): 1515 11月の電気代(終了はCtrl-d): 4151 12月の電気代(終了はCtrl-d): 2512 1月の電気代(終了はCtrl-d): 2315 2月の電気代(終了はCtrl-d): 3412 3月の電気代(終了はCtrl-d): 3322 4月の電気代(終了はCtrl-d): 9D # ↑ 平均: 2885.00 円 ---------------------------------------------------------------- となるのと、 ---------------------------------------------------------------- pan{c110160}% bc -l [~/Ruby] 2341 + 1242 + 5161 + 1515 + 4151 + 2512 + 2315 + 3412 + 3311 25960 25960 / 9 2884.44444444444444444444 quit ---------------------------------------------------------------- から、Ctrl-d分は入っていないことが分かる。 2-B. ○作成したプログラム・説明 #!/usr/koeki/bin/ruby # 運動の選択肢を出す def sport(name) STDERR.printf(" %s に運動をさせましょう。\n",name) STDERR.print"何をしますか?\n" STDERR.print" [1]ランニング [2]バスケ [3]テニス : " end # 勉強の選択肢を出す def study(name) STDERR.printf(" %s に勉強をさせましょう。\n",name) STDERR.print"何をしますか?\n" STDERR.print" [1]社会 [2]数学 [3]理科 : " end # 世話の選択肢を出す def care(name) STDERR.printf(" %s を世話しましょう。\n",name) STDERR.print"何をしますか?\n" STDERR.print" [1]食事 [2]お風呂 [3]毛繕い : " end print"きのこの山を拾った。\n" print"こいつを三日間で立派なたけのこの里にしよう!\n" STDERR.print"[1]はい [2]いいえ : " yes = gets.chomp.to_i if yes == 2 print"あなたはきのこ派なんですね。\n" exit # いいえ の場合プログラムを終了 else end print"\nさっそくきのこの山を育てましょう。\n" STDERR.print"まず名前をつけましょう。(デフォルト: たけの子)\n" name = gets.chomp if name == "" # 空欄の場合名前を自動で決める name = "たけの子" end day = 1 # 日にち ka = 1 # かっこよさ ata = 1 # 頭のよさ ki = 1 # きれいさ while true sleep(1) printf("\n\n%d日目\n",day) sport(name) # 関数sportを呼び出し undou = gets.chomp.to_i if undou == 1 ka += 1 ata += -3 ki += 1 elsif undou == 2 ka += 2 ata += -2 ki += -1 elsif undou == 3 ka += 3 ata += -1 ki += 2 end study(name) # 関数studyを呼び出し benkyou = gets.chomp.to_i if benkyou == 1 ka += 2 ata += 1 ki += -3 elsif benkyou == 2 ka += 1 ata += 2 ki += -2 elsif benkyou == 3 ka += -1 ata += 3 ki += -1 end care(name) # 関数careを呼び出し sewa = gets.chomp.to_i if sewa == 1 ka += -3 ata += 2 ki += 1 elsif sewa == 2 ka += -2 ata += 1 ki += 2 elsif sewa == 3 ka += -1 ata += -1 ki += 3 end if day == 3 break # 3日目になったら繰り返しを抜ける end day += 1 end # p ka # p ata # p ki if ka >= 10 || ata >= 10 || ki >= 10 # パラメータのどれかが10以上になったらここ printf("\n [かっこよさ: %d 頭のよさ: %d きれいさ: %d] \n",ka,ata,ki) printf("%sは、立派なたけのこの里になりました!\n",name) elsif ka >= 3 || ata >= 3 || ki >= 3 # ifの条件でない時、パラメータのどれかが3以上ならここ # (実質 3 <= パラメータ < 10 ) printf("\n [かっこよさ: %d 頭のよさ: %d きれいさ: %d] \n",ka,ata,ki) printf("%sは、しいたけの森になりました。\n",name) else printf("\n [かっこよさ: %d 頭のよさ: %d きれいさ: %d] \n",ka,ata,ki) printf("%sは、きのこの山のままでした...\n",name) end ○実行結果 1...1番良い結果 pan{c110160}% ./def_rollplaying_b.rb [~/Ruby] きのこの山を拾った。 こいつを三日間で立派なたけのこの里にしよう! [1]はい [2]いいえ : 1 さっそくきのこの山を育てましょう。 まず名前をつけましょう。(デフォルト: たけの子) 1日目 たけの子 に運動をさせましょう。 何をしますか? [1]ランニング [2]バスケ [3]テニス : 3 たけの子 に勉強をさせましょう。 何をしますか? [1]社会 [2]数学 [3]理科 : 3 たけの子 を世話しましょう。 何をしますか? [1]食事 [2]お風呂 [3]毛繕い : 2 2日目 たけの子 に運動をさせましょう。 何をしますか? [1]ランニング [2]バスケ [3]テニス : 3 たけの子 に勉強をさせましょう。 何をしますか? [1]社会 [2]数学 [3]理科 : 3 たけの子 を世話しましょう。 何をしますか? [1]食事 [2]お風呂 [3]毛繕い : 2 3日目 たけの子 に運動をさせましょう。 何をしますか? [1]ランニング [2]バスケ [3]テニス : 3 たけの子 に勉強をさせましょう。 何をしますか? [1]社会 [2]数学 [3]理科 : 3 たけの子 を世話しましょう。 何をしますか? [1]食事 [2]お風呂 [3]毛繕い : 2 [かっこよさ: 1 頭のよさ: 10 きれいさ: 10] たけの子は、立派なたけのこの里になりました! 2...真ん中の結果 pan{c110160}% ./def_rollplaying_b.rb [~/Ruby] きのこの山を拾った。 こいつを三日間で立派なたけのこの里にしよう! [1]はい [2]いいえ : 1 さっそくきのこの山を育てましょう。 まず名前をつけましょう。(デフォルト: たけの子) 1日目 たけの子 に運動をさせましょう。 何をしますか? [1]ランニング [2]バスケ [3]テニス : 1 たけの子 に勉強をさせましょう。 何をしますか? [1]社会 [2]数学 [3]理科 : 1 たけの子 を世話しましょう。 何をしますか? [1]食事 [2]お風呂 [3]毛繕い : 2 2日目 たけの子 に運動をさせましょう。 何をしますか? [1]ランニング [2]バスケ [3]テニス : 2 たけの子 に勉強をさせましょう。 何をしますか? [1]社会 [2]数学 [3]理科 : 2 たけの子 を世話しましょう。 何をしますか? [1]食事 [2]お風呂 [3]毛繕い : 3 3日目 たけの子 に運動をさせましょう。 何をしますか? [1]ランニング [2]バスケ [3]テニス : 3 たけの子 に勉強をさせましょう。 何をしますか? [1]社会 [2]数学 [3]理科 : 3 たけの子 を世話しましょう。 何をしますか? [1]食事 [2]お風呂 [3]毛繕い : 1 [かっこよさ: 3 頭のよさ: 3 きれいさ: 3] たけの子は、しいたけの森になりました。 3...1番悪い結果 pan{c110160}% ./def_rollplaying_b.rb [~/Ruby] きのこの山を拾った。 こいつを三日間で立派なたけのこの里にしよう! [1]はい [2]いいえ : 1 さっそくきのこの山を育てましょう。 まず名前をつけましょう。(デフォルト: たけの子) 1日目 たけの子 に運動をさせましょう。 何をしますか? [1]ランニング [2]バスケ [3]テニス : 1 たけの子 に勉強をさせましょう。 何をしますか? [1]社会 [2]数学 [3]理科 : 1 たけの子 を世話しましょう。 何をしますか? [1]食事 [2]お風呂 [3]毛繕い : 1 2日目 たけの子 に運動をさせましょう。 何をしますか? [1]ランニング [2]バスケ [3]テニス : 1 たけの子 に勉強をさせましょう。 何をしますか? [1]社会 [2]数学 [3]理科 : 1 たけの子 を世話しましょう。 何をしますか? [1]食事 [2]お風呂 [3]毛繕い : 2 3日目 たけの子 に運動をさせましょう。 何をしますか? [1]ランニング [2]バスケ [3]テニス : 1 たけの子 に勉強をさせましょう。 何をしますか? [1]社会 [2]数学 [3]理科 : 1 たけの子 を世話しましょう。 何をしますか? [1]食事 [2]お風呂 [3]毛繕い : 1 [かっこよさ: 2 頭のよさ: 0 きれいさ: -1] たけの子は、きのこの山のままでした... ○考察 1...はじめに「いいえ」を選んだ場合 pan{c110160}% ./def_rollplaying_b.rb [~/Ruby] きのこの山を拾った。 こいつを三日間で立派なたけのこの里にしよう! [1]はい [2]いいえ : 2 あなたはきのこ派なんですね。 2...名前を指定した場合 pan{c110160}% ./def_rollplaying_b.rb [~/Ruby] きのこの山を拾った。 こいつを三日間で立派なたけのこの里にしよう! [1]はい [2]いいえ : 1 さっそくきのこの山を育てましょう。 まず名前をつけましょう。(デフォルト: たけの子) にょっき 1日目 にょっき に運動をさせましょう。 何をしますか? [1]ランニング [2]バスケ [3]テニス : 3 にょっき に勉強をさせましょう。 何をしますか? [1]社会 [2]数学 [3]理科 : 2 にょっき を世話しましょう。 何をしますか? [1]食事 [2]お風呂 [3]毛繕い : 1 2日目 にょっき に運動をさせましょう。 何をしますか? [1]ランニング [2]バスケ [3]テニス : 3 にょっき に勉強をさせましょう。 何をしますか? [1]社会 [2]数学 [3]理科 : 2 にょっき を世話しましょう。 何をしますか? [1]食事 [2]お風呂 [3]毛繕い : 1 3日目 にょっき に運動をさせましょう。 何をしますか? [1]ランニング [2]バスケ [3]テニス : 3 にょっき に勉強をさせましょう。 何をしますか? [1]社会 [2]数学 [3]理科 : 2 にょっき を世話しましょう。 何をしますか? [1]食事 [2]お風呂 [3]毛繕い : 1 [かっこよさ: 4 頭のよさ: 10 きれいさ: 4] にょっきは、立派なたけのこの里になりました! 3.感想 今回の課題のように、何度も繰り返す事が多いシミュレーションゲームや、 RPGの戦闘や買い物などではmethodを使えると思いました。 4. 参考: ◯2011年度 基礎プログラミングII 第2回 メソッド メソッドの利用例 (広瀬雄二) http://roy/~yuuji/2011/pf2/02/use-method.html 共同学習者: 赤石亜希子 片山知奈美 佐藤千香 継枝沙希 長谷川成美