SWITCH

EJERCICIOS:

EJERCICIO 1

Realizar un programa que calcule el importe a pagar por un vehículo al circular por una autopista. El vehículo puede ser una bicicleta, una moto, un carro o un camión. Para definir el conjunto de vehículos deben utilizar una estructura Switch. El importe se calculara según los siguientes datos:

a) Un importe fijo de 100 soles para la bicicleta.

b) Las motos y los carros pagaran 30 soles por Km.

c) Los camiones pagaran 30 soles por Km. más 25 soles por toneladas.

EJERCICIO 2

Un Vendedor ofrece su producto de la siguiente manera: Si le compran 10 artículos o menos, el precio por producto es de 20000 soles. Si le compran más de 10, el precio es de 15000 soles. Con solo proporcionarle la cantidad de artículos de cómo resultado el precio y el total además de mostrar el IGV(18%), el nombre del usuario e indicarle un descuento del 9% si compra mas de 12 artÍculos.

SWITCH

Las instrucciones if...else if...else if permiten resolver prácticamente todas las decisiones que haya que tomar en programación, pero en ocasiones nos encontraremos con casos en que queremos evaluar condiciones con una estructura que hacen más cómodo usar una instrucción alternativa: switch.

Supongamos una evaluación de este tipo:

if ($variable == Valor1) {

... sentencias;

} else if( $variable == Valor2) {

... sentencias;

} else if ($variable == Valor3) {

... sentencias;

} else {

... sentencias;

}

Se trata de un caso en que tenemos varias alternativas para realizar una acción determinada según el valor tomado por una variable. Para estos casos la mayoría de los lenguajes de programación incluyen una instrucción que permite "seleccionar" entre los posibles valores de una variable: la instrucción Switch (en español: seleccionar).

Estructura general de una expresión switch

switch($variable) {

case Valor1:

... sentencias;

break;

case Valor2:

... sentencias;

break;

.

.

.

default:

... sentencias;

}

En esta estructura, $variable es la variable que será comparada sucesivamente con cada una de las instrucciones case hasta hallar la que coincida con el valor de $variable. Una vez que esto se produzca se ejecutarán sucesivamente todas las instrucciones dentro del case hasta hallar la siguiente instrucción break;

La instrucción break; provoca un salto pasando el control del programa o flujo de ejecución a la instrucción inmediata siguiente fuera del switch.

Si ninguna de las instrucciones case corresponde al valor de $variable se ejecutarán solo las instrucciones incluidas tras la palabra clave default. Al igual que else para los if, la instrucción default es opcional para los switch.

Vamos a ver ahora cómo podemos obtener un mismo resultado usando if o usando switch. Escribe ahora el código de ejemplo de uso de if que mostramos a continuación y guárdalo con un nombre de archivo como ejemplo1.php. A continuación, sube el fichero al servidor y visualiza el resultado.

<?php

//Ejemplo uso if else aprenderaprogramar.com

$variable=2;

if($variable==1) {

echo '$variable es igual a 1.';

} else if($variable==2) {

echo '$variable es igual a 2.';

} else if($variable==3) {

echo '$variable es igual a 3.';

} else {

echo '$variable no es igual a 1, 2 o 3.';

}

?>

<?php

$variable=2;

switch($variable) {

case 1:

echo '$variable es igual a 1.';

break;

case 2:

echo '$variable es igual a 2.';

break;

case 3:

echo '$variable es igual a 3.';

break;

default:

echo '$variable no es igual a 1, 2 o 3.';

}

?>

Escribe ahora el código de ejemplo de uso de switch hemos mostrado y guárdalo con un nombre de archivo como ejemplo2.php. A continuación, sube el fichero al servidor y visualiza el resultado.

El resultado comprobamos que en ambos casos es:

$variable es igual a 2.

Si cambiamos $variable=2 por $variable=5 al inicio de código el resultado sería:

$Variable no es igual a 1, 2 o 3.

Una diferencia importante respecto a las instrucciones if ... else if ... else es que se requiere de la instrucción break para salir del switch al terminar las instrucciones correspondientes a un case. Sólo podemos especificar un valor en cada case, no se admite indicar más de un valor. Sin embargo, si dejamos un case en blanco y omitimos el break, damos lugar a que se ejecuten ciertas instrucciones si el valor coincide con alguno de los case en juego. Esto lo veremos más claro con un ejemplo.

Escribe ahora estos otros códigos y guárdalos con nombres de archivo como ejemplo3.php y ejemplo4.php. A continuación, sube los ficheros al servidor y visualiza el resultado.

<?php

//Ejemplo uso if else aprenderaprogramar.com

$variable=2;

if($variable==1) {

echo '$Variable es igual a 1.';

} else if($variable==2 OR $variable==3) {

echo '$Variable es igual a 2 o 3.';

}else {

echo '$Variable no es igual a 1, 2 o 3.';

}

?>

<?php

$variable=2;

switch($variable) {

case 1:

//Se ejecuta si $variable vale 1

echo '$Variable es igual a 1.';

break;

case 2:

case 3:

//Se ejecuta si $variable vale 2 o 3

echo '$Variable es igual a 2 o 3.';

break;

default:

//Se ejecuta en cualquier otro caso

echo '$Variable no es igual a 1, 2 o 3.';

}

?>

En cualquiera de las dos formas mostradas, la salida obtenida sería:

$variable es igual a 2 o 3.

En este caso, al evaluarse la segunda instrucción case no se encuentra ningún break por lo que se siguen ejecutando las instrucciones siguientes al tercer case, aún cuando $variable es diferente de 3, ya que al no existir un break anterior los casos 2 y 3 quedan “agrupados”. Más aún, si borramos el break del tercer case también se ejecutarán las instrucciones siguientes a default, y la salida sería entonces:

$variable es igual a 2 o 3.

$variable no es igual a 1, 2 o 3.

Por ello es muy importante que cuando escribas una instrucción switch pongas break en todos los case, o bien que si dejas algún break sin escribir sea porque conscientemente quieras hacerlo y no por olvido.

Más ejemplos:

<?php

if ($i == 0) {

echo "i es igual a 0";

} elseif ($i == 1) {

echo "i es igual a 1";

} elseif ($i == 2) {

echo "i es igual a 2";

}

switch ($i) {

case 0:

echo "i es igual a 0";

break;

case 1:

echo "i es igual a 1";

break;

case 2:

echo "i es igual a 2";

break;

}

?>

ejemplo: Estrutura switch permite el uso de strings

<?php
switch ($i) {
    case "manzana":
        echo "i es una manzana";
        break;
    case "barra":
        echo "i es una barra";
        break;
    case "pastel":
        echo "i es un pastel";
        break;
}
?>
ejemplo
<?php
switch ($i) {
    case 0:
        echo "i es igual a 0";
    case 1:
        echo "i es igual a 1";
    case 2:
        echo "i es igual a 2";
}
?>
La lista de sentencias para un caso también puede estar vacía, lo cual simplemente pasa el control a la lista de sentencias para el siguiente caso.
<?php
switch ($i) {
case 0:
case 1:
case 2:
    echo "i es menor que 3 pero no negativo";
    break;
case 3:
    echo "i es 3";
}
?>
Un caso especial es el default. Este caso coincide con cualquier cosa que no se haya correspondido por los otros casos. Por ejemplo:
<?php
switch ($i) {
    case 0:
        echo "i es igual a 0";
        break;
    case 1:
        echo "i es igual a 1";
        break;
    case 2:
        echo "i es igual a 2";
        break;
    default:
       echo "i no es igual a 0, 1 ni 2";
}
?>
La sintaxis alternativa para las estructuras de control es compatible con los switch. Para obtener más información, consulte Sintaxis alternativa de estructuras de control.
<?php
switch ($i):
    case 0:
        echo "i es igual a 0";
        break;
    case 1:
        echo "i es igual a 1";
        break;
    case 2:
        echo "i es igual a 2";
        break;
    default:
        echo "i no es igual a 0, 1 ni 2";
endswitch;
?>
Es posible utilizar un punto y coma en lugar de dos puntos después de un caso como:
<?php
switch($beer)
{
    case 'tuborg';
    case 'carlsberg';
    case 'heineken';
        echo 'Buena elección';
    break;
    default;
        echo 'Por favor haga una nueva selección...';
    break;
}
?>

Ejercicio 5

Realizar un programa que en base al valor numérico de una variable que puede estar entre 1 y 7, se imprima por pantalla el día de la semana asociado. Por ejemplo 1 -> Domingo, 2 -> Lunes… etc.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Este se resuelve fácil con un switch. $dia es una variable numérica y según su valor se muestra por pantalla un día de la semana distinto. Usamos default para el caso en que $dia tenga un valor que no esté entre 1 y 7. Y en ese caso, mostramos un mensaje de error.
Realizar un programa que en base al valor numérico de una variable $num, pueda mostrarse por pantalla, el nombre del número que tenga dentro escrito con palabras, para los números entre el 20 y el 60. Por ejemplo, si $num = 43 debe mostrarse por pantalla “cuarenta y tres”.
Tal vez el más desafiante de esta serie de ejercicios. En realidad es bastante simple. Hay que tener en cuenta las operaciones de división entera y resto de la división entera. Veamos el código:
<?php
 
$dia = 2;
 
switch ($dia) {
    case 1:
        echo 'Domingo';
    break;
 
    case 2:
        echo 'Lunes';
    break;
 
    case 3:
        echo 'Martes';
    break;
 
    case 4:
        echo 'Miércoles';
    break;
 
    case 5:
        echo 'Jueves';
    break;
 
    case 6:
        echo 'Viernes';
    break;
 
    case 7:
        echo 'Sábado';
    break;
 
    default:
        echo 'Error';
    break;
}
 
?>
<?php
 
$num = 55;
$decena = (int) ($num / 10);
$unidades = $num % 10;
$resultado = "";
 
switch ($decena) {
    case '2':
        $resultado .= 'Veinte';
    break;
 
    case '3':
        $resultado .= 'Treinta';
    break;
 
    case '4':
        $resultado .= 'Cuarenta';
    break;
 
    case '5':
        $resultado .= 'Cincuenta';
    break;
 
    case '6':
        $resultado .= 'Sesenta';
    break;
}
 
switch ($unidades) {
    case '1':
        $resultado .= ' y uno';
    break;
 
    case '2':
        $resultado .= ' y dos';
    break;
 
    case '3':
        $resultado .= ' y tres';
    break;
 
    case '4':
        $resultado .= ' y cuatro';
    break;
 
    case '5':
        $resultado .= ' y cinco';
    break;
 
    case '6':
        $resultado .= ' y seis';
    break;
 
    case '7':
        $resultado .= ' y siete';
    break;
 
    case '8':
        $resultado .= ' y  ocho';
    break;
 
    case '9':
        $resultado .= ' y nueve';
    break;
}
 
echo $resultado.'<br />';
 
?>
En $num definimos el número que queremos pasar a palabras. La segunda línea es una manera de obtener la cantidad de decenas que tiene ese número. Primero se lo divide por 10 y con intdelante se lo trunca. Luego, en la siguiente línea, se utiliza el resto de la división, es decir, lo que sobra de dividir por 10; esto dará como resultado las unidades.
Con estos dos pasos hemos logrado desglosar el número en decenas y unidades. Vamos preparando una variable $resultado que inicializamos como un string vacío.
A continuación, hacemos un switch con la variable $decena y en el case que corresponda le agregamos a $resultado el string que corresponde. Noten el .= que sirve para concatenar strings a la variable que pongamos del lado izquierdo.
Luego se hace igual con $unidades. Se le agrega un espacio al string adelante para que la frase final no quede toda junta.
Si prestamos atención, tal vez esta solución funciona bien, pero con los números 21 a 29 no queda perfecto ya que, por ejemplo, el 21 se escribe veintiuno y no veinte y uno. Eso es algo que se puede mejorar.