1、何番まで実施したか 5番です。 2、作成したプログラム #!/usr/koeki/bin/ruby # -*- coding: utf-8 -*- total = 0 time = 1 average = 0 print"レポートの平均得点を求めます。\n" while true printf("%d回目のレポートの得点は?(終了はexit)\n", time) point = gets.chomp! if point == "exit" || time >= 8 break end number = point.to_f if number > 8 print"正しい得点を入力しましたか?(y/n)\n" answer = gets.chomp! if answer == "y" end if answer == "n" redo end end if number < 0 print"正しい得点を入力してください。\n" redo end time += 1 total += point.to_f average = total/(time.to_f - 1) end printf("平均得点は%.1f点です。\n",average) 3、プログラムの実行結果 (1回目) sime{c11xxxx}% ./report3.rb [~/program] レポートの平均得点を求めます。 1回目のレポートの得点は?(終了はexit) 10 正しい得点を入力しましたか?(y/n) y 2回目のレポートの得点は?(終了はexit) 9 正しい得点を入力しましたか?(y/n) n 2回目のレポートの得点は?(終了はexit) 8 3回目のレポートの得点は?(終了はexit) 8.8 正しい得点を入力しましたか?(y/n) y 4回目のレポートの得点は?(終了はexit) -5 正しい得点を入力してください。 4回目のレポートの得点は?(終了はexit) 6 5回目のレポートの得点は?(終了はexit) 8 6回目のレポートの得点は?(終了はexit) 8 7回目のレポートの得点は?(終了はexit) 8 8回目のレポートの得点は?(終了はexit) 8 平均得点は8.1点です。 (2回目) sime{c11xxxx}% ./report3.rb [~/program] レポートの平均得点を求めます。 1回目のレポートの得点は?(終了はexit) 2 2回目のレポートの得点は?(終了はexit) exit 平均得点は2.0点です。 4、プログラムの説明 (1)平均値を求めるので、 average = total/(time.to_f - 1)を足しました。 また、プログラムが終わるとき、timeの値は合計に入るレポートの回数より1 回多いので、timeから1を引いてから合計点で割り、平均点を求めます。 (2)while文を使い、「exitを入力した」という条件を満たすまで、レポート 得点を読み込み続けます。条件が満たされると、 breakが実行され、プログ ラムの繰り返しが終わります。 また、to_fメソッドは値の型を実数に変換するメソッドです。そのまま使うと 「exit」が実数の0として読み込まれてしまうので、to_fを後の移します。 さらに、テストにより、最初から「exit」を入力すると、表記できるaverageの 値がなく、エラーが出てしまいます。それを防ぐため、averageの初期値を0 と設定します。 (3)breakの条件が二つまで増え、if point == "exit" || time >= 8を足しま す。「exitを入力した」と「timeが8か8より大きい数字になる」この二つの 条件いずれが満たされると、whileの繰り返しから抜きます。 (4)数字の大きさを比べるので、入力された数字が文字列として読み込まれる と、エラーが出ます。number = point.to_fを足すと、入力された数字は文字 列ではなく、実数として読み込まれます。 if number < 0 || number > 8 を使い、以上いずれの条件が満たされる場合は、 「正しい得点を入力してください」が表記され、さらに、redoが実行され、 すなわち、繰り返しの先頭からやり直します。 (5)入力された得点が8より大きい場合は「正しい得点を入力しましたか? (y/n)」が表記され、さらにgetsメソッドを使い、「y」が入力されたら、先 程入力された得点はそのまま読み込まれ、「n」が入力された場合は、redo が実行され、もう一度得点を入力させます。 5、感想 プログラムを何回作っても、BUGがいくつが出ます。テストの重要さが分かっ たきました。 6、協力者: 千葉結香梨さん 鈴木瞭太さん