temp_stats.cob en COBOL
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.
IDENTIFICATION DIVISION.
PROGRAM-ID. TEMP-STATS.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WEEK-RAW.
05 FILLER PIC X(5) VALUE "Mon61".
05 FILLER PIC X(5) VALUE "Tue68".
05 FILLER PIC X(5) VALUE "Wed74".
05 FILLER PIC X(5) VALUE "Thu79".
05 FILLER PIC X(5) VALUE "Fri72".
05 FILLER PIC X(5) VALUE "Sat65".
05 FILLER PIC X(5) VALUE "Sun58".
01 WEEK-TAB REDEFINES WEEK-RAW.
05 DAY-SLOT OCCURS 7 TIMES.
10 D-NAME PIC X(3).
10 D-TEMP PIC 99.
01 IDX PIC 9.
01 LO-T PIC 99 VALUE 99.
01 HI-T PIC 99 VALUE 0.
01 SUM-T PIC 9(3) VALUE 0.
01 MEAN-T PIC 99V9.
01 MEAN-SHOW PIC Z9.9.
01 SPAN-T PIC 99.
01 BAR-W PIC 99.
01 BAR-LINE PIC X(21).
01 DIFF-T PIC S99V9.
01 DIFF-SHOW PIC +Z9.9.
01 WARM-DAYS PIC 9 VALUE 0.
PROCEDURE DIVISION.
MAIN-PARA.
*> First pass gathers the sum and tracks the coolest and warmest.
PERFORM VARYING IDX FROM 1 BY 1 UNTIL IDX > 7
ADD D-TEMP(IDX) TO SUM-T
IF D-TEMP(IDX) < LO-T MOVE D-TEMP(IDX) TO LO-T END-IF
IF D-TEMP(IDX) > HI-T MOVE D-TEMP(IDX) TO HI-T END-IF
END-PERFORM
COMPUTE MEAN-T ROUNDED = SUM-T / 7
COMPUTE SPAN-T = HI-T - LO-T
DISPLAY "day temp range diff"
DISPLAY "------------------------------------"
*> Bars scale to the week's spread; the +1 keeps Sunday visible.
PERFORM VARYING IDX FROM 1 BY 1 UNTIL IDX > 7
COMPUTE BAR-W = 20 * (D-TEMP(IDX) - LO-T) / SPAN-T + 1
MOVE SPACES TO BAR-LINE
MOVE ALL "#" TO BAR-LINE(1:BAR-W)
COMPUTE DIFF-T = D-TEMP(IDX) - MEAN-T
MOVE DIFF-T TO DIFF-SHOW
IF D-TEMP(IDX) > MEAN-T ADD 1 TO WARM-DAYS END-IF
DISPLAY D-NAME(IDX) " " D-TEMP(IDX) " " BAR-LINE " " DIFF-SHOW
END-PERFORM
DISPLAY "------------------------------------"
MOVE MEAN-T TO MEAN-SHOW
DISPLAY "low " LO-T ", high " HI-T ", mean " MEAN-SHOW
DISPLAY "days above the mean: " WARM-DAYS
STOP RUN.
Cómo funciona
- La primera pasada junta la suma y rastrea el día más fresco y el más cálido.
COMPUTE BAR-Wescala cada barra a la amplitud de la semana;MOVE ALL "#"la dibuja.PIC +Z9.9imprime la distancia con signo de cada día respecto de la media.
Palabras clave y builtins usados aquí
ADDCOMPUTEDATADISPLAYDIVISIONIDENTIFICATIONIFMOVEPERFORMPROCEDURESECTIONSTOP
El intento, en números
- Líneas
- 56
- Caracteres a escribir
- 1854
- Tokens
- 308
- Ritmo de tres estrellas
- 40 tpm
Al ritmo de tres estrellas de 40 tokens por minuto, este intento toma unos 462 segundos.
Paso 3 de 3 en Bis; paso 27 de 27 en Fundamentos del lenguaje.