Índice de contenidos
Introducción
En este tema aprenderemos tres estructuras de control que permiten repetir bloques de código:
- while: Repite un bloque mientras una condición sea verdadera.
- do...while: Similar al while, pero asegura que el bloque se ejecute al menos una vez.
- for: Útil cuando conocemos de antemano el número de iteraciones necesarias.
- Empecemos por la estructura while, explicando su funcionamiento básico y resolviendo ejercicios prácticos.
Iteración while
Un bucle while repite un bloque de código mientras una condición sea verdadera. Para evitar errores, debemos prestar atención a tres aspectos fundamentales:
- Inicializar la variable de control antes de entrar en el bucle.
- Actualizar la variable de control dentro del bucle para evitar bucles infinitos.
- Realizar correctamente la evaluación de la condición utilizando operadores de comparación (<, <= , >, >= , ...).
- Sintaxis
while (expresion_booleana){
//instrucciones del bloque
}
- Estructura repetitiva
-
//Inicializamos variables de la condición
$contador = 0;
//Establecemos la condición cuidando mucho
//los extremos (< o <= ...)
while ($contador < 10){
//Actualizamos la variable dentro del bucle
$contador ++ //comentar este operador
//Realizamos las acciones
echo "Estoy en la interación $contador<br />"
}
|
Uso de while
- Mostrar la suma de los primeros 25 números naturales.
- Se quiere ver el número de iteración y la suma hasta ese momento (es decir, queremos ver cien líneas).
- Cada iteración debe aparecer en numeración ordinal con el símbolo ª (por ejemplo, 1ª, 2ª, ...).
- Al final mostraremos el total
Posible solución |
---|
<?php
//Inicializamos variables
//establecemos el bucle con la condición de iteración
while ($i < 25) {
<?php
<?php
$contador = 0;
$suma =0;
while ($contador < 25) {
//mantenemos la informaicón para poder
// mostrar lo que estamos haciendo en cada interación
$suma_anterior = $suma;
//Actualizamos la suma
$suma = $suma_anterior+$contador;
echo "En la interación {$contador}ª: <span style='color:blue'>$suma_anterior + $contador = $suma</span><br />";
//Muy importante actualizar la variable de control
//Lo he de hacer al final para que sume desde el 0 al 24 que son
//los primeros 25 números
$contador ++;
}
//Mostramos mensaje al final
echo "<h1> La suma total de los primeros 25 números es $suma</h1>";
?>
}
//Mostramos la suma total
?>
|
|
Uso de while
- Generamos un número aleatorio entre 1 y 15.
- Mostramos un mensaje con el número hasta que el número que salga sea el 13.
- Podría ser que el número nos salga el primero en cuyo caso no habrá ningún mensaje
- Mostramos cuantos números se han generado y la suma de los mismos
Posible solución |
---|
<?php
//Generamos un número aleatorio entre 1 y 15.
//Establecemso un contador
//para ver cuántas veces intermos
//Establemos el bucle
while ($num !=13){
}
//Mostramos la información final
?>
|
|
Iteracción do-while
- Este tipo de bucle donde seguro que al menos se ejecuta un iteracción
- Respecto al anterior nos ahorra una comparación.
- La sintaxis de esta estructura es la siguiente:
do {
//Acciones
}while (expresión_booleana);
- La condición va al final de la estructura
- Observa que lleva un punto y coma al final
- El conjunto de las instrucciones del bloque se ejecuta al menos una vez
- El bloque se ejecuta mientras se cumpla la condición
|
Ejemplo de uso
- Generar un número hasta que salga el 13
- mostrar las veces que hemos tenido que generar número
buscando un número |
---|
<?php
$contador =1;
do{
$num=rand(1,100);
$contador++;
}while($num!=13);
echo "<h1>Hemos tirado $contador veces</h1>";
?>
|
|
- Ejercicios
Usando do-while
- Modifica el ejercicio anterior usando un do-wile
- En este caso el número 13 también queremos que forme parte de la lista y se incluya tanto en la suma como en la contabilización,
|
Ejercicio 19: Genera Números de Bonoloto
- Generamos 5 números para la bonoloto
- Importante es asegurar que los números no se puedan repetir
- Puedes usar este css para los estilos
Estilos para los números |
---|
body {
font-family: Arial, sans-serif;
text-align: center;
background-color: #f9f9f9;
padding: 20px;
}
fieldset {
border: 2px solid #0a3622;
border-radius: 10px;
display: inline-block;
padding: 20px;
background-color: #ffffff;
}
legend {
font-weight: bold;
color: #0a3622;
}
.bonoloto {
display: inline-block;
width: 60px;
height: 60px;
line-height: 60px;
margin: 10px;
background-color: #ffffff;
color: #000000;
font-size: 1.5em;
font-weight: bold;
text-align: center;
border: 2px solid #000000;
border-radius: 50%; /* Hace que el elemento sea un círculo */
box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.3); /* Sombra para darle profundidad */
}
h1 {
color: #0a3622;
font-size: 1.8em;
}
Entonces los números los mostrarás con la clase bonoloto
<span class="bonoloto"><?= $numero_1 ?></span>
//....
|
|
Ejercicio 19 :Genera una tabla ASCII completa
Ejercicio 19 :Genera una tabla ASCII completa
- Creamos una tabla ascii, desde el 33 hasta el 126 código
- Puedes (debes) usar estas funciones (una de ellas, o prueba a hacerlo con las dos)
chr($numero) //retorna el carácter en ascii del código que se pasa como argumento
printf ("%d - %c", $numero, $numero); //Esta función
// visualiza con formato decimal (%d) y carácter (%c),
//los valores pasados como últimos argumentos
- Genera la salida en una tabla html
- Intenta dar un número de columas (por ejemplo 6 columnas
|
Generar una password
- Programa para generar una passoword
- Generamos una password con caracteres ascii (ver tabla anterior
- La password debe de tener 7 caracteres
- Los caracteres se puede repetir
- Al menos 2 de ellos han de ser no alfanuméricos
|
}}
Iteración for
- Es un bucle de tipo contador
for (expresion_inicial; condicion;expresion_actualizar){
sentencias;
}
- Estructura for
- expresion_inicial
-
- Se ejecuta una sola vez al comienzo del bucle. se usa para inicializar variables
- condición
- Es una expresión booleana que se evalúa en cada interacción
- Si da un valor false, ya no se ejecuta ninguna vez
- Si no hay expresión se toma como true
- En este caso para que el bucle no sea infinito deberá llevar algún break (instrucción de terminación de bloque) en algún momento
- Incremento de la expresión inicial
- Marca el paso o cómo se va modificando la variable de control en cada iteración
- Estructura for
- condición
<?php
for ($a=0; ;$a++){
echo "$a*$a=".$a*$a."<br>";
}
?>
- Es como si dentro del bucle establecemos la condición de terminación usando la instrucción de terminación de bloque break
- Observa el siguiente código forzado y compáralo con el anterior (mira que la sección de condición está vacía)
<?php
for ($a=0; ;$a++){
echo "$a*$a=".$a*$a."<br>";
if ($a==10)
break;
}
?>
- Estructura for
- expresion_actualizar
- Esta expresión actualiza el valor de alguna/as variables
- Se ejecuta en cada interactivo
<?php
for ($a=0;$a<10 ;$a++){
echo "$a*$a=".($a*$a)."<br>";
}
?>