Diferencia entre revisiones de «PrInf07: Más sobre expresiones lógicas»

De MateWiki
Saltar a: navegación, buscar
(Operadores relacionales)
(Operadores relacionales)
Línea 43: Línea 43:
 
# Existe también el operador ''=='' para comprobar si dos variables tienen el mismo valor. Por ejemplo {{#tag:source| x = 11; y = 11; x == y|lang="matlab"}} ¿Qué devuelve este código? ¿Por qué?
 
# Existe también el operador ''=='' para comprobar si dos variables tienen el mismo valor. Por ejemplo {{#tag:source| x = 11; y = 11; x == y|lang="matlab"}} ¿Qué devuelve este código? ¿Por qué?
 
# El operador ''=='' comprueba si dos variables tienen el mismo valor. Recuerda que tenemos una variable ''a'' de tipo numérico, y una variable ''b'' de tipo lógico. ¿Tienen el mismo valor? Comprobémoslo con {{#tag:source| a == b |lang="matlab"}} ¿Cuál es el resultado? ¿Por qué?
 
# El operador ''=='' comprueba si dos variables tienen el mismo valor. Recuerda que tenemos una variable ''a'' de tipo numérico, y una variable ''b'' de tipo lógico. ¿Tienen el mismo valor? Comprobémoslo con {{#tag:source| a == b |lang="matlab"}} ¿Cuál es el resultado? ¿Por qué?
 +
# Veamos otro ejemplo {{#tag:source| x = 10; y = 11; x == y|lang="matlab"}} ¿Cuál es el resultado? ¿Por qué?
  
 
== Ejercicio post-práctica ==
 
== Ejercicio post-práctica ==
  
 
[[Categoría:Prácticas de Informática]]
 
[[Categoría:Prácticas de Informática]]

Revisión del 16:54 4 jul 2013

Práctica de Informática
Más sobre expresiones lógicas
Práctica anterior Siguiente práctica
Este artículo es un guión de prácticas de Informática


Al usar la instrucción if hemos tenido un primer contacto con expresiones lógicas. Hasta el momento hemos realizado operaciones numéricas, tanto con escalares como con vectores y matrices, y hemos visto cómo mostrar texto. Pero en Octave UPM hay más tipos de información: uno de los más importantes es el tipo de datos lógico. Estas variables solo pueden tomar dos valores, verdadero o falso, y son las que usa la instrucción if para tomar una decisión y ejecutar o no una parte del código.

1 Requisitos previos

Es recomendable para esta práctica consultar el siguiente vídeo:

También es importante haber realizado la práctica 6.

2 Contenido de la práctica

Si examinamos el espacio de trabajo de Octave UPM, habremos observado que hasta ahora hemos visto dos tipos de datos: números y texto. Los números aparecen como double en el espacio de trabajo, y los textos como char. Vamos a ver ahora un tercer tipo, logical, que ya hemos usado de manera inadvertida en la práctica anterior.

En la práctica anterior, veíamos que se podía mostrar un mensaje si la temperatura era superior a 30. Escribíamos

if c > 30
   disp('Mostrar un mensaje');
end

Este código tiene diferentes partes:

  • La primera es la instrucción if, que termina con end. Esta instrucción acepta a continuación una condición. Si la condición es verdadera, ejecuta el cuerpo de la instrucción (muestra el mensaje en este caso), y si no, continúa en la línea que viene después del end.
  • La condición es en este caso c > 30. Es una expresión lógica que devuelve verdadero o falso.
  • El cuerpo del mensaje lo forman los comandos que se van a ejecutar si la condición es verdadera. En este caso solo hay un comando, pero puede tener cualquier comando y cualquier otra instrucción. Por ejemplo, se podría poner un if dentro de otro if; en una práctica veremos cuándo es útil hacer este tipo de anidamientos. Aunque no es obligatorio para que el programa sea sintácticamente correcto, es una buena práctica indentar el código, para que el cuerpo aparezca con un par de espacios de sangrado. La indentación permite distinguir muy claramente qué forma parte del cuerpo del if y que está fuera.

En esta práctica nos vamos a centrar en cómo escribir la condición. En el caso del ejemplo, la condición usa el operador >, mayor que, que es un operador relacional infijo. Un operador infijo es el que va entre dos elementos (por ejemplo, en 1 + 2 el símbolo + es un operador infijo). Es relacional porque nos devuelve un resultado acerca de la relación que existe entre los elementos. Este operador devuelve verdadero si el elemento de la izquierda es mayor que el de la derecha. Existen muchos otros operadores relacionales, que tienen sus reglas de precedencia y combinación de varios operadores. Hay también otro tipo de operadores lógicos que nos permiten construir condiciones más complejas.

2.1 Operadores relacionales

Vamos a intentar usar expresiones lógicas fuera de las instrucciones if, para aprender cómo operar con ellos y ser capaces de construir condiciones más complejas.

  1. Borra todas las variables del espacio de trabajo ejecutando el comando clear.
  2. Crea una variable de nombre c que tenga como valor 70. Ejecuta en la línea de comandos
    c > 30
    ¿En qué variable se ha guardado el resultado? ¿Cuál es su valor? ¿Y su tipo? (consulta el espacio de trabajo para averiguar el tipo).
  3. Escribe ahora
    d = c > 100;
    ¿Qué variables hay en el espacio de trabajo? ¿De qué tipo? ¿Podrías explicar qué ha hecho este trozo de código?
  4. Como vemos, es posible asignar valores lógicos a variables. En ocasiones nos puede venir bien crear directamente variables que sean verdadero o falso. Este tipo de variables se denominan flags (banderín). Su estado cambia cuando ocurre algo en un programa, y permite detectar en otra parte del programa que eso ha ocurrido. En una práctica futura veremos una aplicación práctica de este tipo de variables. Sin embargo, no se pueden crear de cualquier manera. Por ejemplo, Plantilla:@tag:source ¿Es la variable a un flag? ¿Por qué?
  5. Compara el resultado de la variable a con esta variable b
    b = true;
    ¿Cuál es la diferencia entre las variables a y b?
  6. Igual que existe true, tenemos el alias false para crear variables lógicas de contenido falso. Por ejemplo,
     c = false;
    Según el espacio de trabajo, ¿Cuál es el valor de c'?
  7. Existen varios tipos de relaciones que podemos comparar usando operadores. Hemos visto >, también podríamos usar <. Por ejemplo, ¿cuánto vale la variable ans despúes de ejecutar este código? ¿Por qué?
     x = 10; y = 11; x < y
  8. Existen también los operadores >= y <=. Por ejemplo, ¿qué devuelve el siguiente código? ¿Por qué?
     x = 10; y = 11; x <= y
  9. ¿Y este código?
     x = 11; y = 11; x <= y
  10. Existe también el operador == para comprobar si dos variables tienen el mismo valor. Por ejemplo
     x = 11; y = 11; x == y
    ¿Qué devuelve este código? ¿Por qué?
  11. El operador == comprueba si dos variables tienen el mismo valor. Recuerda que tenemos una variable a de tipo numérico, y una variable b de tipo lógico. ¿Tienen el mismo valor? Comprobémoslo con
     a == b
    ¿Cuál es el resultado? ¿Por qué?
  12. Veamos otro ejemplo
     x = 10; y = 11; x == y
    ¿Cuál es el resultado? ¿Por qué?

3 Ejercicio post-práctica