1. 全て(5番まで)実行
2.
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-
total = 0
number = 1
print"レポートの合計得点を計算します。(終了はexit)\n"
while true
printf("%d回目のレポートの得点は?\n", number)
score = gets.chomp!
if score.to_f > 8
printf"その得点は本当に正しいですか?(正しい→y,誤り→n)\n"
seigo = gets.chomp!
if seigo == "n"
print"次は正しい数値を入力してください。\n"
redo
end
end
if score.to_f < 0
print"0?8の実数のいずれかを入力してください。\n"
redo
end
total += score.to_f
number += 1
if score == "exit"
break
end
if number == 9
break
end
end
heikin1 = total / (number - 1)
heikin2 = total / (number - 2)
printf("合計得点は%5.2fです。\n",total)
if score == "exit"
printf("平均得点は%4.1fです。\n",heikin2)
else
printf("平均得点は%4.1fです。\n",heikin1)
end
3.
��8回目まですべて入力した場合
レポートの合計得点を計算します。(終了はexit)
1回目のレポートの得点は?
0.5
2回目のレポートの得点は?
0.5
3回目のレポートの得点は?
0.5
4回目のレポートの得点は?
0.5
5回目のレポートの得点は?
0.5
6回目のレポートの得点は?
0.5
7回目のレポートの得点は?
0.5
8回目のレポートの得点は?
0.5
合計得点は 4.00です。
平均得点は 0.5です。
��8回までいかず途中で入力が終わった場合
レポートの合計得点を計算します。(終了はexit)
1回目のレポートの得点は?
0.1
2回目のレポートの得点は?
0.1
3回目のレポートの得点は?
Exit
合計得点は 0.20です。
平均得点は 0.1です。
�E喘罎派蕕凌瑤�入力された場合の処理
レポートの合計得点を計算します。(終了はexit)
1回目のレポートの得点は?
1
2回目のレポートの得点は?
-1
0?8の実数のいずれかを入力してください。
2回目のレポートの得点は?
…
�づ喘罎�8より大きい数が入力された場合の処理(正しいver)
レポートの合計得点を計算します。(終了はexit)
1回目のレポートの得点は?
1
2回目のレポートの得点は?
9
その得点は本当に正しいですか?(正しい→y,誤り→n)
y
3回目のレポートの得点は?
…
�ヅ喘罎�8より大きい数が入力された場合の処理(誤りver)
レポートの合計得点を計算します。(終了はexit)
1回目のレポートの得点は?
1
2回目のレポートの得点は?
9
その得点は本当に正しいですか?(正しい→y,誤り→n)
n
次は正しい数値を入力してください。
2回目のレポートの得点は?
…
4.課題1~5まで順に説明します。
?43行目に平均を求める、heikin関数を追加。得点の合計(total)を回数(number-1)
で割ると平均が求まる。-1の理由は、numberを初期値1で設定しているため。
?8行目(最初に表示される文)で、点数の入力が終わった場合はexitを入力するよう入力者に促す。
10行目、プログラムにwhile trueで、「条件を満たすまで実行を続ける」という命令をする。これで条件を満たさない限り永遠にプログラムが継続される。
12行目、.to_fをなくし、実数以外も受け取ることを可能に。
28行目、入力されたもの(score)を実数として受け取るため、.to_fを追加。
32~34行目、if-endで条件を定義。入力されたもの(score)がexitだった場合に実行が終了されるよう指示。
33行目、breakで繰り返しから抜ける。
44行目、exitを入力した分も回数に含まれてしまうため?よりもさらにnumberから1引く。
47~51行目、exitと入力された場合は平均の計算が違うため、if-endで表示される文を変える。ifでexitが入力されたという条件を定義。elseはその条件以外の場合に実行される。
?36~38行目、if-endとbreakで、回数(number)が9になったら繰り返しから抜ける、と条件を定義。8回目まで実行され、9回目でやめたいため、9になるのだ。
37行目、breakで繰り返しから抜ける。
?23~26行目、入力された得点(score)が0より小さい場合、再入力を促すメッセージを表示するようにする。
23行目、入力されたもの(score)を実数として受け取るために、.to_fを忘れずに。
25行目、条件を満たす場合、redoで直前に入力された値を無効化し、while trueの真下の行に戻される。もう1度その回を入力させることができる。
?14~21行目。
14行目、「入力された得点(score)が8より大きい場合」と条件定義。実数として受け取るために、.to_fを忘れずに。
15行目、条件を満たした場合、その得点は正しいかどうかを答えさせるメッセージを表示。
16行目、seigo関数に正しいかどうか入力したものをgets.chomp!で受け取る。
(正しい場合は次の得点入力に進む。)
17行目、ifで「入力されたもの(seigo)が誤り(n)だった場合」と条件定義。
18行目、条件を満たす場合、正しく入力するよう促すメッセージを表示。
19行目、条件を満たす場合、redoで直前に入力された値を無効化し、while trueの真下の行に戻される。もう1度その回を入力させることができる。
5.numberの初期値が1であるため少し頭をひねらなくてはいけなかったのが大変だった。平均がなかなか合わず、苦労した。実数に変えるのを忘れてしまいエラーがでるといったことが何度かあったので、今後気を付けたい。
6.なし
添付:
report3.rb