Ir al contenido principal

COBOL para principiantes #7

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

Entradas populares de este blog

Odin language: el lenguaje de programación orientado a datos para un desarrollo de software sensato

En esta serie sobre lenguajes de programación hablamos de Odin , un lenguaje orientado a datos. Un nuevo lenguaje de programación que nos podrá recordar a lenguajes como C++, Python, Golang o hasta Rust. Instalación (Windows): 1 2 3 4 $ git clone https://github.com/odin-lang/Odin $ cd Odin $ git pull $ build.bat release Debemos asegurarnos de crear la variable de entorno: Nombre: ODIN_HOME Valor: C:\Users\HP\Documents\pruebasOdin\Odin Ejemplo 1. Como primer programa tendremos al clásico "Hola, mundo". holamundo.odin package holamundo import " core:fmt " main : : proc ( ) { fmt . println ( " ¡Hola, mundo desde Odin! " ) } Construimos: $ odin build holamundo . odin - file Ejecutamos: $ holamundo .exe Recordar que si usamos Visual Studio Code podemos instalar el plugin de Odin Language: https://marketplace.visualstudio.com/items?itemName=DanielGavin.ols Ejemplo 2. Programa que muestre las variables que pod...

Programación Windows Batch (CMD) parte 3

Crear ciclos para efectuar operaciones tediosas nos ahorrará tiempo para realizar otras tareas. En está ocasión veremos ciclos con FOR . ¿Cuál es la síntaxis de bucle FOR en Windows Batch? Si está dentro de un archivo *.bat : FOR %%variable IN (seq) DO operaciones Si lo ejecutamos en una terminal: FOR %variable IN (seq) DO operaciones Ejemplo 1 . Recorrer una secuencia de números del 0 al 5: recorrer.bat @ echo off FOR %%i in ( 0 1 2 3 4 5 ) DO echo Hola no. %%i pause Nos imprimirá en pantalla: Hola no. 0 Hola no. 1 Hola no. 2 Hola no. 3 Hola no. 4 Hola no. 5 ¿Puedo usar contadores? Si, se pueden usar. Ejemplo 2 . Uso de contadores: contador.bat @ echo off set numeros = 1 2 3 4 5 6 7 8 9 10 set cont = 0 for %%a in ( %numeros% ) do ( echo Hola no. %%a :: Contador set /a cont+ = 1 ) echo Total: %cont% Este código nos imprimirá, además de los mensajes Hola no. 0 ..., el total de valores conta...

z/OS, ¿Qué es? y ¿Cuáles son sus herramientas?

  En este post veremos las herramientas de z/OS de IBM. z/OS es un sistema operativo de mainframe desarrollado por IBM.  Es parte de la serie IBM z Systems (anteriormente conocida como System z), que se utiliza en los sistemas mainframe de IBM. z/OS es uno de los sistemas operativos más utilizados en el mundo empresarial para ejecutar aplicaciones críticas y procesar grandes volúmenes de datos. Características clave de z/OS: Escalabilidad : z/OS es conocido por su capacidad para manejar grandes cargas de trabajo y escalabilidad vertical, lo que permite agregar recursos de hardware para satisfacer las demandas de procesamiento. Confiabilidad y disponibilidad : z/OS está diseñado para ofrecer alta disponibilidad y confiabilidad. Incorpora características como redundancia y recuperación ante fallas para garantizar la continuidad de las operaciones. Seguridad : Proporciona una amplia gama de funciones de seguridad, como autenticación, autorización y auditoría, para proteger los...