Diferencia entre revisiones de «Plantilla:ManuelRomero/PHP/EstructurasControlRepetitivo»
De WikiEducator
(Página creada con «===Iteración while=== *Como en todos los bucles debemos siempre tener encuenta #inicializar la variable de control #actualizarla correctamente dentro del bucle #realizar d...») |
|||
(23 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 1: | Línea 1: | ||
+ | __NOTOC__ | ||
+ | [[#Tabla de Contenidos|Índice de contenidos]] | ||
+ | <div style="float:none; clear:none; margin:0 0.3em 0.5em 0; padding:0.5em 1.4em 0.8em 0;"> | ||
+ | <div id="toc" class="toc"> | ||
+ | <div id="toctitle"><h2> | ||
+ | [[#Tabla de Contenidos|Índice de contenidos]]</h2>" | ||
+ | </div> | ||
+ | * [[#Introducción|1. Introducción]] | ||
+ | * [[#Iteración_while|2. Iteración while]] | ||
+ | ** [[#Sintaxis|2.1 Sintaxis]] | ||
+ | ** [[#Ejercicio_Suma_de_los_primeros_25_números|2.2 Ejercicio: Suma de los primeros 25 números]] | ||
+ | ** [[#Ejercicio_Número_aleatorio_entre_1_y_15|2.3 Ejercicio: Número aleatorio entre 1 y 15]] | ||
+ | * [[#Iteración_do-while|3. Iteración do-while]] | ||
+ | ** [[#Ejercicio_Modificar_el_ejercicio_anterior|3.1 Ejercicio: Modificar el ejercicio anterior]] | ||
+ | ** [[#Ejercicio_Programa_para_rellenar_bonoloto|3.2 Ejercicio: Programa para rellenar bonoloto]] | ||
+ | ** [[#Ejercicio_Tabla_ASCII|3.3 Ejercicio: Tabla ASCII]] | ||
+ | ** [[#Ejercicio_Generar_contraseña|3.4 Ejercicio: Generar contraseña]] | ||
+ | * [[#Iteración_for|4. Iteración for]] | ||
+ | ** [[#Estructura_for|4.1 Estructura for]] | ||
+ | ** [[#Condición_en_el_for|4.2 Condición en el for]] | ||
+ | ** [[#Ejemplo_Forzado_y_Condición_vacía|4.3 Ejemplo: Forzado y Condición vacía]] | ||
+ | ** [[#Expresión_actualizar|4.4 Expresión actualizar]] | ||
+ | </div> | ||
+ | </div> | ||
+ | ===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=== | ===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 | ||
+ | <source lang=php> | ||
+ | while (expresion_booleana){ | ||
+ | //instrucciones del bloque | ||
+ | } | ||
+ | </source> | ||
+ | {{MRM_Puntos clave|title=estructura repetitiva| | ||
+ | ;Estructura repetitiva: | ||
+ | <source lang=php> | ||
+ | //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 />" | ||
+ | |||
+ | } | ||
+ | </source> | ||
+ | }} | ||
+ | |||
{{MRM_Actividad|Title=Uso de while| | {{MRM_Actividad|Title=Uso de while| | ||
− | *Mostrar la suma de los primeros | + | * 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 ( | + | * 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 | + | * Cada iteración debe aparecer en numeración ordinal con el símbolo ª (por ejemplo, 1ª, 2ª, ...). |
+ | * Al final mostraremos el total | ||
{{Plegable|hide|Posible solución| | {{Plegable|hide|Posible solución| | ||
− | |||
<source lang=php> | <source lang=php> | ||
− | + | <?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 | ||
+ | ?> | ||
</source> | </source> | ||
− | |||
}} | }} | ||
+ | |||
+ | }} | ||
{{MRM_Actividad|Title=Uso de while| | {{MRM_Actividad|Title=Uso de while| | ||
Línea 30: | Línea 112: | ||
*Podría ser que el número nos salga el primero en cuyo caso no habrá ningún mensaje | *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 | *Mostramos cuantos números se han generado y la suma de los mismos | ||
+ | {{Plegable|Hide|Posible solución| | ||
+ | <source lang=php> | ||
+ | <?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 | ||
+ | ?> | ||
+ | </source> | ||
+ | }} | ||
+ | <!-- | ||
+ | {{Plegable|Hide|Posible solución| | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | //Generamos un número aleatorio entre 1 y 15. | ||
+ | $num = mt_rand(1,15); | ||
+ | //Establecemso un contador | ||
+ | //para ver cuántas veces intermos | ||
+ | $cont=1; | ||
+ | while ($num !=13){ | ||
+ | //actualizamos el contador | ||
+ | $cont++; | ||
+ | //mostramos el número | ||
+ | echo "<h1>El numero es $num</h1>"; | ||
+ | //actualizamos el número | ||
+ | $num = mt_rand(1,15); | ||
+ | } | ||
+ | //Mostramos la información final | ||
+ | echo "<h1>Por fin el 13 en $cont veces</h1>"; | ||
+ | ?> | ||
+ | </source> | ||
+ | }} | ||
+ | --> | ||
}} | }} | ||
+ | <br /> | ||
+ | |||
+ | |||
+ | {{BotonIndice | ||
+ | |enlace=#Tabla_de_Contenidos | ||
+ | |texto=Volver al índice | ||
}} | }} | ||
− | |||
<br /> | <br /> | ||
Línea 40: | Línea 164: | ||
*Este tipo de bucle donde seguro que al menos se ejecuta un iteracción | *Este tipo de bucle donde seguro que al menos se ejecuta un iteracción | ||
*Respecto al anterior nos ahorra una comparación. | *Respecto al anterior nos ahorra una comparación. | ||
− | + | *La sintaxis de esta estructura es la siguiente: | |
− | * | + | <source lang=php> |
− | * | + | do { |
+ | //Acciones | ||
+ | }while (expresión_booleana); | ||
+ | </source> | ||
+ | {{MRM_Puntos clave| | ||
+ | *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''' | ||
}} | }} | ||
− | {{MRM_Actividad|Title= | + | |
− | ; | + | {{MRM_Actividad|Title=Ejemplo de uso| |
− | + | ;Generar un número hasta que salga el 13 | |
− | + | ;mostrar las veces que hemos tenido que generar número | |
− | {{Plegable|hide| | + | {{Plegable|hide|buscando un número| |
<source lang=php> | <source lang=php> | ||
− | + | <?php | |
− | + | $contador =1; | |
− | $ | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
do{ | do{ | ||
− | + | $num=rand(1,100); | |
− | + | $contador++; | |
− | $ | + | }while($num!=13); |
− | + | echo "<h1>Hemos tirado $contador veces</h1>"; | |
− | + | ?> | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | echo "<h1> | + | |
</source> | </source> | ||
− | |||
}} | }} | ||
}} | }} | ||
+ | ;Ejercicios | ||
+ | {{MRM_Actividad|Title=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, | ||
+ | }} | ||
+ | |||
+ | {{Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/ejercicios/Bonoloto}} | ||
+ | |||
{{MRM_Actividad|Title=Generar tabla ascii| | {{MRM_Actividad|Title=Generar tabla ascii| | ||
Línea 103: | Línea 220: | ||
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Última revisión de 18:35 25 nov 2024
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 }
//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 />" }
|
|
|
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);
|
- Ejercicios
Ejercicio 19: Genera Números de Bonoloto
|
}}
Iteración for
- Es un bucle de tipo contador
for (expresion_inicial; condicion;expresion_actualizar){ sentencias; }
- Estructura for
- tiene tres partes
- 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
- El ejemplo anterior
<?php for ($a=0;$a<10 ;$a++){ echo "$a*$a=".($a*$a)."<br>"; } ?>