typestar

grade_report.cob in COBOL

Quiz scores fold into averages and letter grades, then a formatted class report.

*> Average quiz scores into letter grades and print the class report.
IDENTIFICATION DIVISION.
PROGRAM-ID. GRADE-REPORT.
DATA DIVISION.
WORKING-STORAGE SECTION.
*> The classic table trick: FILLER rows, then REDEFINES over them.
01 ROSTER-RAW.
   05 FILLER PIC X(17) VALUE "Imani   092088095".
   05 FILLER PIC X(17) VALUE "Theo    078083080".
   05 FILLER PIC X(17) VALUE "Sofia   085091089".
   05 FILLER PIC X(17) VALUE "Miles   062070068".
01 ROSTER REDEFINES ROSTER-RAW.
   05 STUDENT OCCURS 4 TIMES.
      10 S-NAME  PIC X(8).
      10 S-QUIZ  PIC 9(3) OCCURS 3 TIMES.
01 IDX         PIC 9.
01 QZ          PIC 9.
01 SUM-Q       PIC 9(4).
01 AVG-Q       PIC 9(3)V9.
01 AVG-SHOW    PIC ZZ9.9.
01 GRADE-CH    PIC X(6).
01 CLASS-SUM   PIC 9(5) VALUE 0.
01 CLASS-AVG   PIC 9(3)V9.
01 CLASS-SHOW  PIC ZZ9.9.
PROCEDURE DIVISION.
MAIN-PARA.
    DISPLAY "student    avg  grade"
    DISPLAY "---------------------"
    PERFORM VARYING IDX FROM 1 BY 1 UNTIL IDX > 4
        MOVE 0 TO SUM-Q
        PERFORM VARYING QZ FROM 1 BY 1 UNTIL QZ > 3
            ADD S-QUIZ(IDX, QZ) TO SUM-Q
        END-PERFORM
        ADD SUM-Q TO CLASS-SUM
        COMPUTE AVG-Q ROUNDED = SUM-Q / 3
        MOVE AVG-Q TO AVG-SHOW
        PERFORM GRADE-FOR
        DISPLAY S-NAME(IDX) " " AVG-SHOW "  " GRADE-CH
    END-PERFORM
    COMPUTE CLASS-AVG ROUNDED = CLASS-SUM / 12
    MOVE CLASS-AVG TO CLASS-SHOW
    DISPLAY "---------------------"
    DISPLAY "class avg " CLASS-SHOW
    STOP RUN.

*> One grade band per WHEN, best first; OTHER catches the rest.
GRADE-FOR.
    EVALUATE TRUE
        WHEN AVG-Q >= 90 MOVE "A"      TO GRADE-CH
        WHEN AVG-Q >= 80 MOVE "B"      TO GRADE-CH
        WHEN AVG-Q >= 70 MOVE "C"      TO GRADE-CH
        WHEN OTHER       MOVE "retake" TO GRADE-CH
    END-EVALUATE.

How it works

  1. FILLER rows hold the roster as text and REDEFINES reads it as a table.
  2. Nested PERFORM VARYING loops sum each student's three quizzes.
  3. GRADE-FOR maps the average to a letter with a guarded EVALUATE.

Keywords and builtins used here

The run, in numbers

Lines
53
Characters to type
1600
Tokens
230
Three-star pace
40 tpm

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

Type this snippet

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

← Previous Next →