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

  1. Subprograma: Un bloque de código que realiza una tarea específica y puede ser llamado desde otros programas.
  2. Programa Principal: El programa que llama a uno o más subprogramas.
  3. 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:

CALL 'subprogram-name' USING parameter-1, parameter-2, ...
  • 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

  1. Programa Principal:

    • Define tres variables en la sección WORKING-STORAGE: WS-NUM1, WS-NUM2 y WS-RESULT.
    • Utiliza la sentencia CALL para invocar al subprograma AddNumbers, pasando WS-NUM1, WS-NUM2 y WS-RESULT como parámetros.
    • Muestra el resultado de la operación en la pantalla.
  2. 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 de LK-NUM1 y LK-NUM2, almacenando el resultado en LK-RESULT.
    • La sentencia EXIT PROGRAM finaliza la ejecución del subprograma y devuelve el control al programa principal.

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

  1. Programa Principal:

    • Solicita al usuario que ingrese dos números y los almacena en WS-NUM1 y WS-NUM2.
    • Llama al subprograma MultiplyNumbers pasando WS-NUM1, WS-NUM2 y WS-RESULT como parámetros.
    • Muestra el resultado de la multiplicación en la pantalla.
  2. Subprograma:

    • Recibe los parámetros LK-NUM1, LK-NUM2 y LK-RESULT.
    • Realiza la multiplicación de LK-NUM1 y LK-NUM2, almacenando el resultado en LK-RESULT.
    • Finaliza la ejecución del subprograma y devuelve el control al programa principal.

Errores Comunes y Consejos

  1. 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.
  2. Olvidar la Sentencia USING: La sentencia USING es obligatoria cuando se pasan parámetros. No olvides incluirla tanto en el programa principal como en el subprograma.
  3. No Utilizar EXIT PROGRAM: Siempre utiliza EXIT 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.

© Copyright 2024. Todos los derechos reservados