martes, 11 de febrero de 2014

Operadores relacionales y lógicos

Una expresión lógica es aquella que sólo puede devolver dos valores (Verdadero o Falso). Los valores que pueden aparecer en una expresión lógica son de 2 tipos: lógicos y relacionales.
La particularidad de las expresiones lógicas es que mientras en una expresión numérica por devolver un valor numérico los operandos solo pueden ser números, en una expresión lógica los operandos no tienen porque ser booleanos aunque se devuelva un valor booleano. Esto es lo que ocurre cuando en la expresión lógica utilizamos operadores relacionales con lo cual se obtienen valores lógicos o booleanos a partir de otros que no lo son.
En cambio cuando los operadores son lógicos los operandos obligatoriamente tambien tienen que ser lógicos.
Operadores relacionales:
<
>
=
<> en C: !=
"
"
< Operando1> operador < Operando2>
5 > 3 Verdadero
¿Cómo se evalua una expresión relacional?:
  • Primero se evalua el primer operando y se sustituye por su valor.
  • Luego se evalua el seguno operando y se sustituye por su valor.
  • Finalmente se aplica el operador relacional y se devuelve el valor booleano correspondiente.
((3*2)+1-5^2) < (2-1)
-18 < 1 Verdadero.
El problema del tipo real:
Desde la informática, los numeros reales son finitos, ya que tenemos un máximo de cifras decimales. Cuando trabajamos con un =, matematicamente da un valor exacto, pero informaticamente no es exacto.
1/5 * 5 =1
1.0/5.0 *5.0 <>1.0
Soluciones:
  • La que nos aporte el propio lenguaje de programación. Se considera un valor de error.
  • Trabajar con números enteros siempre que sea posible.
  • Utilizar las comparaciones <> en vez de " " si es posible.
  • Si hay que preguntar por igual, cambiar la condición utilizando valores absolutos y un valor mínimo de error.
Si la diferencia < 0.00000001 y ABS (A-B)< min ; son iguales.
Operadores lógicos:
El problema es que a veces queremos preguntar o evaluar por más de una condición al mismo tiempo y para esto estan los operadores lógicos.
Y and &&
O or !!
No not ~!
Y, O, son operadores binarios (necesitan 2 operandos de tipo logico).
Operando 1 Operador Operando 2
El No es unario y se coloca primero el No, y despues el operando.
El resultado es lógico y depende de:
Operando 1
Operando 2
AND
OR
V
V
V
V
V
F
F
V
F
V
F
V
F
F
F
F
El No niega :
NOT
1/0
V
F
F
V
Prioridades de los operadores:
  • Lo más prioritario es el NOT
  • Luego el Y y el O.
  • <, > =,...
Tabla de prioridades:
^ NO
/ div mod y
+ - O

<, >, =, <>,...

No hay comentarios:

Publicar un comentario