·
EXPRESIONES LOGICAS
El resultado de la evaluación de la expresión es un valor lógico (cierto
o falso). Se construye mediante operadores relacionales y operadores lógicos.
Operadores lógicos
Operan sobre operandos (constantes, variables,
expresiones) de diferentes tipos (numéricos, caracteres) y dan como resultado
un valor de tipo lógico (cierto o falso; 1 o 0).
Operacion Operador Alg. Op. C Exp. C
Igualdad = == a==b
Desigualdad ≠ != a!=b
Menor < < a<b
Menor Igual ≤ab
Mayor ab
Mayor Igual ≥ab
Operador
Lógico
Operan
sobre operandos (constantes, variables, expresiones) de tipo lógico (cierto o falso) y evalúan
a un valor de tipo lógico (cierto o
falso).
Operación Op. Algebraico Op. C Exp.
C y lógico ∧ && a && b
o lógico ∨ || a || b
Negación ¬ ! !a
Expresiones
Lógicas
Ejemplos
!(p && q) || s
p && q && s
(a || b) && (c || d)
a > 5 && !(b < c) || 3 <= d
(op < min) || (op > max)
(edad >= 18) && (edad <= 60)
Precedencia de los Operadores Lógicos
( ) Sub-expresiones encerradas entre paréntesis se evalúan
primero (mayor nivel de precedencia).
!&&|| (menor nivel de precedencia)
·
EXPRESIONES ARITMETICAS
Los operandos que
intervienen en ella son numéricos, el resultado es numérico y los operadores
son aritméticos.
La Operación Asignación
variable = expresión;
La sentencia de asignación es un modo de darle valores a una
variable.
La expresión se evalúa y el resultado es asignado a la variable.
La sentencia de asignación modifica el contenido de una variable.
variable = valor constante; x = 3;
variable = variable; x = y;
variable = expresión; x = (y + 1)/2;
Ejemplos
a = b;
suma = 60;
¿ Cuál será el valor que tomará la variable D tras la ejecución de las siguientes instrucciones ?
A = 12;
B = A + 5;
C = B - 2;
D = C + (A + B);
Operadores Aritméticos
Decremento (--)
Para
n = 5, la ejecución de la sentencia
i =
n--; // post-decremento
asigna
el valor 5 a i y después decrementa el valor de n a 4.
i =
5
n =
4
La
ejecución de la sentencia
i =
--n; // pre-decremento
decrementa
el valor de n a 3 y después asigna este valor a i.
n =
3
i =
3
Operador Incremento/
decremento
•
Siempre que pueda, no utilice ++a; o --a; aunque son operaciones válidas.
•
Puede utilizar incrementos/ decrementos en una expresión, por ejemplo
x =5
+y++;
Equivalente
a
x =5
+y;
y++;
• Se
utilizan sólo con variables enteras.
➢ Los operadores +, -, *, /, se pueden usar
con operandos (constante, variable o expresión) tanto enteros como reales.
➢ La división de enteros da como resultado un
entero.
17/5
= 3
➢ El operador módulo (%) sólo puede ser
utilizado con operandos enteros. La expresión a%b da como resultado el resto de
la división entera de dos números
a y
b.
17%5
= 2
Los
operandos de una expresión aritmética deben satisfacer las siguientes reglas:
1.
Si ambos operandos son de tipo entero entonces el resultado es de tipo entero.
2. Si uno de los operandos o ambos operandos son
de tipo real entonces el resultado es de tipo real.
3. Si
la expresión evaluada da como resultado un valor de tipo entero y la variable a
la cual se le va a asignar este valor es de tipo real, entonces el resultado
será convertido automáticamente al tipo real antes de realizar la asignación.
4. Si
la expresión evaluada da como resultado un valor de tipo real y la variable a
la cual se le va a asignar este valor es de tipo entero, entonces el resultado
será convertido automáticamente al tipo entero antes de realizar la asignación.
5. En general los tipos de datos son promovidos,
desde un tipo mas angosto hacia uno más amplio. Ej: de int a float.
6. Cuando
hay conversiones de datos más grandes a datos más pequeños, ocurre un
truncamiento de los bits mas significativos.
·
EXPRESIONES
RELACIONALES
Los
operadores relacionales, también denominados operadores binarios lógicos y de
comparación, se utilizan para comprobar la veracidad o falsedad de determinadas
propuestas de relación (en realidad se trata respuestas a preguntas). Las
expresiones que los contienen se denominan expresiones relacionales. Aceptan
diversos tipos de argumentos, y el resultado, que es la respuesta a la
pregunta, es siempre del tipo cierto/falso, es decir, producen un resultado
booleano.
Si
la propuesta es cierta, el resultado es true (un valor distinto de cero), si es
falsa false (cero). C++ dispone de los siguientes:
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
== Igual que
(identidad)
!= Desigual que (desigualdad)
expresión-relacional <
shift-expresion
expresión-relacional >
shift-expresion
expresión-relacional <=
shift-expresion
expresión-relacional >=
shift-expresion
expresión-de-igualdad
== expresión-relacional
expresión-de-igualdad
!= expresión-relacional
Todos
ellos son operadores binarios (utilizan dos operandos), de los cuales, dos de
ellos son de igualdad: == y !=, y sirven para verificar la igualdad o
desigualdad entre valores aritméticos o punteros. Estos dos operadores pueden comparar ciertos
tipos de punteros, mientras que el resto de los operadores relacionales no
pueden utilizarse con ellos.
Observe
que los operadores == y != tienen una menor precedencia que el resto de los operadores relacionales
< y >, <= y >=.
El
operador de desigualdad != tiene otra forma estándar de designación mediante la
palabra clave not_eq
Cualquiera que sea el tipo de los operandos,
por definición, un operador relacional, produce un bool (true o false) como
resultado, aunque en determinadas circunstancias puede producirse una
conversión automática de tipo a valores int (1 si la expresión es cierta y 0 si
es falsa).
Ejemplo
de comprobación:
#include
<iostream.h>
int
main() {
float f =
12.1, g = 12.2;
cout <<
"Tipo: " << typeid(f < g).name() << endl;
}
Salida
Tipo:
bool
En
las expresiones relacionales E1 <operador> E2, los operandos deben
cumplir alguna de las condiciones siguientes:
1.E1
y E2 son tipos aritméticos.
2.E1
y E2 son punteros a versiones cualificadas o no cualificadas de tipos
compatibles.
3.Uno
de ellos es un puntero a un objeto, mientras que el otro es un puntero a una
versión cualificada o no cualificada de void.
4.Uno
de los dos es un puntero, mientras que el otro es un puntero nulo constante.
Cuando
se trata de tipos definidos por el usuario (que no cumplen las condiciones
anteriores) estos operadores pueden ser sobrecargados de forma que puedan ser
utilizados con dichos tipos.
Las expresiones relacionales evalúan mediante
un operador si las expresiones que se encuentra al lado izquierdo y derecho del
mismo cumplen con lo expresado por el operador, a esto también se le conoce
como criterio de selección.
Expresión
o valor 1 debe ser del mismo tipo de la expresión o valor dos, esto no
significa que en ambos lados de la expresión deben existir valores equiparables
es decir yo no puedo comparar el color azul con veinte unidades de azúcar, más
adelante conoceremos otros tipos de datos diferentes a los numéricos y por
tanto se hace esta precisión ahora.
Método para evaluar
expresiones relacionales.
Para
obtener el resultado de False o True, es necesario lograr equipara el lado
izquierdo y derecho de la expresión relacional, para tales efectos lo ideal es
dejar un solo término tanto al lado derecho como al lado izquierdo de la
expresión y realizar la comparación entre estos dos únicos términos.
1.
Identificar el lado derecho, el operador relacional y el lado izquierdo de la
expresión. Para esto nos valemos del hecho, que una expresión relacional solo
puede tener un operador relacional.
2. Resolver
la expresión del lado izquierdo del
operador relacional, en caso de que exista.
3. Resolver
de existir la expresión de lado derecho.
4.
Aplicar el criterio que define el operador en medio de la expresión relacional,
de cumplirse retornar verdad, de lo contrario falso.
Las expresiones son
secuencias de constantes y/o variables separadas por operadores válidos.
Se puede construir una expresión válida por medio de:
1. Una sola constante o variable, la cual puede estar
precedida por un signo + ó - .
2. Una secuencia de términos (constantes, variables,
funciones) separados por operadores.
Además debe considerarse que:
Toda variable
utilizada en una expresión debe tener un valor almacenado para que la
expresión, al ser evaluada, dé como resultado un valor. Cualquier constante o
variable puede ser reemplazada por una llamada a una función.
Como en las
expresiones matemáticas, una expresión en Pascal se evalúa de acuerdo a la precedencia
de operadores. La siguiente tabla muestra la precedencia de los operadores:
Precedencia de operadores
5 - (Menos unario)
4 Not
3 * / div mod and shl shr
2 + - or xor
1
=
<> > < >= <=
Las
reglas de evaluación para las expresiones son:
1. Si todos los operadores en una expresión tienen la
misma precedencia, la evaluación de las operaciones se realiza de izquierda a
derecha.
2. Cuando los operadores sean de diferentes
precedencias, se evalúan primero las operaciones de más alta precedencia (en
una base de izquierda a derecha), luego se evalúan las de precedencia
siguiente, y así sucesivamente.
3. Las reglas 1) y 2) pueden ser anuladas por la
inclusión de paréntesis en una expresión.
Ejemplos:
1. 3 + 2*5 {*,+}
4 + 10 =14
2. 20*4 div 5
{Igual prioridad de izquierda a derecha: *,div}
3. 80 div 5 = 16
3 - 5 * (20+(6/2))
3 - 5 * (20+(6/2)) = 3 - 5 * (20 + 3)
{paréntesis más interno}
= 3 - 5 * 23 {segundo paréntesis}
= 3 - 115 {Multiplicación}
= -112 {resta}
Jerarquía
de operadores
El orden general de
evaluación de los operadores de una expresión va de izquierda a derecha, con la
excepción de las asignaciones que lo hacen de derecha a izquierda.
Podemos seguir las siguientes tres reglas de
evaluación de expresiones:
(Regla 1) En todas las expresiones se evalúan primero
las expresiones de los paréntesis más anidados (interiores unos a otros); y
éstos modifican la prioridad según la cantidad de éstos, los cuales tienen que
estar balanceados (el mismo número de paréntesis que abren debe ser igual al
número de los paréntesis que cierran).
(Regla 2) Todas las expresiones se evalúan tomando en
cuenta la jerarquía de los operadores.
(Regla 3) Todas las expresiones se evalúan de
izquierda a derecha.