// // simple program to show, for list of grades, how many A's, B's, etc. // // this version uses map with a function that maps numeric grade to // letter grade // // it also shows how to use collection methods to print in order // println("type in grades (integers), quit to end") val grades = fillList() val letterGrades = grades.map(g => numGradeToLetter(g)) val numA = count(letterGrades, 'A') val numB = count(letterGrades, 'B') val numC = count(letterGrades, 'C') val numD = count(letterGrades, 'D') val numF = count(letterGrades, 'F') println(numA + " A") println(numB + " B") println(numC + " C") println(numD + " D") println(numF + " F") println("max grade " + grades.max) println("min grade " + grades.min) println("avg grade " + grades.sum.toDouble/grades.length) println("grades in order:") grades.sorted.foreach(println(_)) def fillList() : List[Int] = { val input = readLine if (input == "quit") Nil else input.toInt::fillList() } // number grade to letter grade def numGradeToLetter(num : Int) : Char = { if (num >= 90) 'A' else if (num >= 80) 'B' else if (num >= 70) 'C' else if (num >= 60) 'D' else 'F' } // count occurrences def count(letterGrades : List[Char], c : Char) : Int = { letterGrades.count(g => (g == c)) }