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、協力者: 千葉結香梨さん 鈴木瞭太さん