3.3 Bucle "PARA"

Bucle de colores en el aire realizado por un parapente
Imagen en Pixabay de skeeze bajo licencia CC0 Public Domain

Esta instrucción es otro bucle parecido a los anteriores, con más similitudes por ejemplo con mientras, pero en definitiva otra estructura repetitiva con sus propias características. Se usa por tanto para repetir un proceso un número determinado de veces. El número de repeticiones se debe conocer previamente. Por ejemplo si tenemos que buscar un dato referente a un alumno en una lista de una clase con 40 alumnos, sabemos que tendremos que usar un bucle que repase 40 alumnos. En cambio, si tenemos que buscar un dato en un fichero que no tiene un número constante de registros, a priori no sabremos el número de búsquedas que tiene que realizarse. Por esta razón se suele usar esta instrucción cuando se conoce previamente el número de repeticiones que deseamos hacer y los otros tipos de bucles cuando no se conoce.

Al igual que el bucle "Mientras", puede iterar cero o más veces. En el bucle "Para" se utiliza una variable para contabilizar las repeticiones que se realizan. Esa variable tomará un valor inicial la primera vez que la ejecución llega al bucle, se va incrementando con un paso determinado al final del bucle y se vuelve a evaluar su valor para comprobar que no se ha llegado a un valor final especificado. Cuando la variable sobrepasa ese valor final, el bucle ya no se ejecuta más.

Sintaxis:

Para (variable <- valor inicial) Hasta (valor final) Con Paso (incremento) Hacer

Instrucciones

Instrucciones

...

...

FinPara

Como se puede apreciar en la sintaxis, se usa una variable a la que se da un valor inicial, un valor final y una cadencia, es decir un valor de incremento, que es opcional y que si no se explicita toma valor 1, o valor -1 si el valor inicial es mayor que el final.


NOTA:
Para agilizar el estudio de los siguentes ejemplos, puedes seleccionarlos para ir copiando, pegando y ejecutando directamente en PseInt.


Ejemplo1:
Tomemos el ejemplo clásico de mostrar los números del 1 al 20.

Algoritmo Mostrar_los_20_primeros_numeros_orden_ascendente

Para x=1 Hasta 20 Hacer

Escribir x

Fin Para

FinAlgoritmo


Ejemplo 2: Igual que el anterior pero en orden descendente

Algoritmo Mostrar_los_20_primeros_numeros_orden_descendente

Para x=20 Hasta 1 Hacer

Escribir x

Fin Para

FinAlgoritmo


Ejemplo 3:
Tomemos el mismo ejemplo pero sólo queremos mostrar los números pares del 1 al 20.

Algoritmo Mostrar_los_pares_comprendidos_en_los_20_primeros_numeros

Para x=2 Hasta 20 Con Paso 2 Hacer

Escribir x

Fin Para

FinAlgoritmo


Nótese que el resultado del ejercicio anterior también se puede obtener con:

Algoritmo Mostrar_los_pares_comprendidos_en_los_20_primeros_numeros

Para x=1 Hasta 10 Hacer

Escribir 2*x

Fin Para

FinAlgoritmo


En los dos ejemplos anteriores, los dos bucles dan el mismo número de pasadas, es decir que los programas tardan el mismo tiempo en ejecutarse, pero la diferencia es que las variables de los dos bucles toman valores distintos, pues estamos usando dentro del segundo bucle la fórmula de una progresión aritmética de diferencia 2. Igualmente se pueden usar las fórmulas de progresiones geométricas con la razón deseada o matemáticas de todo tipo, como trigonométricas por ejemplo si necesitamos repasar todos los valores angulares (seno, coseno, tangente, etc.). Es de gran utilidad para apoyo en estudios matemáticos de sucesiones, límites, etc.


Ejemplo 4:
Dibujar en pantalla, usando caracteres, un rectángulo de las dimensiones que el usuario introduzca por teclado.

Algoritmo Rectangulo
    Escribir "Vamos a crear un rectángulo"
    Repetir
        Escribir "Teclea la altura (entre 4 y 7):"
        Leer altura    
    Hasta Que altura>=4 y altura<=7
    Repetir
        Escribir "Teclea la base (entre 20 y 30):"
        Leer base
    Hasta Que base>=20 y base<=30
    Para a<-1 Hasta altura Con Paso 1 Hacer
        Para b<-1 Hasta base Con Paso 1 Hacer
            Escribir "#" sin saltar
        Fin Para
        Escribir ""
    Fin Para
    Escribir ""
FinAlgoritmo

Curiosidad

Aunque es algo más complejo pues se usan instrucciones que aún no se han explicado, insertamos aquí otro ejemplo gráfico más visual tomado del programa "Pseint" que ya tanto hemos usado. Cuando lo ejecutéis disfrutaréis y comprobaréis las posibilidades que tiene esta instrucción, combinada con otras evidentemente.

Algoritmo Misil
    Escribir "Presione una tecla para iniciar el lanzamiento!"
    Esperar Tecla
    // el array cohete tiene el dibujo del cohete como lineas de texto
    dimension cohete[9]
    cohete[1]<-"   /|\   "
    cohete[2]<-"   |B|   "
    cohete[3]<-"   |O|   "
    cohete[4]<-"   |M|   "
    cohete[5]<-"   |B|   "
    cohete[6]<-"  //|\\  "
    cohete[7]<-" ******* "
    cohete[8]<-"* * * * *"
    cohete[9]<-" * * * * "
    // primero se muestra la primera parte del dibujo y la cuenta regresiva
    Para i<-1 hasta 11 Hacer
        Borrar Pantalla
        Para j<-1 hasta 15 Hacer
            Escribir ""
        FinPara
        Para j<-1 hasta 6 Hacer
            Escribir cohete[j]
        FinPara
        Escribir ""
        Escribir "Lanzamiento en ",11-i
        Esperar 1 Segundo
    FinPara
    // despues se muestra el dibujo completo y cada vez mas arriba
    Para i<-1 hasta 15 Hacer
        Borrar Pantalla
        Para j<-i hasta 15 Hacer
            Escribir ""
        FinPara
        Para j<-1 hasta 8 Hacer
            Escribir cohete[j]
        FinPara
        si i>1 Entonces
            Escribir " * * * * "
        finsi
        Esperar 1/i Segundo
    FinPara
    // finalmente se va modificando el dibujo para hacer la explosion
    // estado tiene un entero que dice en qué parte de la explosion va cada linea del dibujo
    Dimension estado[6]
    estado[1]<-3; estado[2]<-2; estado[3]<-1
    estado[4]<-2; estado[5]<-3; estado[6]<-4
    Para i<-1 hasta 10 Hacer
        Borrar Pantalla
        Para j<-1 hasta 6 Hacer
            Estado[j]<-Estado[j]-1
            segun Estado[j] Hacer
                0:  cohete[j]<-"    +    "
                -1,-5: cohete[j]<-"   +X+   "
                -2,-4: cohete[j]<-"  +XXX+  "
                -3: cohete[j]<-" +XXXXX+ "
                -6: cohete[j]<-"         "
            FinSegun
            Escribir cohete[j]
        FinPara
        Esperar .2 Segundos
    FinPara
FinAlgoritmo