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
FILLERrows hold the roster as text andREDEFINESreads it as a table.- Nested
PERFORM VARYINGloops sum each student's three quizzes. GRADE-FORmaps the average to a letter with a guardedEVALUATE.
Keywords and builtins used here
ADDCOMPUTEDATADISPLAYDIVISIONEVALUATEIDENTIFICATIONMOVEPERFORMPROCEDURESECTIONSTOPTRUE
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.
Step 2 of 3 in Encore, step 26 of 27 in Language basics.