1. 2番を実施しました。

2.
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-

shusseki = 0
report = 0
shutten = 0
repoten = 0

while line=gets
  if /第(\d+)回\s+(\S+)\s+(\S+)/ =~ line
    
    if $2 == "出席"
      shusseki = 2
      printf("第%d回 出席 2点\n",$1)
    elsif $2 == "遅刻"
      shusseki = 1
      printf("第%d回 遅刻 1点\n",$1)
    else 
      shusseki = 0
      printf("第%d回 欠席 0点\n",$1)
    end
    
    if $3 == "なし"
      report = 0
    elsif $3 == "未提出"
      report = 0
    else
      report = $3.to_f
    end
    
    shutten += shusseki
    repoten += report
    
  end
end

printf("出席点の合計  %d点\n",shutten)
printf("レポートの合計点数 %3.1f点\n",repoten)

goukei = shutten + repoten
printf("合計点 %d点\n",goukei)
if goukei >= 90
  print("評価 秀\n")
elsif goukei >= 80
  print("成績 優\n")
elsif goukei >= 70
  print("成績 良\n")
elsif goukei >= 60
  print("成績 可\n")
else
  print("成績 不可\n")
end

3.
第1回 出席 2点
第2回 出席 2点
第3回 欠席 0点
第4回 出席 2点
第5回 出席 2点
第6回 出席 2点
第7回 遅刻 1点
第8回 欠席 0点
第9回 出席 2点
第10回 遅刻 1点
第11回 遅刻 1点
第12回 出席 2点
第13回 欠席 0点
第14回 出席 2点
第15回 出席 2点
出席点の合計  21点
レポートの合計点数 48.0点
合計点 69点
成績 可

4.4~7行目では、それぞれ出席を計算する変数、レポートの点数を計算する変数、出席点の合計を計算する変数、レポートの合計点数を計算する変数を設定しました。
10行目のif文では、読み込むデータを正規表現しました。第何回の授業なのかを$1、出席状況を$2、レポートの点数を$3に設定しています。
12行目からのif文では、データに書いてある文字(出席、欠席、遅刻)によってshussekiに入れる値を変えています。
21行目で10行目のif文が終わります。
23行目からのif文では、レポートの点数部分の文字(なし、未提出、その他数字)によってreportに入れる値を変えています。
28行目は$3の値を計算できるように .to_f をつけて実数変換しました。
29行目で23行目のif文が終わります。
31行目でshussekiに入れられた値を足して、shuttenという変数に入れます。
32行目でreportに入れられた値を足して、repotenという変数に入れます。
34行目で10行目のif文が終わります。
35行目でwhile文が終わります。
37、38行目でshuttenとrepotenの値を表示しています。
40行目でshuttenとrepotenの値を足して、goukeiに入れます。
41行目からのif文で、goukeiの値によって成績を表示します。
52行目でif文終わります。

5.今回の課題は過去一難しかったです。正規表現がなかなかうまくいかない上に、今まで出たif文をこんなに使うことになるとは思っていませんでした。もっとスマートにまとめられる方法があったら、ぜひ教えていただきたいです。
添付:
report5.rb