1.何番まで実施したか 5番まで作成しました。 2.作成したプログラム #!/usr/koeki/bin/ruby # -*- coding: utf-8 -*- total = 0 number = 1 print"レポートの得点を計算する。\n" while true printf"%d回目の点数を入力して下さい(終了はexit)\n",number score = gets.chomp! if score =="exit" number -= 1 break end if score.to_f < 0 print"もう一度入力してください\n" redo elsif score.to_f > 8 print"得点が8点以上です。よろしいですか?(正しければy誤っていればn)\n" y = gets.chomp! if y == "y" end if y == "n" redo end end total += score.to_f if number ==8 break end number += 1 end ave = total/number printf("%d回分のレポートの合計は%0.1f点です。\n",number,total) printf("平均得点は%0.1f点です。\n",ave) 3.プログラムの実行結果 sime{c115xxx}% chmod +x report3.rb [~/program] sime{c115xxx}% ./report3.rb [~/program] レポートの得点を計算する。 1回目の点数を入力して下さい(終了はexit) 9 得点が8点以上です。よろしいですか?(正しければy誤っていればn) y 2回目の点数を入力して下さい(終了はexit) 6 3回目の点数を入力して下さい(終了はexit) 7 4回目の点数を入力して下さい(終了はexit) 5 5回目の点数を入力して下さい(終了はexit) 8 6回目の点数を入力して下さい(終了はexit) 9 得点が8点以上です。よろしいですか?(正しければy誤っていればn) y 7回目の点数を入力して下さい(終了はexit) 5 8回目の点数を入力して下さい(終了はexit) 6 8回分のレポートの合計は55.0点です。 平均得点は6.9点です。 sime{c115xxx}% sime{c115xxx}% ./report3.rb [~/program] レポートの得点を計算する。 1回目の点数を入力して下さい(終了はexit) 20 得点が8点以上です。よろしいですか?(正しければy誤っていればn) n 1回目の点数を入力して下さい(終了はexit) 2回目の点数を入力して下さい(終了はexit) 3回目の点数を入力して下さい(終了はexit) 4回目の点数を入力して下さい(終了はexit) 5回目の点数を入力して下さい(終了はexit) 6回目の点数を入力して下さい(終了はexit) 7回目の点数を入力して下さい(終了はexit) 8回目の点数を入力して下さい(終了はexit) 8回分のレポートの合計は0.0点です。 平均得点は0.0点です。 4.プログラムの説明 1行目 #!/usr/koeki/bin/rubyはrubyインタプリタのあるディレクトリを指定している。 2行目 日本語文字コードがEUC-JPであることを示している。 4行目:レポートの合計点を記録する変数totalを指定する。 5行目:レポートの回数を記録する変数numberを指定する。 7行目:purint文で文字を表示する。 9行目:while trueでレポートの点数を入力する作業を繰り返しの対象とする。 10行目:printf文で変数numberを表示しながらレポートの得点入力をうながす文 章を表示する。 11行目:変数scoreにgets.chomp!メソッドを用いて入力されたものを変数に入れ ていく。 12行目:if文で変数scoreに入力されたものが"exit"である場合以下の流れにそっ と上から処理していく。(whileの中は適応されるものから上から順に処理する。) また、==があることにとって==以下が変数と合致することでこの処理に突入する という文である。 13行目:変数numberは元もとの数として1が代入されているため、1を減らして処 理を続ける必要がある。このプログラムでは処理の最期の方に変数numberに1を 足す文が書かれているためbreakをしようとするこのif文中の行では回数から1を 減らす処理をする。 14行目:breakでwhile-endからの繰り返しを抜ける。 15行目:ifに対してのend 17行目:if文で11行目に入力した変数scoreが0よりも小さい値の時にこの処理を 行う。 18行目:print文で文字を表示する。 19行目:redoで繰り返しの先頭(レポートの得点を入力するところ)へ戻る。 20行目:elsifで17行目のifを満たさずこの行の条件を満たす時に処理を行う2つ めのif文である。入力した変数scoreが8よりも大きい場合この処理を行う。 21行目:print文で質問を投げかけ、次に入力する数値の選択を指示する文を表示 している。 22行目:変数yにgets.chomp!メソッドを用いて入力されたものを変数に入れ てる。 23行目:if文で変数yの値がyで合致するときに処理される行である。 24行目:17行目に対するend 25行目:if文で変数yの値がnで合致するときに処理される行である。 26行目:redoで繰り返しの先頭(レポートの得点を入力するところ)へ戻る。 27行目:20行目に対してのend 28行目:23行目に対してのend 30行目:変数totalに11行目で入力した変数scoreを.to_fで実数として足していく。 32行目:if文で変数numberが8になったときにこの行の処理を行う。 33行目:breakで繰り返しから抜ける。32行目の条件を満たす場合に適応し、処理 される。 34行目:32行目に対してのend 35行目:変数numberに1ずつ繰り返しの毎に足していく。 36行目:while に対してのend 43行目:変数aveに平均点を求めるため、レポートの合計点数からレポートの提出 回数で割って平均点を求める計算式である。 45行目:printf文で変数numbero(レポート回数)と変数total(レポート合計点数) を表示する。レポートの合計点数は小数点を含む可能性があるため、%0.1fとし小数点 第1位まで表示する。 46行目:printf文で変数(ave)を表示する。変数aveも小数点を含む可能性がある ため、%0.1fとし小数点第1位まで表示する。 5.感想 今回の課題の範囲を学習する会の講義を 体調不良で休んでしまったので、講義で学ぶ内容を TAの北條さんにお願いし、一から教えてもらいました。 前回よりも変数が増え、説明するのも難しく、 だいぶ時間がかかりましたが、なんとか完成できてよかったです。 TAの先生に助けてもらったので、自信はないのですが、 思い切って5番まで実施してみました。 6.参考文献 http://roy/~naoya/ruby/5.htmlのページを何度も見ました。 また、TAの北條さんにお願いし、 講義内容の説明、課題の説明をしてもらいました。