typestar

word_freq.cob en COBOL

Una tabla de frecuencia de palabras hecha de UNSTRING, búsqueda lineal y un gráfico de numerales.

*> Count word frequencies in a passage and chart the leaders.
IDENTIFICATION DIVISION.
PROGRAM-ID. WORD-FREQ.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PASSAGE     PIC X(76) VALUE "the rain in maine falls mainly on " &
                               "the plain and the rain stays on the plain".
01 WORD-TABLE.
   05 WORD-SLOT OCCURS 12 TIMES.
      10 W-TEXT   PIC X(10).
      10 W-COUNT  PIC 99.
01 SLOT-USED   PIC 99 VALUE 0.
01 CUR-WORD    PIC X(10).
01 SCAN-PTR    PIC 99 VALUE 1.
01 IDX         PIC 99.
01 FOUND-FLAG  PIC X.
01 BAR-LINE    PIC X(20).
PROCEDURE DIVISION.
MAIN-PARA.
*> UNSTRING walks the passage word by word through its POINTER.
    PERFORM UNTIL SCAN-PTR > FUNCTION LENGTH(PASSAGE)
        MOVE SPACES TO CUR-WORD
        UNSTRING PASSAGE DELIMITED BY ALL SPACE
            INTO CUR-WORD WITH POINTER SCAN-PTR
        END-UNSTRING
        IF CUR-WORD NOT = SPACES
            PERFORM TALLY-WORD
        END-IF
    END-PERFORM
    DISPLAY SLOT-USED " distinct words"
    DISPLAY "word       ct  bar"
    PERFORM VARYING IDX FROM 1 BY 1 UNTIL IDX > SLOT-USED
        MOVE SPACES TO BAR-LINE
        MOVE ALL "#" TO BAR-LINE(1:W-COUNT(IDX))
        DISPLAY W-TEXT(IDX) " " W-COUNT(IDX) "  " BAR-LINE
    END-PERFORM
    STOP RUN.

*> Linear search: bump a known word or claim the next free slot.
TALLY-WORD.
    MOVE "N" TO FOUND-FLAG
    PERFORM VARYING IDX FROM 1 BY 1 UNTIL IDX > SLOT-USED
        IF W-TEXT(IDX) = CUR-WORD
            ADD 1 TO W-COUNT(IDX)
            MOVE "Y" TO FOUND-FLAG
            EXIT PERFORM
        END-IF
    END-PERFORM
    IF FOUND-FLAG = "N" AND SLOT-USED < 12
        ADD 1 TO SLOT-USED
        MOVE CUR-WORD TO W-TEXT(SLOT-USED)
        MOVE 1 TO W-COUNT(SLOT-USED)
    END-IF.

Cómo funciona

  1. UNSTRING ... WITH POINTER recorre el pasaje palabra por palabra.
  2. TALLY-WORD suma a una palabra conocida o reclama la siguiente casilla libre.
  3. MOVE ALL "#" hacia un receptor rebanado dibuja la barra de cada palabra.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
53
Caracteres a escribir
1477
Tokens
223
Ritmo de tres estrellas
40 tpm

Al ritmo de tres estrellas de 40 tokens por minuto, este intento toma unos 334 segundos.

Escribe este fragmento

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

← Anterior Siguiente →