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

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

Programación Windows Batch (CMD) parte 4

Siguiendo con la serie de post sobre programación ( 1 , 2 , y 3 ) batch ahora veremos algunas cosas como operaciones aritméticas, operadores lógicos  y uso de ficheros. Cuando somos administradores de servidores o desarrolladores muchas veces tenemos que realizar tareas que nos quitan, relativamente, tiempo valioso que podríamos ocupar para otras cosas (como ver nuestro Facebook, jeje, broma).  Aprender a escribir scripts que nos faciliten algunas tareas siempre es útil. Por ejemplo, conocer todas las características técnicas de nuestro equipo de cómputo nos servirá cuando se realiza peritajes informáticos y soporte al equipo. Realizar respaldos automáticos a nuestras carpetas , archivos y directorios será más sencillo gracias a un script. Pero antes debemos aprender lo básico de la programación en batch. Ejemplo 1. Operaciones aritméticas básicas. aritmetica.bat @ echo off ::Nombre del archivo, imprimirá: aritmetica.bat echo %0 :: Set nos servirá para asignar va

COBOL para principiantes #1

COBOL es un lenguaje de programación que sigue dando de que hablar. Los programadores Java, C#, Python, etc. saben que aún existen aplicaciones hechas en COBOL y es difícil que éstas migren a un lenguaje más actual. Es por esa y otras razones que muchos han pensado en aprender este lenguaje 'obsoleto'. ¡COBOL is the king, no ha muerto! ¡A desempolvar los libros de nuestros abuelos, tíos o maestros! ¿Qué debemos hacer para aprender COBOL y no morir en el intento? Para empezar necesitas: Tener bases de programación (obvio). Conseguir un compilador dependiendo del sistema operativo que uses (si usas Windows puedes usar Visual Studio e instalar un compilador; si usas Linux puedes usar Gnu OpenCOBOL, nosotros usaremos éste último en el blog ). Saber qué extensión se usa para crear un programa COBOL (.cb, cbl, .cb). Nosotros usaremos .cbl  Comprender la estructura de un programa COBOL.  Conocer las estructuras de control y estructuras de datos en COBOL. Practicar.