#!/bin/csh -f
# Compute numerical mean of letter grades,
# e.g., "gradavg A B- D+ C F A".
# A=4, B=3, C=2, D=1, F=0.  +=1/3, -=-1/3.
# Gives same result with any changes of case, e.g., "gradavg a b_ D= c F a"
# Used by coursegpa

set numscores = 0
set s = 0
foreach i ($*)
  set multiplier = `echo $i | tr -dc '[0-9]'`
  if ("$multiplier" == "" ) set multiplier = 1
  set grade = `echo $i | tr -d '[0-9]'`
  set gpoints = 0
  switch ($grade)
  case A*:
  case a*:
    set gpoints = 400000
    breaksw
  case B*:
  case b*:
    set gpoints = 300000
    breaksw
  case C*:
  case c*:
    set gpoints = 200000
    breaksw
  case D*:
  case d*:
    set gpoints = 100000
    breaksw
  case F*:
  case f*:
    breaksw
  case I*:
  case i*:
    @ numscores--
    breaksw
  default:
    echo Illegal grade: $grade
  endsw
  switch ($grade)
  case *+:
  case *=:
    @ gpoints = $gpoints + 33333
    breaksw
  case *-:
  case *_:
    @ gpoints = $gpoints - 33333
    breaksw
  endsw
  @ s = $s + $gpoints * $multiplier
  @ numscores = $numscores + $multiplier
end

@ a = $s / ($numscores * 10)
@ i = $a / 10000
@ f = $a
if ($a>9999) set f = `echo $a | cut -c2-5`

echo $i.$f
