grade_report.cob en COBOL
Los puntajes de quiz se pliegan en promedios y calificaciones, y luego en un reporte formateado.
*> 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.
Cómo funciona
- Filas
FILLERguardan la lista como texto yREDEFINESla lee como tabla. - Bucles
PERFORM VARYINGanidados suman los tres quizzes de cada estudiante. GRADE-FORmapea el promedio a una letra con unEVALUATEcon guardas.
Palabras clave y builtins usados aquí
ADDCOMPUTEDATADISPLAYDIVISIONEVALUATEIDENTIFICATIONMOVEPERFORMPROCEDURESECTIONSTOPTRUE
El intento, en números
- Líneas
- 53
- Caracteres a escribir
- 1600
- Tokens
- 230
- Ritmo de tres estrellas
- 40 tpm
Al ritmo de tres estrellas de 40 tokens por minuto, este intento toma unos 345 segundos.
Paso 2 de 3 en Bis; paso 26 de 27 en Fundamentos del lenguaje.