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-NUM2
yWS-RESULT
. - Utiliza la sentencia
CALL
para invocar al subprogramaAddNumbers
, pasandoWS-NUM1
,WS-NUM2
yWS-RESULT
como 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
PROCEDURE
realiza la suma deLK-NUM1
yLK-NUM2
, almacenando el resultado enLK-RESULT
. - La sentencia
EXIT PROGRAM
finaliza 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-NUM1
yWS-NUM2
. - Llama al subprograma
MultiplyNumbers
pasandoWS-NUM1
,WS-NUM2
yWS-RESULT
como 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-NUM2
yLK-RESULT
. - Realiza la multiplicación de
LK-NUM1
yLK-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
LINKAGE
del subprograma coincidan en tipo y tamaño con los parámetros pasados desde el programa principal. - Olvidar la Sentencia
USING
: La sentenciaUSING
es obligatoria cuando se pasan parámetros. No olvides incluirla tanto en el programa principal como en el subprograma. - No Utilizar
EXIT PROGRAM
: Siempre utilizaEXIT PROGRAM
para 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