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
minval,maxvalysumfijan la amplitud y la media sin bucle.- Cada barra escala a la amplitud de la semana;
repeatla dibuja yt27alinea la columna diff. count(temps > mean)cierra el reporte con el conteo de días cálidos.
Palabras clave y builtins usados aquí
charactercountdoendimplicitintegerlenmaxmaxvalminvalnoneprintprogramrealrepeatsum
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.
Paso 3 de 3 en Bis; paso 27 de 27 en Fundamentos del lenguaje.