typestar

temp_stats.f90 en Fortran

Una semana de máximas diarias reducida a mínima, máxima y media, con una barra a escala por día.

! One week of daily highs: spread, mean, and a scaled bar chart.
program temp_stats
    implicit none
    character(len=3) :: days(7) = ["Mon", "Tue", "Wed", "Thu", &
                                   "Fri", "Sat", "Sun"]
    integer :: temps(7) = [61, 68, 74, 79, 72, 65, 58]
    integer :: lo, hi, span, width, i
    real :: mean

    lo = minval(temps)
    hi = maxval(temps)
    span = max(hi - lo, 1)
    mean = sum(temps) / 7.0

    print '(a)', "day temp range                 diff"
    print '(a)', "------------------------------------"
    ! Bars scale to the week's spread; the +1 keeps Sunday visible.
    do i = 1, 7
        width = 20 * (temps(i) - lo) / span + 1
        print '(a, 1x, i3, 1x, a, t27, f6.1)', days(i), temps(i), &
            repeat("#", width), temps(i) - mean
    end do
    print '(a)', "------------------------------------"
    print '(a, i0, a, i0, a, f5.1)', "low ", lo, ", high ", hi, &
        ", mean ", mean
    print '(a, i0)', "days above the mean: ", count(temps > mean)
end program temp_stats

Cómo funciona

  1. minval, maxval y sum fijan la amplitud y la media sin bucle.
  2. Cada barra escala a la amplitud de la semana; repeat la dibuja y t27 alinea la columna diff.
  3. count(temps > mean) cierra el reporte con el conteo de días cálidos.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
27
Caracteres a escribir
901
Tokens
192
Ritmo de tres estrellas
65 tpm

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

Escribe este fragmento

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

← Anterior