En este tema, aprenderemos sobre las estructuras de control anidadas en COBOL. Las estructuras de control anidadas permiten a los programadores crear programas más complejos y flexibles al combinar múltiples estructuras de control dentro de otras. Esto es esencial para manejar situaciones en las que se deben tomar decisiones basadas en múltiples condiciones o realizar operaciones repetitivas dentro de otras operaciones repetitivas.

Conceptos Clave

  1. Estructuras de Control: Son las instrucciones que controlan el flujo de ejecución de un programa.
  2. Anidación: Es el proceso de colocar una estructura de control dentro de otra.
  3. Sentencias Condicionales: Instrucciones que ejecutan diferentes bloques de código basados en condiciones.
  4. Constructos de Bucle: Instrucciones que repiten un bloque de código varias veces.

Ejemplo de Sentencias Condicionales Anidadas

Las sentencias condicionales anidadas permiten evaluar múltiples condiciones de manera jerárquica. Aquí hay un ejemplo básico:

IDENTIFICATION DIVISION.
PROGRAM-ID. NestedConditionals.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 AGE PIC 99.
01 GENDER PIC X.

PROCEDURE DIVISION.
    DISPLAY "Enter age: " WITH NO ADVANCING.
    ACCEPT AGE.
    DISPLAY "Enter gender (M/F): " WITH NO ADVANCING.
    ACCEPT GENDER.

    IF AGE > 18 THEN
        IF GENDER = 'M' THEN
            DISPLAY "Adult Male"
        ELSE
            DISPLAY "Adult Female"
        END-IF
    ELSE
        IF GENDER = 'M' THEN
            DISPLAY "Minor Male"
        ELSE
            DISPLAY "Minor Female"
        END-IF
    END-IF.

    STOP RUN.

Explicación del Código

  1. Entrada de Datos: Se solicita al usuario que ingrese la edad y el género.
  2. Condicional Principal: IF AGE > 18 verifica si la persona es mayor de edad.
  3. Condicional Anidado: Dentro del primer IF, se verifica el género.
  4. Salida: Dependiendo de las condiciones, se muestra un mensaje adecuado.

Ejemplo de Constructos de Bucle Anidados

Los bucles anidados permiten realizar operaciones repetitivas dentro de otras operaciones repetitivas. Aquí hay un ejemplo básico:

IDENTIFICATION DIVISION.
PROGRAM-ID. NestedLoops.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 I PIC 9 VALUE 0.
01 J PIC 9 VALUE 0.

PROCEDURE DIVISION.
    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3
        PERFORM VARYING J FROM 1 BY 1 UNTIL J > 3
            DISPLAY "I = " I " J = " J
        END-PERFORM
    END-PERFORM.

    STOP RUN.

Explicación del Código

  1. Bucles Externos e Internos: PERFORM VARYING I es el bucle externo y PERFORM VARYING J es el bucle interno.
  2. Iteración: El bucle interno se ejecuta completamente para cada iteración del bucle externo.
  3. Salida: Se muestra el valor de I y J en cada iteración.

Ejercicio Práctico

Ejercicio

Escribe un programa COBOL que solicite al usuario ingresar una calificación (A, B, C, D, F) y un número de créditos (1-5). El programa debe mostrar un mensaje basado en la combinación de calificación y créditos. Por ejemplo, si la calificación es 'A' y los créditos son 3, el mensaje podría ser "Excelente, 3 créditos".

Solución

IDENTIFICATION DIVISION.
PROGRAM-ID. GradeCredits.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 GRADE PIC X.
01 CREDITS PIC 9.

PROCEDURE DIVISION.
    DISPLAY "Enter grade (A/B/C/D/F): " WITH NO ADVANCING.
    ACCEPT GRADE.
    DISPLAY "Enter number of credits (1-5): " WITH NO ADVANCING.
    ACCEPT CREDITS.

    IF GRADE = 'A' THEN
        IF CREDITS = 1 THEN
            DISPLAY "Excellent, 1 credit"
        ELSE IF CREDITS = 2 THEN
            DISPLAY "Excellent, 2 credits"
        ELSE IF CREDITS = 3 THEN
            DISPLAY "Excellent, 3 credits"
        ELSE IF CREDITS = 4 THEN
            DISPLAY "Excellent, 4 credits"
        ELSE
            DISPLAY "Excellent, 5 credits"
        END-IF
    ELSE IF GRADE = 'B' THEN
        IF CREDITS = 1 THEN
            DISPLAY "Good, 1 credit"
        ELSE IF CREDITS = 2 THEN
            DISPLAY "Good, 2 credits"
        ELSE IF CREDITS = 3 THEN
            DISPLAY "Good, 3 credits"
        ELSE IF CREDITS = 4 THEN
            DISPLAY "Good, 4 credits"
        ELSE
            DISPLAY "Good, 5 credits"
        END-IF
    ELSE IF GRADE = 'C' THEN
        IF CREDITS = 1 THEN
            DISPLAY "Average, 1 credit"
        ELSE IF CREDITS = 2 THEN
            DISPLAY "Average, 2 credits"
        ELSE IF CREDITS = 3 THEN
            DISPLAY "Average, 3 credits"
        ELSE IF CREDITS = 4 THEN
            DISPLAY "Average, 4 credits"
        ELSE
            DISPLAY "Average, 5 credits"
        END-IF
    ELSE IF GRADE = 'D' THEN
        IF CREDITS = 1 THEN
            DISPLAY "Below Average, 1 credit"
        ELSE IF CREDITS = 2 THEN
            DISPLAY "Below Average, 2 credits"
        ELSE IF CREDITS = 3 THEN
            DISPLAY "Below Average, 3 credits"
        ELSE IF CREDITS = 4 THEN
            DISPLAY "Below Average, 4 credits"
        ELSE
            DISPLAY "Below Average, 5 credits"
        END-IF
    ELSE
        IF CREDITS = 1 THEN
            DISPLAY "Fail, 1 credit"
        ELSE IF CREDITS = 2 THEN
            DISPLAY "Fail, 2 credits"
        ELSE IF CREDITS = 3 THEN
            DISPLAY "Fail, 3 credits"
        ELSE IF CREDITS = 4 THEN
            DISPLAY "Fail, 4 credits"
        ELSE
            DISPLAY "Fail, 5 credits"
        END-IF
    END-IF.

    STOP RUN.

Explicación del Código

  1. Entrada de Datos: Se solicita al usuario que ingrese la calificación y el número de créditos.
  2. Condicional Principal: IF GRADE = 'A' verifica la calificación.
  3. Condicional Anidado: Dentro de cada calificación, se verifica el número de créditos.
  4. Salida: Dependiendo de las condiciones, se muestra un mensaje adecuado.

Resumen

En esta sección, hemos aprendido sobre las estructuras de control anidadas en COBOL, incluyendo sentencias condicionales y constructos de bucle anidados. Estas técnicas son esenciales para escribir programas más complejos y flexibles. Asegúrate de practicar estos conceptos con diferentes ejemplos y ejercicios para dominar su uso.

En el próximo módulo, exploraremos cómo manejar archivos en COBOL, lo cual es crucial para trabajar con datos persistentes.

© Copyright 2024. Todos los derechos reservados