typestar

grade_report.f90 en Fortran

Los puntajes de quiz se pliegan en promedios y calificaciones, y luego en un reporte formateado.

! Average quiz scores into letter grades and print the class report.
program grade_report
    implicit none
    character(len=8) :: names(4) = ["Imani   ", "Theo    ", &
                                    "Sofia   ", "Miles   "]
    integer :: quizzes(3, 4) = reshape( &
        [92, 88, 95, 78, 83, 80, 85, 91, 89, 62, 70, 68], [3, 4])
    real :: avg
    integer :: i

    print '(a)', "student    avg  grade"
    print '(a)', "---------------------"
    ! Each column of the matrix is one student's three quizzes.
    do i = 1, 4
        avg = sum(quizzes(:, i)) / 3.0
        print '(a, f6.1, 2x, a)', names(i), avg, letter(avg)
    end do
    print '(a)', "---------------------"
    print '(a, f5.1)', "class avg ", sum(quizzes) / 12.0
    print '(a, i0)', "quizzes graded: ", size(quizzes)

contains

    ! One grade band per branch, best first.
    pure function letter(avg) result(grade)
        real, intent(in) :: avg
        character(len=6) :: grade
        if (avg >= 90.0) then
            grade = "A"
        else if (avg >= 80.0) then
            grade = "B"
        else if (avg >= 70.0) then
            grade = "C"
        else
            grade = "retake"
        end if
    end function letter
end program grade_report

Cómo funciona

  1. reshape vierte doce puntajes en una matriz de 3 por 4, una columna por estudiante.
  2. sum(quizzes(:, i)) / 3.0 promedia una columna con una sección de arreglo.
  3. La función contenida letter mapea cada promedio a su banda de calificación.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
38
Caracteres a escribir
1013
Tokens
220
Ritmo de tres estrellas
65 tpm

Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 203 segundos.

Escribe este fragmento

Paso 2 de 3 en Bis; paso 26 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →