Los bucles
Estructuras iterativas
1. Definición
Como se ha indicado en el primer capítulo, el bucle es la cuarta gran estructura básica de la algoritmia y, por tanto, de la programación. Después de este capítulo, todo lo demás es una aplicación o derivación de estas cuatro estructuras básicas. Los bucles son estructuras iterativas. Una iteración o estructura iterativa es una secuencia de instrucciones destinada a ser ejecutada varias veces. También es la acción de ejecutar esta instrucción. A veces oirá referirse a esto como estructuras repetitivas, que es lo mismo, pero de una forma diferente. El propósito de un bucle es repetir un bloque de instrucciones varias veces. Según el tipo de bucle, este bloque se repetirá un número fijo de veces (n veces) o según un cierto número de criterios (una prueba de una o varias condiciones) que ya conoce muy bien.
El bucle es un elemento muy sencillo a primera vista. Los primeros ejemplos que encuentre le resultarán obvios. Sin embargo, rápidamente se convierte en algo molesto para los programadores novatos, debido a los famosos criterios de salida. Si las pruebas ejecutan una acción determinada (estructura SI) en caso de éxito o de fracaso, un error en una condición de salida puede hacer que el número de bucles sea incorrecto, que nunca entren o, peor aún...
Mientras
1. Estructura general
El bucle de tipo "MientrasQue" permite repetir un bloque de instrucciones siempre que se verifique la condición bajo prueba, es decir, que sea verdadera. Su sintaxis es la siguiente:
MientrasQue booleano Hacer
Bloque de instrucciones
FinMientrasQue
Cuando el programa se ejecuta, llega a la instrucción "MientrasQue". Evalúa la expresión booleana (una o más condiciones o una única variable). Si la expresión devuelve VERDADERO, el programa ejecuta las siguientes instrucciones hasta llegar a la instrucción "FinMientrasQue".
Si es VERDADERO, entonces ejecuta las instrucciones de nuevo y así sucesivamente mientras la expresión devuelva VERDADERO. Si la expresión se vuelve falso, entonces el programa salta a la instrucción justo después de "FinMientrasQue". He aquí un ejemplo sencillo contando del 1 al 10:
PROGRAMA MQUE1
VAR
Contador:entero
INICIO
Contador1
MientrasQue Contador<=10 Hacer
Visualizar Contador
ContadorContador+1
FinMientrasQue
FIN
En PHP, el bucle "MientrasQue" se representa mediante "while()", con la expresión booleana entre paréntesis.
while(booleen) {
/* bloque de instrucciones */
}
Si sólo hay una instrucción en el bucle, los corchetes son innecesarios.
while(booleano) instrucción;
Aquí está el código PHP correspondiente al algoritmo MQUE1:
<html>
<head><meta/>
<title>mque1</title>
</head>
<body>
<?php
$cpt=1;
while($contador<=10) {
echo "$contador<br />";
$contador++;
}
?>
</body>
</html>
2. Bucles infinitos y break
Asegúrese siempre de que su bucle tiene una condición...
Repetir ... Hasta
1. Diferencias fundamentales
A pesar de la abundancia de ejemplos vistos hasta ahora, la estructura iterativa "MientrasQue" no es la única. Aunque es posible programar todo con este tipo de bucle, aún faltan dos, entre ellos la estructura "Repetir ... Hasta". Su pseudocódigo es el siguiente:
Repetir
Bloque de instrucciones
Hasta booleano
“Repetir" es muy similar a "MientrasQue", pero con dos diferencias importantes:
-
Pase lo que pase, siempre habrá al menos una pasada por el bucle: el bloque de instrucciones se ejecutará al menos una vez.
-
La expresión booleana final se invierte. Un "mientras a !=1" se convierte en un "hasta que a=1".
El "hasta" se entiende como "hasta que se verifique la condición". Para hacer un bucle infinito, hay que hacer:
Repetir
Bloque de instrucciones
Hasta FALSO
Volviendo al algoritmo para introducir la transcripción de los registros, que había causado algunos problemas, ahora es un poco más sencillo:
PROGRAMA REPITE
VAR
Nota:entero
Inicio
Repetir
Escribir "Escriba una nota"
Leer nota
Si nota<-1 O nota>20 Entonces
Repetir ...
Para ... FinPara
1. Una estructura para contar
La tercera y última estructura iterativa en algoritmos es el bucle "Para … FinPara", que se utiliza casi exclusivamente para contadores. Cada vez que se pasa por el bucle, se incrementa o decrementa un contador, según corresponda. Esto se conoce como una estructura incremental.
Su sintaxis en pseudocódigo es la siguiente:
Para variable De inicio a fin [PASO paso] Hacer
Bloque de instrucciones
FinPara
Cada vez que pase por el bucle, la variable tomará sucesivamente cada uno de los valores del intervalo [a;b] (incluyendo a y b). El tamaño del paso es opcional y es 1 por defecto. El siguiente pseudocódigo cuenta de 1 a 10:
Variable contador en Numerico
Inicio
Para contador De 1 hasta 10 Hacer
Escribir contador
FinPara
Fin
Puede encontrar sintaxis ligeramente diferentes, pero todas son equivalentes:
Para variable Yendo Desde inicio hasta fin [PASO paso] Hacer
Bloque de instrucciones
FinPara
O:
Para contador inicio a fin [Paso paso]
Bloque de instrucciones
contado siguiente
En esta última forma, es interesante observar que, es más fácil orientarse en el caso de bucles que contienen un gran bloque de instrucciones, ya que la variable se repite en la sintaxis de fin de bucle. Por último, es posible encontrar sintaxis alternativas derivadas de estas tres formas.
2. ... pero no imprescindible
Se habrá dado cuenta rápidamente de que este bucle sólo se utiliza para los contadores. Es decir, todo lo que hace ya es posible con las estructuras "MientrasQue" y "Repetir". Sólo que con "Para" no tiene que calcular tú mismo el contador. Así que es una simplificación.
No hay ningún caso en el que la estructura "Para FinPara" sea estrictamente necesaria. Simplemente simplifica las otras estructuras iterativas cuando se utilizan contadores.
3. ¿Qué estructura elegir?
Pero, ¿cuándo hay que utilizar una estructura determinada? Una estructura "Para" se utiliza cuando se conoce de antemano el número de iteraciones necesarias para el tratamiento. Este número puede ser fijo o calculado con antelación...
Ejercicios
Ejercicio 1
Escriba un algoritmo que pida un número inicial y luego calcule la suma de los enteros hasta ese número. Ejemplo con el número 6:
1+2+3+4+5+6 = 21
Escriba el programa PHP equivalente.
Ejercicio 2
Escriba un algoritmo que pida un número inicial y luego muestre la tabla de multiplicar de ese número. Ejemplo con el número 6:
Tabla del 6:
6 x 1 = 6
6 x 2 = 12
6 x 3 = 18
...
Escriba el programa PHP equivalente.
Ejercicio 3
Escriba un algoritmo que pida un número inicial y luego muestre el factorial de ese número. Ejemplo con el número 7:
1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040
Escriba el algoritmo utilizando el bucle Para y luego el bucle MientrasQue.
Escribe el programa PHP equivalente.
Ejercicio 4
Escriba un algoritmo que pida un número y realice el siguiente cálculo (ejemplo con el número 9):
1 + 1/1 + 1/(1*2)+1/(1*2*3)+1/(1*2*3*4)+...+1/(1*2*3*4*5*6*7*8*9)
Escriba el programa PHP equivalente.
Ejercicio 5
Escriba un algoritmo que pida un número mayor que 100 y luego busque su mayor divisor entero entre 2 y 100. Por ejemplo, para 150, el mayor divisor entre 2 y 100 es 75.
Escriba el programa PHP equivalente.
Ejercicio 6
Escriba un algoritmo que pida un número y luego calcule la última ocurrencia de la sucesión de Fibonacci para ese número. La sucesión de Fibonacci es una sucesión de números enteros...