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
- Estructuras de Control: Son las instrucciones que controlan el flujo de ejecución de un programa.
- Anidación: Es el proceso de colocar una estructura de control dentro de otra.
- Sentencias Condicionales: Instrucciones que ejecutan diferentes bloques de código basados en condiciones.
- 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
- Entrada de Datos: Se solicita al usuario que ingrese la edad y el género.
- Condicional Principal:
IF AGE > 18
verifica si la persona es mayor de edad. - Condicional Anidado: Dentro del primer
IF
, se verifica el género. - 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
- Bucles Externos e Internos:
PERFORM VARYING I
es el bucle externo yPERFORM VARYING J
es el bucle interno. - Iteración: El bucle interno se ejecuta completamente para cada iteración del bucle externo.
- Salida: Se muestra el valor de
I
yJ
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
- Entrada de Datos: Se solicita al usuario que ingrese la calificación y el número de créditos.
- Condicional Principal:
IF GRADE = 'A'
verifica la calificación. - Condicional Anidado: Dentro de cada calificación, se verifica el número de créditos.
- 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.
Curso de Programación COBOL
Módulo 1: Introducción a COBOL
- ¿Qué es COBOL?
- Historia de COBOL
- Configuración del Entorno COBOL
- Estructura Básica de un Programa COBOL
Módulo 2: Sintaxis Básica de COBOL y Tipos de Datos
Módulo 3: Estructuras de Control
Módulo 4: Trabajando con Datos
- Manejo de Archivos en COBOL
- Procesamiento de Archivos Secuenciales
- Procesamiento de Archivos Indexados
- Procesamiento de Archivos Relativos
Módulo 5: Manejo Avanzado de Datos
Módulo 6: Subprogramas y Programación Modular
Módulo 7: Manejo de Errores y Depuración
Módulo 8: COBOL y Bases de Datos
Módulo 9: Temas Avanzados
- COBOL Orientado a Objetos
- COBOL y Servicios Web
- Optimización del Rendimiento
- Mejores Prácticas en Programación COBOL