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
- The first pass gathers the sum and tracks the coolest and warmest days.
COMPUTE BAR-Wscales each bar to the week's spread;MOVE ALL "#"draws it.PIC +Z9.9prints each day's signed distance from the mean.
Keywords and builtins used here
ADDCOMPUTEDATADISPLAYDIVISIONIDENTIFICATIONIFMOVEPERFORMPROCEDURESECTIONSTOP
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.
Step 3 of 3 in Encore, step 27 of 27 in Language basics.