Cobol.Párrafos y Bucles.

Ismael Royano Gómez
Enredando con Programación
4 min readMay 10, 2016

En casi todos los programa que se pueden crear, existen tareas que pueden o no ser objeto de repetición. A estos procesos se les llama bucles o estructuras repetitivas.

Por ejemplo, podemos tener un proceso que nos pida dos números unas 10 veces y realizar cálculos matemáticos. Como es lógico, no vamos a escribir 10 veces el proceso, lo que hacemos es hacer un bucle y que lo haga 10 veces, pero en realidad a nivel de programación el proceso lo hemos definido una sola vez.

En esta parte vamos a aprender como se crean bucles o instrucciones repetitivas y párrafos o rutinas para controlar el orden de ejecución del programa.

Párrafos o Rutinas. Siempre que se ejecuta un programa en COBOL, se hace de forma secuencial, empezando desde arriba hasta que encuentre la instrucción de finalizar el programa. Las rutinas es una forma de alterar ese orden, es decir, le damos el control a un párrafo y ejecuta todas las instrucciones que haya en éste. Veamos un ejemplo:

IDENTIFICATION DIVISION.
PROGRAM-ID. Parrafos.
AUTHOR. Ismael.
* Esto es un ejemplo usando rutinas o párrafos.
PROCEDURE DIVISION.
Inicio.
DISPLAY "Este es el principio del programa"
PERFORM Rutina2
DISPLAY "Ahora voy a terminar el programa"
STOP RUN.
Rutina1.
DISPLAY "Estoy en la rutina1"
PERFORM Rutina3.
Rutina2.
DISPLAY "Ahora estoy en la rutina2"
PERFORM Rutina1.
Rutina3.
DISPLAY "Ahora estoy en la rutina3".

Si observamos detenidamente este ejemplo, lo que hacemos es el párrafo Inicio, dentro de este llamamos a la Rutina 2, dentro de éste llamamos a la Rutina 1 y por último desde la rutina1 llamamos al párrafo rutina3. Una vez terminado estas rutinas, el programa vuelve a su orden normal, es decir, realiza las sentencias que le faltaban del párrafo Inicio, terminando así con la ejecución del programa. También hay que decir, que hacer párrafos estructura un poco mejor el programa y puede resultar un poco mas legible y comprensible.

PERFORM…THRU. Esto es otra forma de usar los párrafos como rutinas, es ejecutando más de un párrafo a la vez. Veamos un ejemplo:

IDENTIFICATION DIVISION.
PROGRAM-ID. Programa.
AUTHOR. Ismael.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NOMBRE PIC X(12).
01 APELLIDO PIC X(12).
PROCEDURE DIVISION.
INICIO.
PERFORM PIDENOMBRE THRU PIDEAPELLIDO
STOP RUN.
PIDENOMBRE.
DISPLAY "DAME TU NOMBRE:"
ACCEPT NOMBRE.
PIDEAPELLIDO.
DISPLAY "DAME TUS APELLIDOS:"
ACCEPT APELLIDO.

PERFORM…TIMES. Vamos a ampliar un poco el número de veces que queremos que repita un proceso. Esta sentencia sirve para repetir un párrafo un número de veces determinado, su sintáxis es la siguiente:

Vamos a hacer un ejemplo, para aclarar un poco como funciona:

IDENTIFICATION DIVISION.
PROGRAM-ID. Programa4.
AUTHOR. Ismael.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NOMBRE PIC X(12).
01 APELLIDO PIC X(12).
PROCEDURE DIVISION.
INICIO.
PERFORM PIDENOMBRE THRU PIDEAPELLIDO 3 TIMES
STOP RUN.
PIDENOMBRE.
DISPLAY "DAME TU NOMBRE:"
ACCEPT NOMBRE.
PIDEAPELLIDO.
DISPLAY "DAME TUS APELLIDOS:"
ACCEPT APELLIDO.

PERFORM…UNTIL. Este tipo de sentencia sirve para realizar un párrafo hasta que se cumpla la condición. Veamos un ejemplo:

IDENTIFICATION DIVISION.
PROGRAM-ID. Programa4.
AUTHOR. Ismael.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 LI PIC 99 VALUE 0.
PROCEDURE DIVISION.
INICIO.
DISPLAY "PROGRAMA DE SALUDO"
PERFORM SALUDAR UNTIL LI =5
STOP RUN.
SALUDAR.
ADD 1 TO LI
DISPLAY "SALUDO Nº.: ", LI.

También podemos hacer el bucle de otra forma:

IDENTIFICATION DIVISION.
PROGRAM-ID. Programa4.
AUTHOR. Ismael.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 LI PIC 99 VALUE 0.
PROCEDURE DIVISION.
INICIO.
DISPLAY "PROGRAMA DE SALUDO"
PERFORM UNTIL LI =5
ADD 1 TO LI
DISPLAY "SALUDO Nº.: ", LI
END-PERFORM
STOP RUN.

Si observamos un poco, la diferencias radican en que ahora tiene un “fin del bucle”.

Este proceso lo que haces es mostrar un saludo 5 veces. Para eso lo que hemos utilizado es una variable (LI) para contar el número de veces que saludamos. A continuación repetimos el párrafo SALUDAR hasta que se cumpla la condición es decir, sea igual a 5.

Si nos fijamos bien en el código del programa, hemos iniciado la variable LI a 0, ¿Porque hacemos esto? Este tipo de procesos repetitivos lo que primero que hace es comprobar la condición, y si no se cumple continúa con el proceso repetitivo. En este caso le he dado el valor 0, si la diéramos un valor superior o igual 5 no entraría jamás en el proceso repetitivo y terminaría el programa.

PERFORM…VARYING. Este tipo de bucles se le da valor a una variable y se aumenta o disminuye dicho valor y el proceso lo hace tantas veces hasta que se cumpla la condición. Con este tipo de bucle nos ahorraríamos algunas instrucciones, ya que hace varias instrucciones en una sola. Veamos un ejemplo:

IDENTIFICATION DIVISION.
PROGRAM-ID. Programa4.
AUTHOR. Ismael.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 LI PIC 99 VALUE 0.
PROCEDURE DIVISION.
INICIO.
PERFORM VARYING LI FROM 1 BY 1 UNTIL LI >5
DISPLAY "Saludo Nº.: ", LI
END-PERFORM
STOP RUN.

¿Como trabaja el VARYING?. Lo primero que hace es iniciar la variable LI al valor que indica el FROM, pregunta por la condición y si no se cumple realiza la sentencias que hay dentro. A continuación aumenta el valor de LI según lo que tenga en el BY y vuelve a preguntar por la condición…y así sucesivamente hasta que se cumpla la condición. En este caso realizará las sentencias con los valores 1, 2, 3, 4 y 5.

Continúa por Ficheros.

--

--

Ismael Royano Gómez
Enredando con Programación

Técnico Informático curioso, lector activo de las nuevas tecnologías, amante de las series de televisión y usuario del respetable mundo del enredo.