Plantilla:ManuelRomero/PHP/EstructurasControlSelectiva

De WikiEducator
Saltar a: navegación, buscar

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


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

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 a la estructura switch-case
  • A diferencia del switch-case, es un operador, y por lo tanto devuelve un valor.
Su sintaxis
$variable = match($valor){
valor_rama_1 => valor_retornado_rama_1,
valor_rama_2 => valor_retornado_rama_2,
....
default => valor_retornado_si_ninguna_coincidencia_anterior
};


Icon key points.gif

Puntos clave

  • 1.- Lo que retorne lo asigno a una variable
$variable = match ($valor)
  • 2.- En cada rama tengo dos partes separadas por el operador =>:
    • El valor con el que comparo
    • El valor que retorno si hay un match (coincidencia)
  • 3. Puedo tener una rama de default
  • 4. Al final hay un punto y coma, ya que termina la asignación




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