typestar

temp_stats.cob in COBOL

A week of daily highs reduced to low, high and mean, with a scaled bar per day.

*> 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.

How it works

  1. The first pass gathers the sum and tracks the coolest and warmest days.
  2. COMPUTE BAR-W scales each bar to the week's spread; MOVE ALL "#" draws it.
  3. PIC +Z9.9 prints each day's signed distance from the mean.

Keywords and builtins used here

The run, in numbers

Lines
56
Characters to type
1854
Tokens
308
Three-star pace
40 tpm

At the three-star pace of 40 tokens a minute, this run takes about 462 seconds.

Type this snippet

Step 3 of 3 in Encore, step 27 of 27 in Language basics.

← Previous