Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/estrucutras control»
(4 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 1: | Línea 1: | ||
{{:Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/nav}} | {{:Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/nav}} | ||
+ | __NOTOC__ | ||
<div id=apuntes_distancia> | <div id=apuntes_distancia> | ||
− | {{ManuelRomero/PHP/ | + | |
+ | {{ManuelRomero/PHP/EstructurasControlSelectiva}} | ||
+ | {{ManuelRomero/PHP/EstructurasControlRepetitivo}} | ||
+ | <!-- | ||
{{PHP/EstructurasControl}} | {{PHP/EstructurasControl}} | ||
− | + | --> |
Última revisión de 18:11 22 nov 2024
Tabla de Contenidos
- 1. Estructuras de Control
- 2. Instrucciones Secuenciales
- 3. Selección con if
- 3.1. Sintaxis Básica
- 3.2. If gráficamente (ordinagrama)
- 3.3. `if...else`
- 3.4. `if...elseif...else`
- 3.4.1. Ejemplo de `if...elseif...else`
- 3.4.2. Visualización del `if...elseif...else`
- 3.4.3. Sintaxis Alternativa
- 3.5. Ejercicio Propuesto
- 4. Operador Ternario
- 4.1. Ejemplo
- 5. Selección con switch
- 5.1. Sintaxis
- 5.2. Notas Importantes
- 5.3. Ejemplo Básico
- 5.4. Ejemplo con Rango de Valores
- 5.5. Casos Curiosos en PHP
- 5.6. Actividad Propuesta
- 6. Selección con el operador match
Estructuras de Control
- Las estructuras de control determinan el flujo de ejecución de un programa
- Especifican el orden en que se ejecutarán las instrucciones.
- Existen tres tipos principales de estructuras de control:
- Secuenciales: Ejecutan las instrucciones en orden, una tras otra.
- Selectivas: Permiten elegir entre diferentes caminos según una condición.
- Repetitivas: Ejecutan un bloque de instrucciones varias veces según una condición.
- Para implementarlas, necesitamos operadores y condiciones, cuya sintaxis vamos a ir estudiando.
- A modo de resumen, presentamos la siguiente tabla:
Estructura de Control | Sintaxis en PHP | Ejemplo |
---|---|---|
Secuencial |
{ sentencia_1; sentencia_2; // ... } |
$num = rand(-10,20); echo "Se ha generado el número $num"; |
Selectiva |
if (expresion_booleana) { sentencia_1; sentencia_2; } sentencia_3; |
$num = rand(-10,20); if ($num < 0) { echo "El número $numero es negativo"; }else{ echo "El número $numero es positivo"; } |
Repetitiva |
while (expresion_booleana) { sentencia_1; sentencia_2; } sentencia_3; |
$num = 0; $total = 0; while ($num < 100) { $total = $total + $num; $num = $num + 1; } echo "Los primeros 100 números suman $total"; |
Instrucciones Secuenciales
- En Este tipo de estructura de control, las instrucciones se ejecutan una tras otra de.
- Las instrucciones se ejecutan en el orden en que aparecen, de forma secuencial, sin saltos ni repeticiones en el proceso.
- La imagen muestra un flujo en el que cada paso se realiza de forma consecutiva, de arriba hacia abajo.
Ejemplos de Estructura Secuencial en PHP
Operaciones matemáticas en secuencia
| |
<?php // Asignación de valores a variables $a = 5; $b = 10; $c = $a + $b; // Se suma $a y $b $d = $c * 2; // El resultado se multiplica por 2 echo "El resultado final es $d"; // Imprime el resultado ?>
|
Mostrar mensajes
| |
<?php echo "Primero se ejecuta esta línea.<br />\n"; echo "Luego se ejecuta esta línea.<br />\n"; echo "Finalmente, se ejecuta esta última línea."; ?>
|
- En ambos ejemplos
* Las instrucciones se ejecutan en orden, sin interrupciones. * Cada línea de código sigue a la anterior y se ejecuta solo una vez.
Esta estructura es la más simple de las estructuras de control y establece la base para comprender el flujo de ejecución en un programa.
Selección con if
- La estructura de control if permite evaluar una expresión booleana (una condición que puede ser verdadera o falsa).
- Siempre la expresión booleana va entre paréntesis
|
Estructura IF | Estructura IF ELSE |
---|---|
Sintaxis Básica
- La estructura básica de if es:
if (expresion_booleana) Sentencia_1;
- Si hay más de una sentencia a ejecutar cuando la condición es verdadera, debemos utilizar llaves `{ }` para agrupar el bloque de instrucciones, también lo podemos poner si solo hay una instruccion:
if (expresion_booleana) { Sentencia_1; Sentencia_2; } if (expresion_booleana){ Sentencia_1; }
- La indentación
- Es muy importante la indentación.
- Consiste en dejar espacios o sangrías al inicio de cada línea de código dentro de un bloque.
- Esto ayuda a visualizar la estructura y jerarquía de las instrucciones, facilitando la lectura y comprensión del código.
- Una buena indentación es fundamental para evitar errores y mantener el código organizado0.
Expresiones booleanas
(: Las expresiones booleanas las veremos en el capítulo siguiente Expresiones.
- Esto es una introducción para poderlas utilizar en las estructuras de control.
)
Es un conjunto de operandos y operadores
y da como resultado un valor de un determinado tipo. |
Las expresiones booleanas se definen mediante los siguientes operadores:
- Operadores de comparación.
- Operadores booleanos o lógicos.
- Operadores de comparación.
- Los operadores de comparación permiten comparar dos valores. Estos valores dependen de los [tipos que tengan asignados](http://php.net/manual/es/language.types.type-juggling.php).
- Pueden verse las diferencias comparativas en la [tabla de comparación de tipos](http://php.net/manual/es/types.comparisons.php).
**Ejemplo** | **Nombre** | **Resultado** | |||
---|---|---|---|---|---|
$x == $y | Igual | true, si son iguales (adapta tipos, lo analizaremos). | |||
$x === $y | Idéntico | true, si son exactamente iguales (valor y tipo). | |||
$x != $y | Distinto | true, si son diferentes, (adapta tipos, lo analizaremos). | $x <> $y | Distinto | true, si son diferentes, (adapta tipos, lo analizaremos). |
$x !== $y | No idéntico | true, si son diferentes (valor y tipo) . | |||
$x < $y | Menor que | true, si $x es menor que $y. | |||
$x > $y | Mayor que | true, si $x es mayor que $y. | |||
$x <= $y | Menor o igual que | true, si $x es menor o igual que $y. | |||
$x >= $y | Mayor o igual que | true, si $x es mayor o igual que $y. |
(: PHP si comparo valores de diferentes tipo, va a realizar conversiones que veremos más adelante
- [conversión de string a números](http://php.net/manual/es/language.types.string.php#language.types.string.conversion).
)
- Operadores Lógicos
Los operadores lógicos permiten combinar expresiones booleanas para realizar evaluaciones más complejas.
**Operador** | **Resultado** | |
---|---|---|
$x and $y | true si $x y $y son true. | |
$x or $y | true si uno de los dos es true (o los dos). | |
$x xor $y | true si **sólo uno** de los dos es true. | |
!$x | true si $x **no** es true. | |
$x && $y | true si $x y $y son true. | |
$x <no wiki> | </nowiki> $y | true si uno de los dos es true (o los dos). |
Formularios
(: Los Formularios, constituyen un tema posterior
- Realizamos una introducción para tener más opciones a la hora de proponer ejercicios
- De esta forma podremos aportar valores por parte del usuario a la ejecución de los mismos
)
- Ejemplos
Programa que obtiene el valor absoluto de un número |
---|
$num = rand(-10, 20); if ($num < 0) { $num = -$num; } echo "El valor absoluto del número es $num"; }} |
- Ejercicios
- Realiza los siguientes ejercicios
If gráficamente (ordinagrama)
La imagen muestra el flujo de ejecución: si la expresión booleana es true', se ejecutan las sentencias dentro del bloque if; si es false, el flujo continúa después del bloque.
if...else
- Podemos añadir una estructura else para especificar un bloque de sentencias que se ejecutará solo cuando la condición sea false.
if (expresion_booleana) { bloque_de_sentencias_1; } else { bloque_de_sentencias_2; }
- Ejemplo de `if...else`
{{plegable|hidden|Miramos si una edad en mayor o menor de edad| <source lang=php> $edad = rand(1,35); if ($edad >= 18) { echo "Eres mayor de edad."; } else { echo "Eres menor de edad."; }
}}
- Si $edad es 18 o más, se imprime "Eres mayor de edad". Si $edad es menor que 18, se imprime "Eres menor de edad".
if...else gráfico (Ordinograma)
La imagen muestra que si la condición es true, se ejecuta el bloque if; si es false, se ejecuta el bloque else.
- Realiza los siguientes ejercicios
`if...elseif...else`
- La estructura `if...elseif...else` permite evaluar múltiples condiciones en secuencia. Solo se ejecutará el bloque correspondiente a la primera condición verdadera.
if (expresion_booleana_1) { bloque_sentencias_1; } elseif (expresion_booleana_2) { bloque_sentencias_2; } elseif (expresion_booleana_3) { bloque_sentencias_3; } else { bloque_sentencias_4; }
Ejemplo de `if...elseif...else`
$nota = 85; if ($nota >= 90) { echo "Excelente"; } elseif ($nota >= 75) { echo "Bueno"; } elseif ($nota >= 50) { echo "Aprobado"; } else { echo "Reprobado"; }
- En este ejemplo, dependiendo del valor de `$nota`, el programa imprime un mensaje diferente. Solo se ejecuta el bloque de la primera condición verdadera.
Visualización del `if...elseif...else`
La imagen muestra cómo se evalúan varias condiciones en secuencia hasta que una sea verdadera. Si ninguna lo es, se ejecuta el bloque `else`.
Sintaxis Alternativa
- PHP permite una sintaxis alternativa para if, else, y elseif, especialmente útil cuando se intercala código HTML:
if (condicion): Sentencia_1; elseif (otra_condicion): Sentencia_2; else: Sentencia_3; endif;
- Ejemplo con HTML:
<?php if (true): ?> <h1>Este contenido se mostrará</h1> <?php else: ?> <h1>Este contenido no se mostrará</h1> <?php endif; ?>
Ejercicio: Selección con html
<?php if (true): ?> <h1>Este contenido se mostrará</h1> <?php else: ?> <h1>Este contenido no se mostrará</h1> <?php endif; ?>
|
Ejercicio Propuesto
- Escribe un programa que evalúe la temperatura y muestre un mensaje según el rango:
- Si la temperatura es menor que 0: "Hace mucho frío". - Si la temperatura está entre 0 y 15: "Hace frío". - Si la temperatura está entre 15 y 30: "Temperatura agradable". - Si la temperatura es mayor que 30: "Hace calor".
$temp = rand(-10, 40); // Genera una temperatura aleatoria echo "La temperatura actual es $temp grados.\n"; // Escribe el código del ejercicio aquí
Operador Ternario
- El operador ternario es una forma más compacta de expresar una estructura if-else en una única línea, ideal cuando se desea evaluar una condición y devolver un valor en función del resultado.
- Esta expresión retorna un valor según la condición especificada.
(expresión_booleana) ? valor_si_true : valor_si_false;
- El valor que retorna es el resultado de la expresión que corresponda según el valor de la condición. Esta expresión es equivalente a:
if (expresión_booleana) valor_si_true; else valor_si_false;
- Usar el operador ternario ayuda a escribir el código de forma más compacta y clara, especialmente en expresiones sencillas.
Ejemplo
Operador ternario |
---|
Programa para par o impar con operador ternario <?php $num = rand(1, 100); echo ($num % 2 == 0) ? "$num es par" : "$num es impar"; ?> |
Estructura if-else |
---|
Programa para par o impar con estructura if-else <?php $num = rand(1, 100); if ($num % 2 == 0) { echo "$num es par"; } else { echo "$num es impar"; } ?> |
- Este operador ternario se utiliza mucho en programación, y conviene entenderlo y habituarse a su uso para escribir código más conciso y claro.
Selección con switch
- El operador switch es un selector múltiple que permite evaluar el valor de una variable o expresión y ejecutar el bloque de código correspondiente al primer caso que coincida.
- En PHP, la sentencia `case` puede albergar valores de cualquier tipo simple (números, cadenas, etc.), no está limitada a enteros como en otros lenguajes.
- Esta estructura es útil cuando tenemos múltiples casos excluyentes y queremos evitar múltiples `if-else`.
Sintaxis
La sintaxis básica de un `switch` en PHP es:
switch ($valor) { case "valor1": // acciones break; case "valor2": // acciones break; case "valorn": // acciones break; default: // acciones si no hay coincidencia }
Notas Importantes
- El switch busca la primera coincidencia de $valor con los valores de los casos (case) y ejecuta todas las instrucciones posteriores hasta encontrar un break.
- Si no se coloca un break, continuará ejecutando los casos siguientes, incluso si no coinciden.
Ejemplo Básico
Ejemplo: Identificar un Nombre
| |||
|
Ejercicio 16: Selección con switch
- Genera un número de mes de forma aleatoria.
- Muestra el número de días que tiene el mes.
- Genera un mensaje informativo con el texto "El mes X tiene XXX días"
- Realiza usando `switch`:
(: Intenta que se muestre también el nombre del mes junto con el número de días )
$mes = rand(1, 15); switch ($mes) { case 1: $dias=31; break; case 2: $dias=29; break; // Continúa con los demás casos default: $dias = "Mes incorrecto<br />"; }
}}
Ejemplo con Rango de Valores
- En algunos casos, queremos evaluar rangos de valores (por ejemplo, edades, calificaciones). En PHP, esto se logra usando expresiones booleanas dentro de los `case` y configurando el `switch` para evaluar `true`.
Ejemplo: Nivel de Madurez
| |||
- 0–2: Bebé - 3–10: Niñez - 11–17: Adolescencia - 18–26: Juventud - 27–59: Adultez - 60–80: Experimentado - Más de 80: Disfrutando la vida
|
Casos Curiosos en PHP
- PHP en una comparación, adapta los tipos a comparar (si puede).
- Simpre que compare un entero con un booleano, convertirá el entero a booleano.
- En PHP, si especificamos expresiones booleanas dentro de un case, deberíamos de establecer también un booleano en el switch para evaluar `true`.
- Esto evita errores de interpretación con valores como `0`.
- Ejemplo Problemático**:
<?php $nota = 0; switch ($nota) { case ($nota >= 0 && $nota <= 3): echo "Nota deficiente"; break; case 4: echo "Nota insuficiente"; break; case 5: echo "Nota suficiente"; break; case ($nota > 6 && $nota < 9): echo "Nota notable"; break; case ($nota >= 9): echo "Nota sobresaliente"; break; } ?>
- Si `$nota = 0`, el primer caso no se ejecuta porque PHP convierte `0` a booleano `false`, lo que genera errores lógicos.
- Solución Recomendada**:
<?php $nota = rand(0, 10); switch (true) { case ($nota >= 0 && $nota <= 3): echo "Nota deficiente"; break; case $nota == 4: echo "Nota insuficiente"; break; case $nota == 5: echo "Nota suficiente"; break; case $nota == 6: echo "Nota bien"; break; case ($nota >= 7 && $nota <= 8): echo "Nota notable"; break; case ($nota >= 9): echo "Nota sobresaliente"; break; } ?>
- Ejercicos propuestos
Tabla de Contenidos
- Estructuras secuenciales
- Ejercicio 1: Usa la instrucción echo
- Ejercicio 2: Probando printf
- Ejercicio 3: printf, tabla ASCII
- Ejercicio 4: Ver tipos de variable
- Ejercicio 5: Probando los tipos enteros
- Ejercicio 6: Funciones de conversión 1
- Ejercicio 6.1: Trabajando con flotantes
- Ejercicio 7: Funciones de conversión
- Ejercicio 8: Declaración de variables 1
- Ejercicio 9: Declaración de variables 2
- Ejercicio 10: Cambiar aleatoriamente el estilo de un texto
- Ejercicio 10.1: Asignación con heredoc
- Ejercicio 11: Probando variables de variables
- Estructuras de control
- Ejercicio 12: Selección simple
- Ejercicio 13: Selección simple 2
- Ejercicio 14: Selección completa
- Ejercicio 15: Selección múltiple con if
- Ejercicio 16: Selección con switch
- Ejercicio 17: Muestra el nombre y el número de días de un mes
- Ejercicio 18: Suma de los primeros 100 números
- Ejercicio 19: Tirar dados
- Ejercicio 20: Mostrar mes y su número de días
- Ejercicio 20.1: Validar fechas
Estructuras secuenciales
Ejercicio 1: Usa la instrucción echo
|
Ejercicio 2: Probando printf
|
Ejercicio 3: printf, tabla ASCII
for ($n=32; $n<128; $n++){ // iterará desde 32 hasta 128 }
<table> <caption></caption> <tr> <th>Título 1</th> <th>Título 2</th> </tr> <tr> <td>Valor</td> </tr> </table>
|
Ejercicio 4: Ver tipos de variable
$a = 10; echo "Valor de la variable \$a es $a y es de tipo ".gettype($a)."<br />";
|
Ejercicio 5: Probando los tipos enteros
|
Ejercicio 6: Funciones de conversión 1
$num = 10; echo "Decimal: $num<br />"; echo "Binario: " . decbin($num) . "<br />"; echo "Hexadecimal: " . dechex($num) . "<br />"; echo "Octal: " . decoct($num) . "<br />";
|
Ejercicio 6.1: Trabajando con flotantes
$float1 = 1.2; $float2 = 1.23; $float3 = 1.234; $float4 = 1.2345; echo "Formato Europeo: " . number_format($float1, 2, ',', '.') . "<br />"; echo "Formato Científico: " . sprintf("%.2E", $float2) . "<br />";
|
Ejercicio 7: Funciones de conversión
for ($i = 1; $i <= 100; $i++) { echo "Número: $i, Binario: " . decbin($i) . ", Hexadecimal: " . dechex($i) . ", Octal: " . decoct($i) . "<br />"; }
|
Ejercicio 8: Declaración de variables 1
$int = 10; $float = 20.5; $string = "Esto es una cadena"; $bool = true; echo "Entero: $int<br />"; echo "Flotante: $float<br />"; echo "Cadena: $string<br />"; echo "Booleano: " . ($bool ? 'true' : 'false') . "<br />";
|
Ejercicio 9: Declaración de variables 2
** 125 ** 0874 // Observarás que esta asignación produce un error, ya que el 8 no es un dígito válido en el sistema octal. ** 0xAbC12 ** 0b1100 ** "Esto es una cadena de caracteres" ** 'Esto es otra cadena de caracteres' ** Cadena multilínea: ``` Esto es una cadena multilínea y termina aquí. ``` ** 1.23432230003322014000002234101 ** 1234E-2 ** null ** true ** false $int = 125; $octal = 0874; // Error $hex = 0xAbC12; $binary = 0b1100; $string1 = "Esto es una cadena de caracteres"; $string2 = 'Esto es otra cadena de caracteres'; $float = 1.23432230003322014000002234101; $scientific = 1234E-2; $null = null; $true = true; $false = false; echo "Entero: $int<br />"; echo "Hexadecimal: $hex<br />"; echo "Binario: $binary<br />"; echo "Cadena 1: $string1<br />"; echo "Cadena 2: $string2<br />"; echo "Flotante: $float<br />"; echo "Científico: $scientific<br />"; echo "Null: " . var_export($null, true) . "<br />"; echo "Booleano True: " . var_export($true, true) . "<br />"; echo "Booleano False: " . var_export($false, true) . "<br />";
|
Ejercicio 10: Cambiar aleatoriamente el estilo de un texto
<hx style="color:#RGB;">Este es el texto que debe de aparecer cambiante</hx>
** `x`: un valor de 1 a 6. ** `R`: un valor en hexadecimal de entre 0 y 255 (tonalidad de rojo). ** `G`: un valor en hexadecimal de entre 0 y 255 (tonalidad de verde). ** `B`: un valor en hexadecimal de entre 0 y 255 (tonalidad de azul). $x = rand(1, 6); $R = dechex(rand(0, 255)); $G = dechex(rand(0, 255)); $B = dechex(rand(0, 255)); echo "<h$x style='color:#$R$G$B;'>Texto aleatorio con estilo</h$x>";
|
Ejercicio 10.1: Asignación con heredoc
$cliente = "Juan Pérez"; $fecha = date("d/m/Y"); $factura = 1; $producto1 = "Cuadros"; $precio1 = rand(1, 100); $producto2 = "Luminarias intensas"; $precio2 = rand(1, 100); $facturaContent = <<<FACTURA ======================================== FACTURA Número: $factura ======================================== Cliente: $cliente Fecha: $fecha Producto 1: $producto1 - Precio: $precio1 € Producto 2: $producto2 - Precio: $precio2 € ======================================== FACTURA; echo nl2br($facturaContent);
|
Ejercicio 11: Probando variables de variables
$tomate = 2.5; $cebolla = 1.2; $zanahoria = 1.8; $producto = "tomate"; echo "El precio de $producto es ${$producto} €<br />"; $producto = "cebolla"; echo "El precio de $producto es ${$producto} €<br />";
|
Ejercicio 12: Selección simple
$numero = rand(1, 100); if ($numero % 2 == 0) { echo "¡Has ganado un premio! Número: $numero<br />"; } else { echo "Número obtenido: $numero<br />"; }
|
Ejercicio 13: Selección simple 2
$edad = rand(1, 90); echo "Edad generada: $edad<br />"; if ($edad < 18) { echo "<span style='color:red;'>Menor de edad</span><br />"; }
|
Ejercicio: Selección con html
<?php if (true): ?> <h1>Este contenido se mostrará</h1> <?php else: ?> <h1>Este contenido no se mostrará</h1> <?php endif; ?>
|
Ejercicio 14: Selección completa
$edad = rand(1, 90); if ($edad < 18) { echo "Edad: $edad. Es menor de edad.<br />"; } else { echo "Edad: $edad. Es mayor de edad.<br />"; }
|
Ejercicio 15: Selección múltiple con if
{{MRM_Actividad|Title=[[Usuario:ManuelRomero/ProgramacionWeb/Sintaxis/ejercicios/ejercicio15| Selección múltiple con if |
- Genera un número entre 1 y 15.
- Muestra el nombre del mes correspondiente al número (enero, febrero...).
- Si el número es mayor de 12, muestra "Mes incorrecto".
$mes = rand(1, 15); if ($mes == 1) { echo "Enero<br />"; } elseif ($mes == 2) { echo "Febrero<br />"; } // Continúa con los demás casos else { echo "Mes incorrecto<br />"; }
}}
Ejercicio 16: Selección con switch
Ejercicio 17: Muestra el nombre y el número de días de un mes
$mes = rand(1, 12); switch ($mes) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: echo "Mes: Enero, Días: 31<br />"; break; case 4: case 6: case 9: case 11: echo "Mes: Abril, Días: 30<br />"; break; case 2: echo "Mes: Febrero, Días: 28 o 29<br />"; break; }
|
Ejercicio 18: Suma los 100 primeros números
$suma = 0; echo "<table border='1'>"; echo "<tr><th>Iteración</th><th>Suma acumulada</th></tr>"; for ($i = 1; $i <= 100; $i++) { $suma += $i; echo "<tr><td>{$i}</td><td>{$suma}</td></tr>"; } echo "</table>";
|
Ejercicio 19: Tirar dados
$resultados = array_fill(1, 6, 0); for ($i = 0; $i < 100000; $i++) { $dado = rand(1, 6); $resultados[$dado]++; } foreach ($resultados as $cara => $veces) { echo "Cara $cara salió $veces veces<br />"; }
|
Ejercicio 20: Mostrar mes y su número de días
$mes = rand(1, 15); switch ($mes) { case 1: echo "Enero - 31 días<br />"; break; case 2: echo "Febrero - 28 o 29 días<br />"; break; case 3: echo "Marzo - 31 días<br />"; break; // Continúa con los demás casos default: echo "Mes incorrecto<br />"; }
|
Ejercicio 20.1: Validar fechas
$dia = rand(1, 33); $mes = rand(1, 14); $anio = rand(1, 3000); if (checkdate($mes, $dia, $anio)) { echo "La fecha $dia/$mes/$anio es válida.<br />"; } else { echo "La fecha $dia/$mes/$anio no es válida.<br />"; }
|
Ejercicio 21: Tabla de multiplicar
$numero = rand(1, 10); echo "<table border='1'>"; echo "<tr><th>Multiplicador</th><th>Resultado</th></tr>"; for ($i = 1; $i <= 10; $i++) { echo "<tr><td>$numero x $i</td><td>" . ($numero * $i) . "</td></tr>"; } echo "</table>";
|
Ejercicio 22: Genera una nómina
** Más de 40 horas son extras (1.5 el precio base). ** IRPF: *** < 600€ exento. *** Entre 600€ y 800€: 5%. *** Más de 800€: 12%.
$horas = rand(30, 50); $precioHora = 10; $bruto = $horas <= 40 ? $horas * $precioHora : (40 * $precioHora) + (($horas - 40) * $precioHora * 1.5); if ($bruto < 600) { $irpf = 0; } elseif ($bruto <= 800) { $irpf = $bruto * 0.05; } else { $irpf = $bruto * 0.12; } $neto = $bruto - $irpf; echo "Horas trabajadas: $horas<br />"; echo "Bruto: $bruto €<br />"; echo "IRPF: $irpf €<br />"; echo "Neto: $neto €<br />";
|
Ejercicio 23: Número primo
$numero = rand(1, 100); $esPrimo = true; if ($numero < 2) { $esPrimo = false; } else { for ($i = 2; $i <= sqrt($numero); $i++) { if ($numero % $i == 0) { $esPrimo = false; break; } } } if ($esPrimo) { echo "El número $numero es primo.<br />"; } else { echo "El número $numero no es primo.<br />"; }
|
Ejercicio 24: Fechas básicas
** Cuántos segundos han pasado desde el 1 de enero de 1970 hasta el instante actual. ** La fecha actual en formato `Día/Mes/Año Hora:Minutos:Segundos`. ** La fecha dentro de 25 horas con el formato anterior. ** Una página que se recargue automáticamente cada 5 segundos usando la etiqueta `META Refresh`. echo "Segundos desde 1/1/1970: " . time() . "<br />"; echo "Fecha actual: " . date("d/m/Y H:i:s") . "<br />"; echo "Fecha dentro de 25 horas: " . date("d/m/Y H:i:s", time() + (25 * 3600)) . "<br />"; <head> <meta http-equiv="refresh" content="5"> </head>
|
Ejercicio 25: Calcula tu edad
Ejercicio 25: Calcula la edad
** Una opción aproximada es encontrar los segundos de tu edad y dividirlos entre los segundos que tiene un año. ** Busca una solución más precisa. $fechaNacimiento = strtotime("1990-01-01"); $edadEnSegundos = time() - $fechaNacimiento; $edadAprox = floor($edadEnSegundos / (365.25 * 24 * 3600)); echo "Tu edad aproximada es: $edadAprox años<br />";
|
Ejercicio 26: Haz un Reloj
$microtime = microtime(true); $milisegundos = sprintf("%03d", ($microtime - floor($microtime)) * 1000); echo "Hora actual: " . date("H:i:s") . ":$milisegundos<br />"; <head> <meta http-equiv="refresh" content="0.01"> </head>
|
Ejercicio 27: Fecha aleatoria
$fechaRandom = mktime(rand(0, 23), rand(0, 59), rand(0, 59), rand(1, 12), rand(1, 28), rand(1900, 2100)); echo "Fecha generada: " . date("d/m/Y H:i:s", $fechaRandom) . "<br />"; $diferenciaSegundos = time() - $fechaRandom; echo "Diferencia en segundos con la fecha actual: $diferenciaSegundos<br />";
|
Ejercicio 28: Fecha en idiomas
setlocale(LC_ALL, "es_ES"); echo "Fecha en español: " . strftime("%A, %d de %B de %Y") . "<br />"; setlocale(LC_ALL, "fr_FR"); echo "Fecha en francés: " . strftime("%A, %d %B %Y") . "<br />"; setlocale(LC_ALL, "en_US"); echo "Fecha en inglés: " . strftime("%A, %B %d, %Y") . "<br />";
|
Ejercicio 29: Indica los días de la semana en idiomas
$dias = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]; foreach (["es_ES", "fr_FR", "en_US"] as $idioma) { setlocale(LC_ALL, $idioma); echo "Idioma: $idioma<br />"; foreach ($dias as $dia) { echo strftime("%A", strtotime($dia)) . "<br />"; } }
|
Ejercicio 30: Declarar una función
function mayor($a, $b) { return $a > $b ? $a : $b; } echo "El mayor entre 5 y 10 es: " . mayor(5, 10) . "<br />";
|
Ejercicio 31: Variables globales
$numero = rand(1, 100); function esPar($num) { return $num % 2 == 0; } echo "El número $numero es " . (esPar($numero) ? "par" : "impar") . ".<br />";
|
Ejercicio 32: Parámetros por referencia
function modificarValor(&$valor) { if ($valor % 2 == 0) { $valor /= 2; } else { $valor *= 2; } } $num = rand(1, 100); modificarValor($num); echo "El nuevo valor es: $num<br />";
|
Ejercicios de sintaxis
|
- Generar un número aleatorio para el mes (entre 1 y 12) y mostrar el número de días correspondientes. Si el número no corresponde a un mes válido, informar al usuario.
Posible Solución |
---|
<?php $mes = rand(1, 15); switch ($mes) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: echo "$mes es un mes de 31 días"; break; case 4: case 6: case 9: case 11: echo "$mes es un mes de 30 días"; break; case 2: echo "$mes es un mes de 28 o 29 días (dependiendo del año)"; break; default: echo "$mes no es un mes válido"; } ?> |
Selección con el operador match
- El operador match aparece en php en la versión 8
- Es una opción depurada y para casos concretos que puede sustituir de forma más eficiente y legigle a la estructura switch-case
|
- A continuación podemos ver ejemplos
$numero_mes = rand(1,15); $nombre_mes = match ($numero_mes){ 1=>"Enero", 2=>"Febrero", ..... default => "Mes incorrecto" }; echo "El mes $numero_mes es $nombre_mes"
- Aquí vemos el uso de varios valores posibles en la comparación
```php $numero_mes = rand(1,15); $numero_dias=match($mes){ 1,3,5,7,8,10,12 => 31, 4,6,8,11 =>30, 2 => 28 }; echo "El mes $mes tiene $numero_dias días";
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.
}}
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>"; } ?>