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...») |
|||
(32 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=Ejemplo de uso| | ||
+ | ;Generar un número hasta que salga el 13 | ||
+ | ;mostrar las veces que hemos tenido que generar número | ||
+ | {{Plegable|hide|buscando un número| | ||
+ | <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}} |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | }} | + | |
+ | {{Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/ejercicios/TablaAsciiCompleta}} | ||
{{MRM_Actividad|Title=Generar una password| | {{MRM_Actividad|Title=Generar una password| | ||
Línea 103: | Línea 214: | ||
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Línea 148: | Línea 237: | ||
</source> | </source> | ||
− | + | {{MRM_Puntos clave|Title=Partes de la estructura| | |
− | + | ||
;Estructura for | ;Estructura for | ||
*tiene tres partes | *tiene tres partes | ||
− | ;expresion_inicial: | + | ;1.- expresion_inicial: |
− | :Se ejecuta una sola vez al comienzo del bucle. se usa para inicializar variables | + | :Se ejecuta una sola vez al comienzo del bucle. se usa para '''inicializar variables'''' |
− | ;condición | + | ;2.-condición: |
− | :Es una expresión booleana que se evalúa en cada interacció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 | |
− | ;Incremento de la expresión inicial | + | deberá llevar algún break (instrucción de terminación de bloque) |
+ | en algún momento | ||
+ | ;3.-Incremento de la expresión inicial | ||
:Marca el paso o cómo se va modificando la variable de control en cada iteración | :Marca el paso o cómo se va modificando la variable de control en cada iteración | ||
+ | }} | ||
+ | {{MRM_Actividad|Title=Ejemplo de la estructura| | ||
+ | *Realiza la suma de los 100 primeros números | ||
+ | <source lang=php> | ||
+ | //Inicializamos la variable | ||
+ | //que contendrá el total | ||
+ | $suma =0; | ||
+ | //Desde $numero = 0 y mientras $numero sea menor que 100 | ||
+ | //Incrementando en cada iteración número en una unidad | ||
+ | for ($numero=0;$numero<100;$numero++){ | ||
+ | //realizo la suma con el valor de $numero | ||
+ | $suma = $suma + $numero; | ||
+ | } | ||
+ | echo "<h2>La suma de los 100 primeros números es $suma</h1>"; | ||
+ | </source> | ||
+ | }} | ||
+ | <br /> | ||
+ | *Esta estructura se usa con mucha frecuencia | ||
+ | {{MRM_Puntos clave|Title=Cuándo usarla| | ||
+ | ;Siempre que sepamos en número de veces que vamos a realizar una acción usaremos esta estructura | ||
+ | }} | ||
+ | |||
+ | ;Ejercicios | ||
+ | {{Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/ejercicios/Dados}} | ||
+ | {{Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/ejercicios/TablaAsciiCompleta}} | ||
+ | {{Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/ejercicios/SistemaNumerico}} | ||
+ | {{Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/ejercicios/TablaMultiplicarCompleta}} | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | <!-- | ||
;Estructura for: condición | ;Estructura for: condición | ||
Línea 196: | Línea 323: | ||
?> | ?> | ||
</source> | </source> | ||
+ | --> |
Última revisión de 20:56 27 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
|
Ejercicio 19 :Genera una tabla ASCII completa
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
|
}}
Iteración for
- Es un bucle de tipo contador
for (expresion_inicial; condicion;expresion_actualizar){ sentencias; }
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
|
//Inicializamos la variable //que contendrá el total $suma =0; //Desde $numero = 0 y mientras $numero sea menor que 100 //Incrementando en cada iteración número en una unidad for ($numero=0;$numero<100;$numero++){ //realizo la suma con el valor de $numero $suma = $suma + $numero; } echo "<h2>La suma de los 100 primeros números es $suma</h1>";
|
- Esta estructura se usa con mucha frecuencia
|
- Ejercicios
|
Ejercicio 19 :Genera una tabla ASCII completa
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
|
Ejercicio 19 :Sistemas numéricos
|
Ejercicio 19 :Tabla de multiplicar completa
|