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、添付ファイル