1、課題番号(1)
2、作成したプログラム
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-
total = 0
number = 1
score = [ ]
x = 0
print"出席回数を入力してください。\n"
syusseki = gets.chomp!.to_i
while true
printf("次に、%d回目のレポートの得点を0から8までを入力してください。(終了はexitと入力)\n", number)
score[x] = gets.chomp!
if score[x] == "exit"
number -= 1
break
end
if score[x].to_f < 0
print"マイナスにはなりません。もう一度入力してください。\n"
redo
end
if score[x].to_f > 8
print"入力した得点が8点を超えました。正しければyes、誤っていればnoを入力してください。\n"
answer = gets.chomp!
if answer == "yes"
end
if answer == "no"
redo
end
end
total += score[x].to_f
if number == 8
break
end
number += 1
x += 1
end
print"+ - - - - - - - - - - - - - - - +\n"
syussekiten = syusseki*2
printf("出席点%15d点\n",syussekiten)
print"+ - - - - - - - - - - - - - - - +\n"
print"レポート\n"
x = 1
total = 0
while x < score.length
if score[x] == "exit"
break
end
printf("%d回目 %15.1f点\n",x+1,score[x])
total += score[x].to_f
x += 1
end
print"+ - - - - - - - - - - - - - - - +\n"
goukei = total + syussekiten
average = total/number
printf("合計 %16.1f点\n",goukei)
printf("レポート平均 %8.1f点\n",average)
if goukei >= 90
print"評価 秀\n"
elsif goukei >= 80
print"評価 優\n"
elsif goukei >= 70
print"評価 良\n"
elsif goukei >= 60
print"評価 可\n"
else
print"評価 不可\n"
end
print"+ - - - - - - - - - - - - - - - +\n"
3、プログラムの実行結果
boy{c118xxx}% ./report4a.rb [~/program]
出席回数を入力してください。
10
次に、1回目のレポートの得点を0から8までを入力してください。(終了はexitと入力)
-1
マイナスにはなりません。もう一度入力してください。
次に、1回目のレポートの得点を0から8までを入力してください。(終了はexitと入力)
5
次に、2回目のレポートの得点を0から8までを入力してください。(終了はexitと入力)
8
次に、3回目のレポートの得点を0から8までを入力してください。(終了はexitと入力)
6
次に、4回目のレポートの得点を0から8までを入力してください。(終了はexitと入力)
9
入力した得点が8点を超えました。正しければyes、誤っていればnoを入力してください。
no
次に、4回目のレポートの得点を0から8までを入力してください。(終了はexitと入力)
5
次に、5回目のレポートの得点を0から8までを入力してください。(終了はexitと入力)
6
次に、6回目のレポートの得点を0から8までを入力してください。(終了はexitと入力)
8
次に、7回目のレポートの得点を0から8までを入力してください。(終了はexitと入力)
7
次に、8回目のレポートの得点を0から8までを入力してください。(終了はexitと入力)
6
+ - - - - - - - - - - - - - - - +
出席点 20点
+ - - - - - - - - - - - - - - - +
レポート
2回目 8.0点
3回目 6.0点
4回目 5.0点
5回目 6.0点
6回目 8.0点
7回目 7.0点
8回目 6.0点
+ - - - - - - - - - - - - - - - +
合計 66.0点
レポート平均 5.8点
評価 可
+ - - - - - - - - - - - - - - - +
4、プログラムの説明
今回のプログラムは、前回の条件を満たしているものを無限回繰り返すwhile
tureを用いたプログラムになっている。ifを用いてexitの文字を入力すると
breakできる仕組みになっている。今回は8回分までのレポートの点数を入力
するため、条件elsifで8回目で終えるようになっている。
8点を越えた時、確認できるようにした。もう一度gets.chomp!を使ってyesか
noを入力するようにした。点数がマイナスになるときはredoで再入力をうながす。
それに加え、通常の変数を拡張して、複数の値を入れられるようにしたものが配
列をつかう。冒頭でx = 0として初期値に0を代入しているため、1回目のscore[x]
はscore[0]と同義になる。繰り返しを行う中でx += 1として1ずつ増加している
ため、2回目以降の繰り返しではscore[1]、score[2]、score[3]と変化する。
lengthメソッドは配列に対して、配列変数.lengthとすることでその配列の中に
代入されている値の数を返してくれる。x < score.lengthは、while文を継続する
条件である。
出席回数の入力を求め、1回あたり2点として、レポート点と合算して合計得点を
算出表示した。また、合計得点に応じて成績(秀〜不可)を表示するため、
if,elsif,else,endを使った。
全て実施した時の結果右端が綺麗に整うように、%とdかfの間に合うような数字
をいれる。
5、感想
今回は、改良する部分がたくさん合った。やっていきながら、てんてんなど始め
て発見する事も多かった。また、プログラムの順序がずれることで正しく動かな
いことを今回の課題で痛感した。
次は、プログラムの順番を考えながら頑張りたい。
6、添付ファイル