La sentència CALL
en COBOL és una instrucció utilitzada per invocar subprogrames o procediments des d'un programa principal. Aquesta funcionalitat permet la modularització del codi, facilitant la seva reutilització i manteniment. En aquest tema, explorarem com utilitzar la sentència CALL
, els diferents tipus de subprogrames que es poden invocar, i com passar paràmetres entre el programa principal i els subprogrames.
Conceptes Clau
- Subprograma: Un bloc de codi que es pot invocar des d'un altre programa o subprograma.
- Programa Principal: El programa que invoca el subprograma.
- Paràmetres: Dades que es passen entre el programa principal i el subprograma.
Estructura de la Sentència CALL
La sintaxi bàsica de la sentència CALL
és la següent:
nom-del-subprograma
: El nom del subprograma que es vol invocar.paràmetre1, paràmetre2, ...
: Els paràmetres que es passen al subprograma.
Exemple Pràctic
Programa Principal
A continuació, es mostra un exemple d'un programa principal que invoca un subprograma anomenat SUBPROG
:
IDENTIFICATION DIVISION. PROGRAM-ID. MAINPROG. 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(2). PROCEDURE DIVISION. DISPLAY 'Invocant el subprograma SUBPROG'. CALL 'SUBPROG' USING WS-NUM1, WS-NUM2, WS-RESULT. DISPLAY 'El resultat és: ' WS-RESULT. STOP RUN.
Subprograma
El subprograma SUBPROG
que realitza una operació aritmètica simple (suma) és el següent:
IDENTIFICATION DIVISION. PROGRAM-ID. SUBPROG. DATA DIVISION. LINKAGE SECTION. 01 LK-NUM1 PIC 9(2). 01 LK-NUM2 PIC 9(2). 01 LK-RESULT PIC 9(2). PROCEDURE DIVISION USING LK-NUM1, LK-NUM2, LK-RESULT. COMPUTE LK-RESULT = LK-NUM1 + LK-NUM2. EXIT PROGRAM.
Explicació del Codi
-
Programa Principal (
MAINPROG
):- Declara tres variables en la secció
WORKING-STORAGE
:WS-NUM1
,WS-NUM2
, iWS-RESULT
. - Utilitza la sentència
CALL
per invocar el subprogramaSUBPROG
, passant les variablesWS-NUM1
,WS-NUM2
, iWS-RESULT
com a paràmetres. - Mostra el resultat retornat pel subprograma.
- Declara tres variables en la secció
-
Subprograma (
SUBPROG
):- Declara tres variables en la secció
LINKAGE
:LK-NUM1
,LK-NUM2
, iLK-RESULT
. - Defineix el procediment
USING
per rebre els paràmetres del programa principal. - Realitza una operació de suma i emmagatzema el resultat en
LK-RESULT
. - Utilitza la sentència
EXIT PROGRAM
per tornar al programa principal.
- Declara tres variables en la secció
Exercicis Pràctics
Exercici 1: Multiplicació de Nombres
Crea un programa principal que invoqui un subprograma per multiplicar dos nombres. El programa principal ha de passar dos nombres al subprograma i mostrar el resultat de la multiplicació.
Solució
Programa Principal:
IDENTIFICATION DIVISION. PROGRAM-ID. MAINPROG. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUM1 PIC 9(2) VALUE 5. 01 WS-NUM2 PIC 9(2) VALUE 4. 01 WS-RESULT PIC 9(2). PROCEDURE DIVISION. DISPLAY 'Invocant el subprograma MULTIPLYPROG'. CALL 'MULTIPLYPROG' USING WS-NUM1, WS-NUM2, WS-RESULT. DISPLAY 'El resultat de la multiplicació és: ' WS-RESULT. STOP RUN.
Subprograma:
IDENTIFICATION DIVISION. PROGRAM-ID. MULTIPLYPROG. DATA DIVISION. LINKAGE SECTION. 01 LK-NUM1 PIC 9(2). 01 LK-NUM2 PIC 9(2). 01 LK-RESULT PIC 9(2). PROCEDURE DIVISION USING LK-NUM1, LK-NUM2, LK-RESULT. COMPUTE LK-RESULT = LK-NUM1 * LK-NUM2. EXIT PROGRAM.
Exercici 2: Concatenació de Cadenes
Crea un programa principal que invoqui un subprograma per concatenar dues cadenes de text. El programa principal ha de passar dues cadenes al subprograma i mostrar la cadena concatenada.
Solució
Programa Principal:
IDENTIFICATION DIVISION. PROGRAM-ID. MAINPROG. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-STRING1 PIC X(10) VALUE 'Hola'. 01 WS-STRING2 PIC X(10) VALUE 'Món'. 01 WS-RESULT PIC X(20). PROCEDURE DIVISION. DISPLAY 'Invocant el subprograma CONCATPROG'. CALL 'CONCATPROG' USING WS-STRING1, WS-STRING2, WS-RESULT. DISPLAY 'La cadena concatenada és: ' WS-RESULT. STOP RUN.
Subprograma:
IDENTIFICATION DIVISION. PROGRAM-ID. CONCATPROG. DATA DIVISION. LINKAGE SECTION. 01 LK-STRING1 PIC X(10). 01 LK-STRING2 PIC X(10). 01 LK-RESULT PIC X(20). PROCEDURE DIVISION USING LK-STRING1, LK-STRING2, LK-RESULT. STRING LK-STRING1 DELIMITED BY SPACE LK-STRING2 DELIMITED BY SPACE INTO LK-RESULT. EXIT PROGRAM.
Errors Comuns i Solucions
- No Coincidència de Paràmetres: Assegura't que el nombre i tipus de paràmetres en la sentència
CALL
coincideixin amb els declarats en el subprograma. - Variables No Inicialitzades: Inicialitza les variables abans de passar-les com a paràmetres per evitar resultats inesperats.
- Manca de la Sentència
EXIT PROGRAM
: Inclou sempre la sentènciaEXIT PROGRAM
al final del subprograma per assegurar un retorn correcte al programa principal.
Resum
En aquesta secció, hem après com utilitzar la sentència CALL
per invocar subprogrames en COBOL. Hem vist exemples pràctics de com passar paràmetres entre el programa principal i els subprogrames, i hem practicat amb exercicis per reforçar els conceptes apresos. La modularització del codi mitjançant subprogrames és una tècnica poderosa que millora la llegibilitat i mantenibilitat dels programes COBOL.
Curs de Programació COBOL
Mòdul 1: Introducció al COBOL
- Què és el COBOL?
- Història del COBOL
- Configuració de l'Entorn COBOL
- Estructura Bàsica d'un Programa COBOL
Mòdul 2: Sintaxi Bàsica del COBOL i Tipus de Dades
Mòdul 3: Estructures de Control
Mòdul 4: Treballant amb Dades
- Gestió d'Arxius en COBOL
- Processament d'Arxius Seqüencials
- Processament d'Arxius Indexats
- Processament d'Arxius Relatius
Mòdul 5: Gestió Avançada de Dades
Mòdul 6: Subprogrames i Programació Modular
Mòdul 7: Gestió d'Errors i Depuració
Mòdul 8: COBOL i Bases de Dades
Mòdul 9: Temes Avançats
- COBOL Orientat a Objectes
- COBOL i Serveis Web
- Optimització del Rendiment
- Millors Pràctiques en Programació COBOL