Continuamos con esta serie de entregas sobre el lenguaje COBOL.
En esta ocasión veremos:
- Ejemplos del uso del verbo ``PERFORM``.
- Ejemplos de uso de sentencias ``GO TO``.
- Ejemplos de campos empacados.
- Ejemplos del uso de los verbos ``MOVE``, ``ADD``, ``SUBTRACT``, etc.
- Ejemplos del uso de ``COMPUTE``.
PERFORM
Una instrucción que nos permite transferir el control a otro u otros procedimientos o bien realizar una serie de sentencias dentro de ella misma mientras se cumplan las condiciones que le hayamos indicado. Permite retornar a la línea inmediata, contrario a la instrucción```GOT TO``.
parrafos.cbl
IDENTIFICATION DIVISION. PROGRAM-ID. PARRAFOS. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-N1 PIC 9(3) VALUE 5. 01 WS-N2 PIC 9(4) VALUE 7. 01 WS-N3 PIC 9(4) VALUE 8. 01 WS-NA PIC 9(3) VALUE 80. 01 WS-NB PIC 9(3) VALUE 20. 01 WS-NC PIC 9(3). PROCEDURE DIVISION. INICIO. PERFORM PRESENTACION. PERFORM CALCULAR. PERFORM RESULTADO. CALCULAR. COMPUTE WS-NC= (WS-N1 * WS-N2) - (WS-NA / WS-NB) + WS-N3. PRESENTACION. DISPLAY "[ USO DE SENTENCIA PERFORM ]". RESULTADO. DISPLAY "WS-NUM1 : " WS-N1 DISPLAY "WS-NUM2 : " WS-N2 DISPLAY "WS-NUM3 : " WS-N3 DISPLAY "WS-NUMA : " WS-NA DISPLAY "WS-NUMB : " WS-NB DISPLAY "RESULTADO DE LA OPERACION : " WS-NC STOP RUN.
El programa contiene 4 párrafos:
-
INICIO, que es el inicio del programa y donde se colocan las instrucciones ``PERFORM`` para ir a determinado párrafo.
- PRESENTACION, párrafo donde se muestra el mensaje de inicio o presentación del programa.
- CALCULAR, párrafo donde se llevan a cabo las operaciones.
- RESULTADO, párrafo donde se muestran los resultados de las operaciones.
PERFORM se clasifica principalmente en dos tipos:
- PERFORM en línea.
- PERFORM fuera de línea.
En línea:
PERFORM DISPLAY 'PROGRAMANDO EN COBOL!!' END-PERFORM.
Fuera de línea:
PERFORM MAIN-PROCESS THRU PROCESS-EXIT.
PERFORM UNTIL y PERFORM VARIYING
Ambas instrucciones nos servirán para crear bucles.
parrafosthree.cbl
****************************************************************** * Author: ALQUIMISTA DE CODIGO. * Date: 09/06/2024. * Purpose: How to use PERFORM UNTIL. * Tectonics: cbl ****************************************************************** IDENTIFICATION DIVISION. PROGRAM-ID. PARRAFOSTHREE. AUTHOR. ALQUIMISTA DE CODIGO. DATA DIVISION. FILE SECTION. WORKING-STORAGE SECTION. 01 NUMERO PIC 999. PROCEDURE DIVISION. MAIN-PROCEDURE. INICIO. PERFORM PRESENTACION. PERFORM OPERACION UNTIL NUMERO = 10. DISPLAY "Hecho!!" STOP RUN. OPERACION. ADD 1 TO NUMERO. DISPLAY "NUMERO: "NUMERO. PRESENTACION. DISPLAY "[ USO DE PERFORM UNTIL ]". END PROGRAM PARRAFOSTHREE.
En este caso, se va a hacer un ``PERFORM`` todas las veces que sea necesarias hasta que la variable NUMERO valga 10.
parrafosfour.cbl
****************************************************************** * Author: ALQUIMISTA DE CODIGO. * Date: 05/02/2024. * Purpose: How to use PERFORM VARYING. * Tectonics: cbl ****************************************************************** IDENTIFICATION DIVISION. PROGRAM-ID. PARRAFOSFOUR. AUTHOR. ALQUIMISTA DE CODIGO. DATA DIVISION. FILE SECTION. WORKING-STORAGE SECTION. 01 NUM PIC 999. PROCEDURE DIVISION. MAIN-PROCEDURE. INICIO. PERFORM PRESENTACION. PERFORM OPERACION VARYING NUM FROM 10 BY 2 UNTIL NUM > 25. DISPLAY "Hecho!!" STOP RUN. OPERACION. ADD 1 TO NUM. DISPLAY "NUMERO: "NUM. PRESENTACION. DISPLAY "[ USO DE PERFORM VARYING ]". END PROGRAM PARRAFOSFOUR.
Similar al ``PERFORM UNTIL``, pero más controlado. Ambos para crear bucles en nuestros programas.
Aquí otro ejemplo del uso de ``PERFORM UNTIL``
parrafountil.cbl
****************************************************************** * Author: ALQUIMISTA DE CODIGO * Date: 2024/06/09 * Purpose: How to use PERFORM UNTIL * Tectonics: cbl ****************************************************************** IDENTIFICATION DIVISION. PROGRAM-ID. PARRAFOUNTIL. DATA DIVISION. FILE SECTION. WORKING-STORAGE SECTION. 01 CONTEO PICTURE 9(2) VALUE 1. PROCEDURE DIVISION. MAIN-PROCEDURE. INICIO. PERFORM PRESENTACION. PERFORM CALCULO. PERFORM TERMINAR. TERMINAR. DISPLAY "Hecho!!". STOP RUN. PRESENTACION. DISPLAY "[ USO DE PERFORM UNTIL ]". CALCULO. PERFORM UNTIL CONTEO > 10 DISPLAY CONTEO ADD 1 TO CONTEO END-PERFORM. END PROGRAM PARRAFOUNTIL.
En este caso el ``PERFORM`` es de tipo en línea.
GO TO
Transfiere el control de una parte de la División de Procedimientos a otra. Al contrario de ```PERFORM`` no retorna a la línea inmediata, no vuelve hacia atrás.
usego.cbl
****************************************************************** * Author: ALQUIMISTA DE CODIGO * Date: 2024-06-08 * Purpose: How to use GOTO sentence * Tectonics: cobc ****************************************************************** IDENTIFICATION DIVISION. PROGRAM-ID. USE-GO. DATA DIVISION. FILE SECTION. WORKING-STORAGE SECTION. 01 RESPUESTA PIC X. PROCEDURE DIVISION. MAIN-PROCEDURE. PERFORM EJECUTAR. IF RESPUESTA = "S" OR RESPUESTA = "s" GO TO FIN-PROGRAMA. IF RESPUESTA = "N" OR RESPUESTA = "n" PERFORM INICIO ELSE DISPLAY "INTRODUCE 'S' o 'N'". *> Termina el programa FIN-PROGRAMA. DISPLAY "Decimos good bye!" STOP RUN. *> Pregunta EJECUTAR. DISPLAY "Desea salir ? [s] [n]". ACCEPT RESPUESTA. *> Muestra mensaje INICIO. DISPLAY "Ejemplo del uso de GOTO". END PROGRAM USE-GO.
COMPUTE
Una instrucción que asigna el valor de una expresión aritmética a uno o más elementos de datos. Es más eficiente que las declaraciones aritméticas separadas escritas en una serie.
calculos.cbl
IDENTIFICATION DIVISION. PROGRAM-ID. CALCULOS. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-N1 PIC 9(3) VALUE 5. 01 WS-N2 PIC 9(4) VALUE 7. 01 WS-N3 PIC 9(4) VALUE 8. 01 WS-NA PIC 9(3) VALUE 80. 01 WS-NB PIC 9(3) VALUE 20. 01 WS-NC PIC 9(3). PROCEDURE DIVISION. COMPUTE WS-NC= (WS-N1 * WS-N2) - (WS-NA / WS-NB) + WS-N3. DISPLAY "WS-NUM1 : " WS-N1 DISPLAY "WS-NUM2 : " WS-N2 DISPLAY "WS-NUM3 : " WS-N3 DISPLAY "WS-NUMA : " WS-NA DISPLAY "WS-NUMB : " WS-NB DISPLAY "RESULTADO DE LA OPERACION : " WS-NC STOP RUN.
MOVE [TO]
Este verbo, junto con TO, nos permite la asignación de valores a variables.
asignar.cbl
IDENTIFICATION DIVISION. PROGRAM-ID. ASIGNAR. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-N1 PIC 9(3). 01 WS-N2 PIC 9(4). 01 WS-N3 PIC 9(4). 01 WS-NA PIC 9(3). 01 WS-NB PIC 9(3). 01 WS-NC PIC 9(3). PROCEDURE DIVISION. INICIO. PERFORM PRESENTACION. PERFORM ASIGNACION. PERFORM CALCULAR. PERFORM RESULTADO. ASIGNACION. MOVE 7 TO WS-N2. MOVE 8 TO WS-N3. MOVE 20 TO WS-NB. MOVE 80 TO WS-NA. MOVE 5 TO WS-N1. CALCULAR. COMPUTE WS-NC= (WS-N1 * WS-N2) - (WS-NA / WS-NB) + WS-N3. PRESENTACION. DISPLAY "[ USO DE SENTENCIA PERFORM]". RESULTADO. DISPLAY "WS-NUM1 : " WS-N1 DISPLAY "WS-NUM2 : " WS-N2 DISPLAY "WS-NUM3 : " WS-N3 DISPLAY "WS-NUMA : " WS-NA DISPLAY "WS-NUMB : " WS-NB DISPLAY "RESULTADO DE LA OPERACION : " WS-NC STOP RUN.
ACCEPT
Es la instrucción que nos permite la entrada de datos.
pulsaciones.cbl
IDENTIFICATION DIVISION. PROGRAM-ID. PULSACIONES. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-AGE PIC 99. 01 WS-WEIGHT PIC 999V9. 01 WS-PULSE-RATE PIC 999V9. 01 WS-INTERMEDIATE-VALUE PIC 999V9. PROCEDURE DIVISION. MAIN-PARAGRAPH. PERFORM GET-INPUTS. PERFORM CALCULATE-PULSE-RATE. PERFORM DISPLAY-RESULT. GET-INPUTS. DISPLAY "Ingrese la edad: " WITH NO ADVANCING. ACCEPT WS-AGE DISPLAY "Ingrese el peso en kg: " WITH NO ADVANCING. ACCEPT WS-WEIGHT. CALCULATE-PULSE-RATE. COMPUTE WS-INTERMEDIATE-VALUE = 0.5 * WS-AGE COMPUTE WS-PULSE-RATE = 210 - WS-INTERMEDIATE-VALUE COMPUTE WS-INTERMEDIATE-VALUE = 0.11 * WS-WEIGHT COMPUTE WS-PULSE-RATE = WS-PULSE-RATE - WS-INTERMEDIATE-VALUE. DISPLAY-RESULT. DISPLAY "Las pulsaciones por minuto son: " WS-PULSE-RATE. STOP RUN. END PROGRAM PULSACIONES.
Continuaremos con esta serie en próximas entregas.
Enlaces:
http://www.consultoriocobol.com/https://cobol.es/
http://www.universocobol.com/
https://www.ibmmainframer.com/cobol-tutorial/cobol-add-statement/
https://www.programacionfacil.org/cursos/cobol/capitulo_11_rutinas_go_to.html
https://cobolcoder.com/bucle-con-cobol-perform-varying/
Comentarios
Publicar un comentario