Post date: Jun 18, 2015 9:34:44 AM
En la clase sobre lógica discutimos un poco la forma de generar valores verdadero/false, usualmente llamados valores booleanos (se lee bu-leanos y viene del nombre de un inglés llamado George Boole).
Casi todos los lenguajes de programación ofrecen una forma de controlar la ejecución de código utilizando como criterio valores booleanos. Es decir, cierta parte del código se ejecuta si una condición lógica es verdadera. Una forma ejemplar de realizar esta ejecución selectiva es utilizando IF-ELSE (si, sino) o IF-ELSEIF (si, si en cambio) o una combinación de ambos.
En Octave, todos aquellos comandos dentro de un bloque if
se ejecutan solo si a condición dada es verdadera.
if (x == 0)
disp ("Equis es igual a cero");
endif
El bloque if
se empieza en la linea donde llamamos a esta función y termina con endif
(o simplemente end
, es lo mismo). En este caso, se imprime a la pantalla la oración "Equis es igual a cero"
cuando la comparación x == 0
es verdadera. La condición puede ser tan compleja como sea necesario (aunque esto puede hacer el código difícil de entender), por ejemplo
if (x == 0 || x == 5)
disp ("Equis es igual a cero o igual a cinco");
endif
Si la condición fuese falsa, el código dentro del bloque nunca se ejecuta. En cualquier caso, una vez evaluado el bloque (con o sin ejecución del código correspondiente), el programa continua. El siguiente ejemplo imprime "Equis es igual a cinco"
dependiendo del valor de x
, pero siempre imprime "Terminé"
.
if (x == 5)
disp ("Equis es igual a cinco");
endif
disp ("Terminé.");
Pregunta 1:
¿En que situación se imprime a pantalla el mensaje "¡Muy loco!"?
if (x == 0 && x == 5)
disp ("¡Muy loco!");
endif
¿Veremos alguna vez el mensaje en pantalla?
El bloque if
se puede extender para que cierto código se ejecute solo cuando la condición es falsa. Considera el siguiente código
disp ("Eqis es: ")
if (x > 0)
disp ("positivo.");
endif
if (x <= 0)
disp ("negativo o cero.");
endif
Dado que la segunda condición es lo opuesto a la primera podemos simplificar usando else
disp ("Eqis es: ")
if (x > 0)
disp ("positivo.");
else
disp ("negativo o cero.");
endif
Pregunta 2:
¿Cómo harías para separar en "positivo", "cero" o "negativo" el ejemplo anterior?
Una respuesta a la pregunta anterior viene de la mano de elseif
(si en cambio), que nos permite evaluar una condición adicional.
disp ("Eqis es: ")
if (x > 0)
disp ("positivo.");
elseif (x == 0)
disp ("cero.");
else
disp ("negativo.");
endif
Pregunta 3:
¿Podés dar otros ejemplos que produzcan lo mismo que el ejemplo anterior?
Debe notarse que el código dentro de un elseif
se ejecutara solo y solo si la condición del if
es falsa. En el siguiente ejemplo jamás veremos el mensaje "¡Ahá!"
en pantalla aunque la condición del elseif
es siempre verdadera.
if (true)
disp ("Sí, es verdad.");
elseif (true)
disp ("¡Ahá!");
endif
Esto quiere decir que las condiciones en un bloque IF-ELSEIF deberían que ser mutuamente exclusivas (nunca ambas pueden ser verdaderas al mismo tiempo). Esto no es necesario, como se muestra en el siguiente ejemplo, pero la lógica resultante es confusa
if (x > 0 && x <=1)
disp ("Entre cero y uno (incluido).");
elseif (x > 0.5)
disp ("Más que un medio.");
endif
Pregunta 4:
¿Podés simplificar la lógica del ejemplo anterior?
Espero recibir sus preguntas y dudas en el foro!