Plantilla:ManuelRomero/PHP/EstructurasControlSelectiva

De WikiEducator
Saltar a: navegación, buscar


Tabla de Contenidos


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:
  1. Secuenciales: Ejecutan las instrucciones en orden, una tras otra.
  2. Selectivas: Permiten elegir entre diferentes caminos según una condición.
  3. 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:
Resumen de las estructuras de control
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";
 Volver al índice


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.
Secuencial.png
  • 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



Icon casestudy.gif
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
?>




Icon casestudy.gif
Mostrar mensajes
  • Ejemplo 2: Mostrar mensajes secuenciales
<?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.


 Volver al índice


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


Icon key points.gif

Puntos clave

Si la expresión booleana es true ejecutará un bloque de sentencias
Si no, o lo omitirá, o ejecutará otro si se especifica.



Estructura IF Estructura IF ELSE
Estructura if.png
Estructura if else.png
 Volver al índice

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


(Comment.gif: Las expresiones booleanas las veremos en el capítulo siguiente Expresiones.

Esto es una introducción para poderlas utilizar en las estructuras de control.

)




Icon define.gif
Definición

Es un conjunto de operandos y operadores

Qué se evalúa

y da como resultado un valor de un determinado tipo.



Icon key points.gif

Puntos clave

El tipo de la expresión lo establece el operador.
  • Será el tipo del valor devuelto.


Las expresiones booleanas se definen mediante los siguientes operadores:

Operadores de comparación.
Operadores booleanos o lógicos.
Operadores de comparación.
Operadores de comparación
**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.


(Comment.gif: PHP si comparo valores de diferentes tipo, va a realizar conversiones que veremos más adelante

)


Operadores Lógicos

Los operadores lógicos permiten combinar expresiones booleanas para realizar evaluaciones más complejas.

Operadores Lógicos
**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


(Comment.gif: 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
Ejercicios
Realiza los siguientes ejercicios


Icon activity.jpg
Ejercicio 12: Selección simple
  • Generamos un número aleatoria entre 1 y 100
  • Si el número es par informamos que ha ganado un premio
  • En cualquier caso mostramos el número obtenido





Icon activity.jpg
Ejercicio 13: Selección simple 2
  • Generamos una edad entre 1 y 90 años
  • Mostraremos la edad generada
  • En caso de tener menos de 18 años informaremos de ello en un mensaje en rojo




 Volver al índice


If gráficamente (ordinagrama)

Estructura if.png

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.

 Volver al índice


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".
 Volver al índice


if...else gráfico (Ordinograma)

Estructura if else.png

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



Icon activity.jpg
Ejercicio 14: Selección simple completa
  • Generamos una edad entre 1 y 90 años
  • El programa nos dirá si la edad generada es o no mayor de edad





Icon activity.jpg
Mostrar nombre mes
  • Generamos un número entre 1 y 15
  • Mostramos el número del mes y su nombre (el que correspondiente al número: enero, febrero, ...
  • En caso de ser mayor de 12 mostraremos mes incorrecto
  • Usamos la estructura
if (..)
       ...
 elseif
       ...
 elseif 
       ...
 ...
 else
     ....





Icon activity.jpg
Ecuación segundo grado
  • Se trata de encontrar dos valores para que la ecuación se satisfaga (que sea 0)
  • La ecuación que lo resuelve también se aporta
E1g.png
Podemos ver la ecuación que resuelve el problema
E1g analisis.png




 Volver al índice


`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;
}
 Volver al índice

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`

Estructura if elseif.png

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; ?>
 Volver al índice


Ejercicio: Selección con html



Icon activity.jpg
  • Un formulario que pida edad y nombre
  • En función de la edad mostraremos un texto y otro
  • Si es menor de edad mostramos un mensaje en color azul de fondo que es menor de dad
  • En el caso de ser mayor de edad mostramos otro texto con otro color
  • Usamos la estructura
<?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í
 Volver al índice


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.
 Volver al índice

Ejemplo



Icon activity.jpg
Actividad
Determinar si un número aleatorio es par o 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.
 Volver al índice

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
}
 Volver al índice

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



Icon casestudy.gif
Ejemplo: Identificar un Nombre
  • Escribe un programa que evalúe si una variable `$nombre` es "María", "Pedro", o cualquier otro nombre.



 Volver al índice

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`:

(Comment.gif: 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 />";
}
 Volver al índice

}}

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`.



Icon casestudy.gif
Ejemplo: Nivel de Madurez
  • Generar una edad aleatoria entre 0 y 110 y clasificarla según el 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



 Volver al índice

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;
}
?>
 Volver al índice


Ejercicos propuestos

Contenido

Estructuras secuenciales

Ejercicio 1: Usa la instrucción echo



Icon activity.jpg
  • Realiza un programa donde visualices un mensaje usando la instrucción echo.
  • Prueba a insertar caracteres especiales \n, \t.
  • ¿Qué diferencia hay en usar \n e insertar la etiqueta `
    `? Pruébalo y verifica la salida.




Ejercicio 2: Probando printf



Icon activity.jpg
Ejercicio 2 : Probando printf
  • Asigna a una variable un valor real.
  • Visualiza dicho valor con formato %s, %f, %F, %c, %x, %X, %b, %o.
  • Prueba a especificar en número de decimales en %f.



Ejercicio 3: printf, tabla ASCII



Icon activity.jpg
Ejercicio 3: printf, tabla ASCII
  • Usando la estructura de control for:
for ($n=32; $n<128; $n++){ 
    // iterará desde 32 hasta 128
}
  • Para mostrar una tabla básica, usa etiquetas HTML como:
<table>
    <caption></caption>
    <tr>
        <th>Título 1</th>
        <th>Título 2</th>
    </tr>
    <tr>
        <td>Valor</td>
    </tr>
</table>
  • Realiza el programa que genere dicha tabla.



Ejercicio 4: Ver tipos de variable



Icon activity.jpg
Ejercicio 4 : Ver tipos de variable
  • Asigna a una variable cada uno de los cinco tipos básicos.
  • Después de cada asignación visualiza el tipo con la función gettype().
$a = 10;
echo "Valor de la variable \$a es $a y es de tipo ".gettype($a)."<br />";



Ejercicio 5: Probando los tipos enteros



Icon activity.jpg
Ejercicio 5 : Probando los tipos enteros
  • Haz un programa que asigne diferentes valores enteros a las variables.
  • Realiza la asignación en distintos formatos (decimal, octal, hexadecimal y binario).
  • Prueba posteriormente a visualizarlos.
  • Analiza e interpreta el resultado.




Ejercicio 6: Funciones de conversión 1



Icon activity.jpg
Ejercicio 6 : Funciones de conversión 1
  • Usa las funciones especificadas anteriormente (`decbin`, `dechex`, `decoct`) para visualizar un número en diferentes formatos numéricos.
  • Muestra el valor original y el convertido.
  • En el primer caso muestra el tipo del valor que retorna la función usada.
$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



Icon activity.jpg
Ejercicio 6.1 : Trabajando con flotantes
  • Define cuatro valores flotantes en notación decimal y científica.
  • Que tengan 1, 2, 3 y 4 números decimales respectivamente.
  • Visualízalos.
  • Intenta crearlos con la función `rand()`, no es trivial.
  • Utiliza `number_format` para mostrar los valores con diferentes números de decimales y en formato europeo.
  • Prueba algún otro formato usando la función `number_format`.
$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



Icon activity.jpg
Ejercicio 7 : Funciones de conversión
  • Usa las funciones especificadas para visualizar en los tres sistemas decimales los números del 1 al 100.
  • ¿Qué diferencia hay en hacerlo así y usar `printf`?
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



Icon activity.jpg
Ejercicio 8 : Declaración de variables 1
  • Haz un programa donde declares variables de diferentes tipos.
  • Asigna los valores con diferente formato.
  • Visualiza sus valores.
$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



Icon activity.jpg
Ejercicio 9 : Declaración de variables 2
  • Este programa asignará los siguientes valores a variables y luego lo visualizará:
 ** 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



Icon activity.jpg
Ejercicio 10 : Cambiar aleatoriamente el estilo de un texto
  • Carga un texto con un tamaño de encabezado `h` y color aleatorio.

<hx style="color:#RGB;">Este es el texto que debe de aparecer cambiante</hx>

  • `x`, `R`, `G` y `B` tendrán valores generados aleatoriamente:
 ** `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



Icon activity.jpg
Ejercicio 10.1 : Asignación con heredoc
  • Vamos a construir una factura de dos productos.
  • Declaramos las siguientes variables:
$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



Icon activity.jpg
Ejercicio 11 : Probando variables de variables
  • Declara los precios de 5 productos de hortalizas.
  • Declara una variable `$producto`.
  • Visualiza el producto y su precio cambiando solo el valor de la variable `$producto`:
$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 />";



Ejercicios de selección

Ejercicio 12: Selección simple



Icon activity.jpg
Ejercicio 12 : Selección simple
  • Genera un número aleatorio entre 1 y 100.
  • Si el número es par, informa que ha ganado un premio.
  • En cualquier caso, muestra el número obtenido:
$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



Icon activity.jpg
Ejercicio 13 : Selección simple 2
  • Genera una edad entre 1 y 90 años.
  • Muestra la edad generada.
  • Si la edad es menor de 18 años, informa de ello en un mensaje en rojo:
$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



Icon activity.jpg
  • Un formulario que pida edad y nombre
  • En función de la edad mostraremos un texto y otro
  • Si es menor de edad mostramos un mensaje en color azul de fondo que es menor de dad
  • En el caso de ser mayor de edad mostramos otro texto con otro color
  • Usamos la estructura
<?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



Icon activity.jpg
Ejercicio 14 : Selección completa
  • Genera una edad entre 1 y 90 años.
  • El programa indicará si la edad generada corresponde a un menor o mayor de edad:
$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 />";
}
 Volver al índice

}}

Ejercicio 16: Selección con switch



Icon activity.jpg
  • Genera un número de mes de forma aleatoria.
  • Muestra el número y el número de días que tiene
  • Realiza usando `switch`:

(Comment.gif: 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 />";
}




Ejercicio 17: Muestra el nombre y el número de días de un mes



Icon activity.jpg
Ejercicio 17 : Muestra el nombre y el número de días de un mes
  • Modifica el ejercicio anterior añadiendo la información del número de días.
  • Intenta seguir usando el `switch`.
  • ¿Cómo podrás hacer cosas particulares en cada `case` del `switch` (el nombre del mes) y algo común en varios casos (meses de 30 días y de 31 días)?
$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 17(Con imágenes): Tirar un dado



Icon activity.jpg
  • Tenemos un index.php que nos muestra 6 dados según imagenes

Se trata de hacer un programa que apuestes por un dado El programa generará un valor aleatorio y me dirás si he ganado o perdido. Se puede usar un formulario como sigue:

   <form action="jugar.php" method="post">
       <div style="margin: 0px auto;width:100%; text-align: center">
       <button type="submit" name="dado" value="1">
           <img src="./imagenes/dado_1.png" alt="">
       </button>
       <button type="submit" name="dado" value="2">
           <img src="./imagenes/dado_2.png" alt="">
       </button>
       <button type="submit" name="dado" value="3">
           <img src="./imagenes/dado_3.png" alt="">
       </button>
       <button type="submit" name="dado" value="4">
           <img src="./imagenes/dado_4.png" alt="">
       </button>
       <button type="submit" name="dado" value="5">
           <img src="./imagenes/dado_5.png" alt="">
       </button>
       <button type="submit" name="dado" value="6">
           <img src="./imagenes/dado_6.png" alt="">
       </button>
   </form>

Al ser lo button de tipo submit, al presionar uno de ellos iremos al fichero jugar.php y podremos obtener el valor del botón presionado

  $dado = $_POST['dado'];


Icon key points.gif

Puntos clave

Si quieres un ejecto visual puedes recagar la página cada segundo y que vaya apareciendo los dados
  • Para ello has de añadir una etiqueta meta de tipo refresh en la cabecera de la página
 <meta http-equiv="refresh" content="1">
Esto hará que la página se cargue cada seguno
Dado animado.gif





Ejercicio repaso de match: calculadora



Icon activity.jpg
  • Usando el match y un formulario simple, realiza una calculadora con las operaciones básica

Form calculadora basica.png

  • Al seleccionar calcular nos mostrará el resultado

Resultado.png

  • En caso de que el valor no sea numérico, asignaremos un número aleatorio del 1 al 100





Ejercicios con bucles

Ejercicio 18: Suma los 100 primeros números




Icon activity.jpg
Ejercicio 18 : Suma los 100 primeros números
  • Muestra la suma de los primeros 100 números naturales.
  • Visualiza cada paso en una tabla con las iteraciones.
$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



Icon activity.jpg
  • Simula tirar un dado 100,000 veces.
  • Cuenta cuántas veces aparece cada número (1-6).
  • Prueba a hacerlo tanto con rand como con mt_rand.
  • Puedes mostrar el resultado usando las imágenes de dados para darle un aspecto más visual:





Ejercicio 19: Buscar parejas tirando dados



Icon activity.jpg
  • Tiramos los dados hasta que nos salgan 2 veces el mismo número
  • Mostramos el número que nos ha salido en pareja
  • Mostramos el número de tiradas
  • Se puede usar las imágenes

(Comment.gif: Puedes añadirle al juego que apuestes por la pareja que va a salir, parecido al ejercicio de tirar dados)


</source>



Ejercicio 19: Genera Números de Bonoloto



Icon activity.jpg
  • 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




Ejercicio 19 :Genera una tabla ASCII completa



Icon activity.jpg
  • 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)




Ejercicio 19 :Sistemas numéricos



Icon activity.jpg
  • Creamos una tabla con los la representación de sistemas numéricos
  • Mostraremos en binario, octal, hexadecimal y decimal
  • Los números desde el 0 hasta el 50




Ejercicio 19 :Tabla de multiplicar completa



Icon activity.jpg
  • Creamos una tabla con las multiplicaciones
  • La imagen muestra el objetivo que pretendemos:

Tabla multiplicar.png





Ejercicio 20: Mostrar mes y su número de días




Icon activity.jpg
Ejercicio 20: Mostrar mes y su número de días
  • Genera un número aleatorio entre 1 y 15.
  • Muestra con un mensaje el nombre del mes y su número de días.
  • Usa la instrucción `switch` vista en clase.
$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



Icon activity.jpg
Ejercicio 20.1: Validar Fechas
  • Haz un programa que obtenga de forma aleatoria: día (1-33), mes (1-14) y año (1-3000).
  • Determina si la fecha es válida y muestra un mensaje.
  • Considera si el año es bisiesto.
$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



Icon activity.jpg
Ejercicio 21 : Tabla de multiplicar
  • Genera un número aleatorio y muestra su tabla de multiplicar.
  • Haz que la tabla salga con las etiquetas HTML correspondientes:
$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



Icon activity.jpg
Ejercicio 22 : Genera una nómina
  • Haz un programa que calcule una nómina.
  • Considera:
 ** 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%.
  • Muestra detalle del bruto, descuentos y neto de salario.
$horas = rand(30, 50);
$precioHora = 10;
$bruto = $horas <= 40 ? $horas * $precioHora : (40 * $precioHora) + (($horas - 40) * $precioHora * 1.5);
 
$bruto = match(true){
$bruto<600=>0,
$brto <=800 => $bruto * 0,05,
default => $bruot * 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



Icon activity.jpg
Ejercicio 23 : Número primo
  • Haz un programa que determine si un número es primo.
  • Recuerda que un número es primo si solo es divisible entre sí mismo y 1.
$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



Icon activity.jpg
Ejercicio 24 : Fechas básicas
  • Haz un programa que muestre:
 ** 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

Icon activity.jpg
Ejercicio 25 : Calcula la edad
  • A partir de tu fecha de nacimiento, haz un programa que calcule tu 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



Icon activity.jpg
Ejercicio 26 : Haz un reloj
  • Haz un programa que muestre un reloj digital numérico con precisión de milisegundos.
  • La página debe recargarse cada 0.01 segundos.
  • El formato del reloj debe ser `Hora:Minutos:Segundos:Milésimas`.
$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



Icon activity.jpg
Ejercicio 27 : Fecha aleatoria
  • Genera una fecha aleatoria (día, mes, año, hora, minuto, segundos) como un string.
  • Convierte ese string en un timestamp.
  • Obtén la diferencia en segundos con la fecha actual.
  • Interpreta y explica los resultados.
$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



Icon activity.jpg
Ejercicio 28 : Fecha en idiomas
  • Instala en el sistema los siguientes locales: `es_ES`, `fr_FR`, `en_US`.
  • Muestra la fecha actual en cada idioma.
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



Icon activity.jpg
Ejercicio 29 : Indica los días de la semana en idiomas
  • Usa los mismos locales del ejercicio anterior (`es_ES`, `fr_FR`, `en_US`).
  • Muestra los nombres de los días de la semana en cada idioma.
$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



Icon activity.jpg
Ejercicio 30 : Declarar una función
  • Declara una función que devuelva el mayor de dos números dados.
  • Invócala desde el programa principal.
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



Icon activity.jpg
Ejercicio 31: Variables globales
  • Declara una función que determine si un número es par.
  • Usa una variable generada en el script principal y pásala a la función.
$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



Icon activity.jpg
Ejercicio 32 : Parámetros por referencia
  • Haz una función que no retorne nada.
  • Si el valor recibido es par, divídelo por dos. Si es impar, multiplícalo por dos.
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.


 Volver al índice


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


Icon key points.gif

Operador match

  • 1.- Siempre retornará un valor
  • 2.- Evaluamos una expresión, al igual que con switch-case
  • 3.- En cada una de las ramas puedo establecer varias condiciones separadas por comas, intuyendo en ello una or lógica.
  • 4.- Igual que en switch-case existe la rama default
  • 5.- Como va a ser parte de una asignación, debe de terminar en ;
  • 6.- Las comparaciones que hace son estrictas a diferenica del switch-case que hace comparaciones no estrictas


  • 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";
 Volver al índice