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