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");endifEl 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");endifSi 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");endifdisp ("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.");endifif (x <= 0) disp ("negativo o cero.");endifDado 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.");endifPregunta 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.");endifPregunta 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á!");endifEsto 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.");endifPregunta 4:
¿Podés simplificar la lógica del ejemplo anterior?
Espero recibir sus preguntas y dudas en el foro!