Curso PHP 5 || III. Bucles y condicionales en PHP

Solución Actividades II

1.   Localiza los errores en el programa:

<?php
   
print 'How are you?';
   print 
'I'm fine
??>


Los errores son:

•   El ultimo print debe ir encerrado entre comillas dobles o escapar la comilla simple con \
•   Al final del código sobra un interrogante en el cierre

2.   Escribe un programa PHP que calcule el coste total de esta comida: Dos hamburguesas a 4.95 € C/U, un batido a 1.95€ y una coca-cola a 85 céntimos. El IVA es de 7.5%.


<?php
$hamburguesa 
4.95;
$batido 1.95;
$cocacola 0.85;
$comida 2$hamburguesa $batido $cocacola;
$iva $comida 0.075;
$total $comida $iva;
print 
"El total es $total€";
?>


3.   Modifica el programa anterior para imprimir la solución con formato (printf). Para cada artículo, imprime el precio, cantidad y coste total. Imprime el total de la comida y de la bebida antes del IVA, el total con el IVA.

<?php
$hamburguesa 
4.95;
$batido 1.95;
$cocacola 0.85;
$comida 2$hamburguesa $batido $cocacola;
$iva $comida 0.075;

printf("2 Hamburguesas a %.2f € c/u = %.2f €n"$hamburguesa$hamburguesa 2);
printf("1 Batido a %.2f €n"$batido);
printf("1 Coca cola a %.2f €n"$cocacola);
printf("Total con iva: %.2f €n"$comida $iva);
?>



4.   Escribe un programa que establezca dos variables ($nombre y $apellido). Imprime una cadena que contenga ambos separados con un espacio. Imprime también la longitud.

<?php
$nombre 
'nax';
$apellido 'bl4ck';
$completo "$nombre $apellido";
echo 
$completo;
echo 
strlen($completo);
?>


V.   Tomando decisiones y repitiéndonos

En esta tercera parte vamos a trabajar con los condicionales y los bucles, los cuales nos acompañarán a lo largo de nuestro aprendizaje.
Con los condicionales podremos controlar, por ejemplo, si un panel lo verá un visitante o no.
Con  los bucles podremos recorrer los valores de algunas arrays e ir mostrando su contenido.
La utilización de estas dos estructuras es muy común y es más común su uso en conjunto, pero vamos a verlas por separado.

Condicionales

Cuando hablamos de condicionales tenemos que pensar que estas siempre nos devolverán un valor verdadero o falso (true or false) y a partir de ese valor ejecutarán uno u otro bloque de código.
Estos valores se utilizan con la función if(), la explicación de esta función la haremos más adelante pues creo necesario el siguiente apartado.

Entender cómo se evalúa verdadero y falso

Todas las expresiones en un programa tienen un valor: true o false. Algunas veces ese valor se utiliza en algún calculo pero otras es simplemente ignorado. Entender cómo las expresiones avalúan estas expresiones es parte importante para entender el lenguaje.

Casi todos los valores son true. Todos los enteros y números en coma flotante son true (menos 0 y 0.0). Todas las cadenas son true excepto las que no contengan nada y una cadena que solo contenga el carácter 0. Estos cuatro valores y la constante false evalúan como false todas las demás evalúan como true.
Las expresiones matemáticas como 7 * 6 evalúan como true dado que su resultado es 42, pero expresiones como 1 + 2 - 3 evalúan como false, ya que su resultado es 0.

Tomar las decisiones

Entendida esta parte de true y false vamos a estudiar la función if().
Un ejemplo claro de su uso sería saber si el usuario es un usuario normal o un administrador. Para ello utilizaríamos una variable para saberlo:


<?php
if ($es_admin)
{
  print 
"eres admin!";
}
?>



La variable $es_admin podría contener cualquier tipo de valor excepto los 4 antes mencionados si el usuario es un administrador.
En este caso todo lo que se mostrará si es administrador es un simple mensaje, pero si quisiéramos tener más sentencias solo tendríamos que ponerlas dentro de los corchetes, también cabe recalcar que si  el if solo contiene una única sentencia no hace falta situar corchetes

<?php
if ($es_admin)
  print 
"eres admin!";
?>


En pseudocódigo se podría leer como: “si es admin muestra ‘eres admin’”, pero, ¿qué pasaría si no lo es? En este ejemplo nos quedaría la pantalla en blanco, para evitar eso y tener un control más exacto de nuestra aplicación vamos a utilizar la construcción else.


<?php
$es_admin 
0;
if (
$es_admin)
   print 
"eres admin!";
else
   print 
"eres un usuario o visitante!";
?>


El tema de los corchetes es exactamente igual al if(), en este caso, como $es_admin es false, evalua como false y muestra “eres un usuario o visitante”, ahora, si quisiéramos controlar los tres casos posibles (que sea un usuario, administrador o visitante) podemos agregar el construcción else if().


<?php
if ($que_es == 'admin')
   print 
"eres admin!";
else if (
$que_es == 'user')
   print 
"eres un usuario registrado";
else
   print 
"eres un visitante!";
?>

En este caso comprobamos que la variable contenga la cadena ‘admin’ para decir que es administrador o ‘user’ para nombrarlo como usuario y si ninguna de esas dos se cumple deducimos que es un visitante.

Podemos agregar tantos else if() como creamos necesario, eso sí, siempre agregando la condición oportuna.
Operadores de comparación
No son específicamente de la función if(), pero es, junto a los bucles, donde más se usan.
En el ejemplo anterior vemos el primero, y más común, de estos operadores.

Operador           símbolo      significado
Igualdad                ==             Si 1 es igual a 1 es true
Identico                 ===          Si 1 es igual a 1 y ambos son numéricos es true
Diferente               !=              Si 1 es diferente de 2 es true
No idéntico           !==           Si 1 es diferente de 2 o no son del mismo tipo es true
Mayor                  >               Si 2 es mayor que 1 es true
Menor                  <               Si 1 es menor que 2 es true
Menor o igual       <=             Si 1 es menor  o igual que 2 es true
Mayor o igual       >=            Si 2 es mayor o igual que 1 es true

Solo comentar que en idéntico y no idéntico, cuando hablo de tipos me refiero al tipo de datos, como ejemplo probad este programa:


<?php
$int 
1;
$string "1";

if (
$int === $string)
   echo 
"son iguales";
?>


Diferencia entre asignación y comparación
Creo necesario resaltar la diferencia entre asignación (=) y comparación (==).
En pseudocódigo la asignación se lee así:

<?php
$var 
1// Asigna a la variable “;var”; el valor 1
$var == // Comprueba que la variable “var” sea igual a 1
?>


Comparar cadenas

De igual forma que podemos comparar que 1 es menor que 2 también podemos hacerlo con cadenas.

<?php
if ('aa' 'ba')
   echo 
"aa es menor que ba";
?>



El código, efectivamente, muestra el mensaje.

Operador de negación

El operador de negación (!), como su nombre indica, se utiliza para negar una condición.

<?php
$var 
0;
if (!
$var)
   echo 
"var es false";
?>


Normalmente esta condición hubiese evaluado como false y no se hubiese mostrado el echo.
Pero en este caso al negar la condición evalúa como ture, creo que la forma más fácil de entender esta parte es en pseudocódigo:

“Si $var no es true muestra el mensaje”.

Operadores lógicos

Como últimos operadores, vamos a ver dos operadores lógicos muy utilizados en condiciones.

Operador   Nombre      Ejemplo
&&                AND      1 == 1 && 2 == 2 es true
                                        1 == 1 && 2 == 1 es false

||                OR      1 == 1 || 2 == 1 es true
                                        1 == 2 || 2 == 3 es false

Bucles

Como ya comentamos los bucles nos son útiles cuando tenemos que hacer acciones repetitivas, como ejemplo pondremos un menú select.

While

Para bucles usaremos, entre otros, while().
While() funciona con una condición de igual forma que el if(), mientras esta condición sea true while seguirá ejecutando el código en su interior.


<?php
$i 
1;
print 
'<select name="personas" >';

while (
$i <= 10)
{
   print 
"<option>$i</option>n";
   
$i++;
}
print 
'</select>';
?>



Este código nos crea una lista desplegable del 1 al 10, la variable $i funciona de contador. El contador es una variable que se utiliza para contar (…) cuantas veces se ha repetido un proceso.
En este caso la condición del while es que el contador sea menor o igual a 10, es decir, que repetirá el bloque que contiene mientras $i esté dentro del rango de valores 1-10.
El bloque del while lo que hace es agregar una nueva opción con un valor numérico como texto y luego incrementa el contador.
Este dato es importante ya que si no se incrementara nunca saldríamos del bucle.

Do … While

Este bucle funciona exactamente igual que el anterior, solo que se ejecutaría una primera vez y luego solamente si se cumple la condición.
Un ejemplo muy claro es:


<?php
Do {
   echo 
"hola!";
}while (
== 2);
?>


En este ejemplo le estaríamos mandando que lo ejecutara cuando 1 sea igual a 2, en un while normal no mostraría nada pero un Do… While ejecuta una vez el echo y luego comprueba si la condición se cumple para repetirlo

El bucle for()

A mí me gusta presentar a este bucle como el “todo en uno”,  como vimos en el while(), antes de declararlo teníamos que dar un valor a $i, luego al declararlo le ponemos una condición y dentro del while() el incremento, for() hace exactamente lo mismo pero todo en la misma línea.
Poniendo como ejemplo el mismo ejercicio anterior:


<?php
print '<select name="personas" >';

for (
$i 1$i <= 10$i++)
{
   print 
"<option>$i</option>n";
}
print 
'</select>';
?>


Como veis el funcionamiento es el mismo, solo que más comprimido. Dentro del for primero declaramos luego la condición y para finalizar el incremento.
El mismo proceso se puede utilizar con múltiples variables.


<?php
print '<select name="a&#38;#241;o" >';

for (
$i 1$year 1980$i <= 30$i++, $year++)
{
   print 
"<option>$year</option>n";
}
print 
'</select>';
?>


De esta forma creamos una lista desde 1980 hasta 2009.
Esto es todo por estas fiestas, dejo el foreach() para el siguiente capítulo que trataremos las Arrays.
Felices fiestas a todos!!!

Actividades III

1.   Sin utilizar PHP determina si son true o false:

100.00 – 100
“zero”
“false”
0 + “true”
0.000
“0.0”
strcmp(“false”, “False”)

2.   Sin ejecutarlo en el intérprete PHP averigua que imprime el programa:

<?php
$edad 
12;
$numerodepie 13;
if (
$edad $numerodepie)
{
   print 
"mensaje 1";
} elseif (
$numerodepie++) && ($edad 20) {
   print 
"mensaje 2";
}else {
   print 
"mensaje 3";
}

print 
"edad: $edad. Tama&#38;#241;o de pie: $numerodepie";
?>


3.   Utiliza while() para imprimir una tabla de equivalencias de temperaturas de grados Farenhite y Celsius desde -50 grados F a 50 grados F en incrementos de 5 grados. Para convertir las F a C resta 32 a la temperatura, multiplícalo por 5 y divide entre 9

4.   Modifica el ejercicio anterior para hacerlo con for()



A petición de algunos users subo las versiones en PDF y a partir de ahora utilizaré el formato de colores de el foro ya que es mas claro. (cuando tenga tiempo formato adecuadamente los capítulos anteriores, si alguien lo hace por mi le debo una xD)

Versión .doc:III. Condicionales y bucles
Versión .pdf:III. Condicionales y bucles