Curso de Cobol y PowerCobol

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.

Metalenguaje COBOL de perform times

¿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.

Programación Fácil YouTube

Suscríbete

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.