typestar

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

  1. Filas FILLER guardan la lista como texto y REDEFINES la lee como tabla.
  2. Bucles PERFORM VARYING anidados suman los tres quizzes de cada estudiante.
  3. GRADE-FOR mapea el promedio a una letra con un EVALUATE con guardas.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 2 de 3 en Bis; paso 26 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →