La sentencia CALL en COBOL se utiliza para invocar subprogramas desde un programa principal. Esta capacidad de dividir un programa en módulos más pequeños y manejables es fundamental para la programación modular y la reutilización de código. En esta sección, aprenderás cómo utilizar la sentencia CALL para llamar a subprogramas, cómo pasar parámetros y cómo manejar el retorno de valores.
Conceptos Clave
- Subprograma: Un bloque de código que realiza una tarea específica y puede ser llamado desde otros programas.
- Programa Principal: El programa que llama a uno o más subprogramas.
- Parámetros: Datos que se pasan entre el programa principal y el subprograma.
Sintaxis de la Sentencia CALL
La sintaxis básica de la sentencia CALL es la siguiente:
subprogram-name: El nombre del subprograma que se va a llamar. Debe estar entre comillas simples.USING: Palabra clave que indica que se están pasando parámetros al subprograma.parameter-1, parameter-2, ...: Los parámetros que se pasan al subprograma. Pueden ser variables, literales o estructuras de datos.
Ejemplo Práctico
Programa Principal
IDENTIFICATION DIVISION.
PROGRAM-ID. MainProgram.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC 9(2) VALUE 10.
01 WS-NUM2 PIC 9(2) VALUE 20.
01 WS-RESULT PIC 9(4).
PROCEDURE DIVISION.
DISPLAY 'Llamando al subprograma AddNumbers...'.
CALL 'AddNumbers' USING WS-NUM1, WS-NUM2, WS-RESULT.
DISPLAY 'Resultado: ' WS-RESULT.
STOP RUN.Subprograma
IDENTIFICATION DIVISION.
PROGRAM-ID. AddNumbers.
DATA DIVISION.
LINKAGE SECTION.
01 LK-NUM1 PIC 9(2).
01 LK-NUM2 PIC 9(2).
01 LK-RESULT PIC 9(4).
PROCEDURE DIVISION USING LK-NUM1, LK-NUM2, LK-RESULT.
COMPUTE LK-RESULT = LK-NUM1 + LK-NUM2.
EXIT PROGRAM.Explicación del Código
-
Programa Principal:
- Define tres variables en la sección
WORKING-STORAGE:WS-NUM1,WS-NUM2yWS-RESULT. - Utiliza la sentencia
CALLpara invocar al subprogramaAddNumbers, pasandoWS-NUM1,WS-NUM2yWS-RESULTcomo parámetros. - Muestra el resultado de la operación en la pantalla.
- Define tres variables en la sección
-
Subprograma:
- Define las variables en la sección
LINKAGE, que se utilizarán para recibir los parámetros del programa principal. - La sección
PROCEDURErealiza la suma deLK-NUM1yLK-NUM2, almacenando el resultado enLK-RESULT. - La sentencia
EXIT PROGRAMfinaliza la ejecución del subprograma y devuelve el control al programa principal.
- Define las variables en la sección
Ejercicio Práctico
Ejercicio
Escribe un programa principal y un subprograma en COBOL que realicen la multiplicación de dos números. El programa principal debe solicitar al usuario que ingrese dos números, llamar al subprograma para realizar la multiplicación y luego mostrar el resultado.
Solución
Programa Principal
IDENTIFICATION DIVISION.
PROGRAM-ID. MainProgram.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM1 PIC 9(4).
01 WS-NUM2 PIC 9(4).
01 WS-RESULT PIC 9(8).
PROCEDURE DIVISION.
DISPLAY 'Ingrese el primer número: '.
ACCEPT WS-NUM1.
DISPLAY 'Ingrese el segundo número: '.
ACCEPT WS-NUM2.
CALL 'MultiplyNumbers' USING WS-NUM1, WS-NUM2, WS-RESULT.
DISPLAY 'Resultado: ' WS-RESULT.
STOP RUN.Subprograma
IDENTIFICATION DIVISION.
PROGRAM-ID. MultiplyNumbers.
DATA DIVISION.
LINKAGE SECTION.
01 LK-NUM1 PIC 9(4).
01 LK-NUM2 PIC 9(4).
01 LK-RESULT PIC 9(8).
PROCEDURE DIVISION USING LK-NUM1, LK-NUM2, LK-RESULT.
COMPUTE LK-RESULT = LK-NUM1 * LK-NUM2.
EXIT PROGRAM.Explicación del Código
-
Programa Principal:
- Solicita al usuario que ingrese dos números y los almacena en
WS-NUM1yWS-NUM2. - Llama al subprograma
MultiplyNumberspasandoWS-NUM1,WS-NUM2yWS-RESULTcomo parámetros. - Muestra el resultado de la multiplicación en la pantalla.
- Solicita al usuario que ingrese dos números y los almacena en
-
Subprograma:
- Recibe los parámetros
LK-NUM1,LK-NUM2yLK-RESULT. - Realiza la multiplicación de
LK-NUM1yLK-NUM2, almacenando el resultado enLK-RESULT. - Finaliza la ejecución del subprograma y devuelve el control al programa principal.
- Recibe los parámetros
Errores Comunes y Consejos
- No Declarar Correctamente los Parámetros: Asegúrate de que los parámetros en la sección
LINKAGEdel subprograma coincidan en tipo y tamaño con los parámetros pasados desde el programa principal. - Olvidar la Sentencia
USING: La sentenciaUSINGes obligatoria cuando se pasan parámetros. No olvides incluirla tanto en el programa principal como en el subprograma. - No Utilizar
EXIT PROGRAM: Siempre utilizaEXIT PROGRAMpara finalizar un subprograma y devolver el control al programa principal.
Conclusión
La sentencia CALL es una herramienta poderosa en COBOL que permite la modularización y reutilización de código. Al aprender a utilizar CALL y a manejar subprogramas, puedes escribir programas más organizados y fáciles de mantener. En la próxima sección, exploraremos cómo pasar parámetros de manera más avanzada y cómo manejar diferentes tipos de datos en subprogramas.
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
