
Bucles utilizando PERFORM TIMES en COBOL
Capítulo 39: Bucles PERFORM TIMES
Llegamos a un punto en el curso, en el que vas a poder realizar bucles que se ejecuten un número determinado de veces. Lo lograrás gracias a PERFORM TIMES
.
Metalenguaje de PERFORM TIMES
En el metalenguaje podemos ver que con PERFORM TIMES
, podemos elegir entre un párrafo externo con un número de repetición o un párrafo que se autoejecuta un número determinado de veces.
Estas dos cosas, las conocemos como ejecución en línea o fuera de línea. Explicaré esto en el siguiente capítulo. Entenderás mejor el metalenguaje cuando veas unos ejemplos.

¿Cómo funciona PERFORM TIMES?
PERFORM TIMES
, es un bucle que permite ejecutar una rutina o párrafo, un número determinado de veces mediante un literal o un identificador.
Incluso, se permite ejecutar a si mismo de esta forma:
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo39.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.
Bucle.
PERFORM 5 TIMES
DISPLAY "¡Me repito!"
END-PERFORM
STOP RUN.
END PROGRAM Capitulo39.
He indicado que haga el PERFORM
5 veces. Al no indicarle un párrafo, toma esto como que se tiene que autoejecutar el número de veces indicado.
¡Me repito!
¡Me repito!
¡Me repito!
¡Me repito!
¡Me repito!
Ahora, pasemos a ejecutar un párrafo externo. En este caso, no vamos a especificar el END-PERFORM
.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo39.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.
Bucle.
PERFORM Saludo 5 TIMES
Saludo.
DISPLAY "¡Hola!".
STOP RUN.
END PROGRAM Capitulo39.
¡Hola!
¡COBOL! Tenemos un problema...
Parece ser, que se ha ejecutado esto solo una vez. ¿Por qué no está funcionando?
Fíjate en la línea 15. Tenemos un STOP RUN
que ha echado a perder un programa maravilloso. Eso es porque entra en el párrafo Saludo
la primera vez, después de leer el DISPLAY
, se topa con el STOP RUN
, lo que hace que se finalice el programa antes de lo esperado.
Solo hay que aislarlo en otro párrafo o ponerlo después del PERFORM TIMES
.
Probemos desde un párrafo aparte.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo39.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.
Bucle.
PERFORM Saludo 5 TIMES.
Saludo.
DISPLAY "¡Hola!".
FinalizaPrograma.
STOP RUN.
END PROGRAM Capitulo39.
Vaya, vuelve a funcionar mal. ¡Ha mostrado el DISPLAY
6 veces y le he dicho 5! ¿Tan difícil es usar PERFORM TIMES
?
¡Hola!
¡Hola!
¡Hola!
¡Hola!
¡Hola!
¡Hola!
No te preocupes, este es un pequeño fallo de cálculo muy común si no se domina del todo el flujo de ejecución con PERFORM
.
El párrafo es llamado las 5 veces. Hasta ahí todo bien, el problema, es que al terminar de ejecutar el PERFORM TIMES
, el flujo de ejecución, sigue por la línea 10 (la siguiente al PERFORM
). ¿Qué es lo siguiente que encuentra antes de llegar al STOP RUN
? Pues ahí tienes el sexto ¡Hola!.
¿Solución a este caso? Poner el STOP RUN
en la línea 10.
IDENTIFICATION DIVISION.
PROGRAM-ID. Capitulo39.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.
Bucle.
PERFORM Saludo 5 TIMES.
STOP RUN.
Saludo.
DISPLAY "¡Hola!".
END PROGRAM Capitulo39.
¡Conseguido! Ahora, el programa es incluso más corto.
¡Hola!
¡Hola!
¡Hola!
¡Hola!
¡Hola!
Vale, ya hemos visto unos cuantos ejemplos, pero realmente ninguno útil más allá de la comprensión del funcionamiento de PERFORM TIMES
. En el siguiente capítulo, haremos una calculadora de tablas de multiplicar con PERFORM TIMES
.
Comentarios
Si te quedan dudas sobre el temario, sobre Cobol, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.