typestar

word_freq.f90 en Fortran

Una tabla de frecuencia de palabras hecha de index, subcadenas y un gráfico de numerales.

! Count word frequencies in a passage and chart the leaders.
program word_freq
    implicit none
    character(len=*), parameter :: passage = &
        "the rain in maine falls mainly on the plain and " // &
        "the rain stays on the plain"
    character(len=12) :: words(20), current
    integer :: counts(20) = 0
    integer :: used = 0
    integer :: pos, next_space, i
    logical :: known

    ! Walk the passage: cut at each space, tally every word.
    pos = 1
    do while (pos <= len(passage))
        next_space = index(passage(pos:), " ")
        if (next_space == 0) then
            current = passage(pos:)
            pos = len(passage) + 1
        else
            current = passage(pos:pos + next_space - 2)
            pos = pos + next_space
        end if
        if (len_trim(current) == 0) cycle

        known = .false.
        do i = 1, used
            if (words(i) == current) then
                counts(i) = counts(i) + 1
                known = .true.
                exit
            end if
        end do
        if (.not. known) then
            used = used + 1
            words(used) = current
            counts(used) = 1
        end if
    end do

    print '(i0, a)', used, " distinct words"
    print '(a)', "word         ct bar"
    do i = 1, used
        print '(a, 1x, i2, 1x, a)', words(i), counts(i), &
            repeat("#", counts(i))
    end do
end program word_freq

Cómo funciona

  1. El do while recorre el pasaje, cortando una palabra en cada espacio con index.
  2. Una búsqueda lineal suma a las palabras conocidas o reclama la casilla libre siguiente.
  3. repeat("#", counts(i)) dibuja la barra de cada palabra en el bucle del reporte.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
47
Caracteres a escribir
1084
Tokens
252
Ritmo de tres estrellas
65 tpm

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

Escribe este fragmento

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

← Anterior Siguiente →