1.問題1と2 2. #!/usr/koeki/bin/ruby # -*- coding: utf-8 -*- at = 0 rp = 0 while line = gets if /\S+\s+(\S+)\s+(\S+)/=~ line attend = $1.to_f report = $2.to_f #p attend, report end at += attend rp += report total = at + rp end #p at,rp #p total printf("合計点は%.1f点です。\n",total) if total >= 90 print"評価は秀です。\n" elsif total >= 80 print"評価は優です。\n" elsif total >= 70 print"評価は良です。\n" elsif total >= 60 print"評価は可です。\n" else print"評価は不可です。\n" end #!/usr/koeki/bin/ruby # -*- coding: utf-8 -*- atte=0 at=0 rp=0 while line = gets if /\S+\s+(\S+)\s+\S+/=~ line attend = $1 #p attend end if attend == "出席" at =2 elsif attend =="遅刻" at =1 elsif attend == "欠席" at =0 end #p at atte +=at if /\S+\s+\S+\s+([0.1-9.9]+)/=~ line report =$1.to_f #p report rp += report end end #p atte #p rp total= atte +rp printf("合計得点は%.1f点です。\n", total) if total >= 90 print"評価は秀です。\n" elsif total >= 80 print"評価は優です。\n" elsif total >= 70 print"評価は良です。\n" elsif total >= 60 print"評価は可です。\n" else print"評価は不可です。\n" end 3. 合計点は69.0点です。 評価は可です。 合計得点は69.0点です。 評価は可です。 4. 問題1 1、2行目 おまじない。 3、4行目 at,rp=0は11、12行目の計算が0から始まるようにするため。 5行目 データを読みこむwhile line=gets 6行目 後方参照。\S+は空白以外。\s+は空白を表す。取りだしたい出席点 とレポート点の正規表現を()でくくる。 7、8行目 出席点はattendレポート点はreportとし、それぞれ1番目の()2 番目の()が代入されるよう$1、$2を指定。実数が入るよう.to_fを つけた。 9行目 後方参照がちゃんとできているのかpで確認した。 10行目 後方参照のifのend。 11、12、13行目 atは出席点の合計、rpはレポート点の合計を計算、totalで合 計の出席点とレポート点を合わせた。 14行目 whileのend。 15,16行目 11、12、13行目の確認。 17行目 合計点の結果。 18〜28行目 成績評価を出すif。前回のレポートの成績評価のifとほぼ同じ。 数の大きい点から判断するようになっている。 問題2 1、2行目 おまじない。 3行目 atte=0で19行目の計算が0から始められるようにしている。 4、5行目 rpは問題1の4行目と同様。今回のatは合計ではなくそれぞれの 出席点を表すことになっている。 6行目 データを読みこむwhile line=gets。 7行目 後方参照。出席点が点数では無いのでlineのみ。 8行目 1番目の()があてはまるようにattendを$1に指定。 9行目 確認。 10行目 後方参照のifのend。 11〜17行目 それぞれ出席だったら2点、遅刻は1点、欠席は0点と見なすよ うatで代入されるように条件づけた。 18行目 確認。 19行目 出席点の合計を計算。atteが出席点全体の合計を表す。 20行目 レポート点の後方参照。小数点も認識されるよう[0.1-9.9]で 指定。 21行目 reportが1番目の()があてはまるように$1に指定。 22行目 確認。 23行目 rpでレポート点の合計を計算。 24行目 後方参照のifのend。 25行目 whileのend。 26、27行目 確認。 28行目 合計点の計算。 29行目 合計点の結果。 30〜40行目 問題1と同様。 5. 問題1、2どちらも難しくはなかった。問題2は1と同様にレポート点は$2で指定しようとも思ったが書き変えたりするときに分かりづらそうだと思い出席点とレポート点を別々な正規表現から後方参照するようにした。最初にktermで確認して問1と2が結果が全く同じで少し合ってるのか心配した。 問題3も取り組んでみようとした?が、合計点の配列を作る段階で、配列はできたが各点数の区切れが分からなくなってしまい並べ変えができなくて断念した。 7.7、