typestar

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

  1. La primera pasada junta la suma y rastrea el día más fresco y el más cálido.
  2. COMPUTE BAR-W escala cada barra a la amplitud de la semana; MOVE ALL "#" la dibuja.
  3. PIC +Z9.9 imprime la distancia con signo de cada día respecto de la media.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

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

← Anterior