EXPRESIONES-CAPITULO 4
Bueno... antes de nada esta vez quiero decir que he
estado a punto de cargarme el HD enterito y que hace poco me cargué más de la
mitad de la base de mensajes. Con lo cual he perdido todos los mensajes sobre
el cursillo y el índice que tenía hecho. Pero por suerte, todavía tengo un
montón de hojas sueltas en las que tengo todos los esquemas que me planteé
antes de empezar así que por ahora parece que pese a todo podré continuar. O:)
Hoy nos toca hablar sobre las expresiones. Es un asunto
sencillo pero que es importante que quede claro. Una expresión, para decirlo de
manera sencilla, podríamos decir que es un cálculo. Por ejemplo, una expresión
podría ser esto: (7+8*15-34)/10
Puesto que es un cálculo podemos indicar operaciones.
Tenemos dos tipos de operaciones las numéricas y las lógicas. Las numéricas las
realizamos con números y dan como resultado un número.
Las lógicas las podemos realizar con números o con
valores booleanos y dan como resultado un valor booleano.
OPERACIONES NUMERICAS
Empecemos por las numéricas. Como operaciones numéricas
tenemos estas:
+ : Suma.
- : Resta.
* : Producto.
% : Módulo. (es decir, haya el resto de la división) EJ:
4 % 3. Da el resto de 4 / 3, que es 1.
/ : División de reales. Esta división da como resultado
un número real. Acepta como operandos tantos números reales como enteros.
Div : División de enteros. Esta división da como
resultado un número entero y no acepta como operados números reales.
Los operandos que podemos utilizar son: valores inmediatos,
constantes o variables. Por ejemplo, en
este caso:
Const
Constante = 7;
Var
Tabla : Array [0..10] of Byte;
A
: Word;
Begin
A
:= 8 + Tabla[9] - Constante;
End.
Aquí "8" sería un valor inmediato,
"Tabla[9]" una variable, y "Constante" una constante. Así
de sencillo.
Un punto importante a tener en cuenta es la preferencia
de las operaciones. Es decir, que " 8 + 3 * 2 " NO es lo mismo que
" (8 + 3) * 2 ". En el primer caso se calcula primero 3*2 y al
resultado se le suman 8 mientras que en el segundo se calcula primero 8 + 3 y
el resultado se multiplica por 2. La preferencia es la misma que utilizamos
normalmente para hacer operaciones matemáticas: primero los paréntesis, luego
las multiplicaciones/divisiones/módulos y por último las sumas.
Una expresión numérica puede utilizarse en una
asignación, como en el ejemplo anterior, para pasar un parámetro a una función,
etc... Por ejemplo, en lugar de "A := 8 + Tabla[9] - Constante"
podríamos cambiarlo y poner "A := 8 + Tabla[Tabla[3]+Constante*2] -
Constante".
Con esto se calcularía 7 * 2 (7 es el valor de
"constante"), se le sumaría el valor almacenado en la posición 3 de
la tabla y ese resultado se utilizaría como índice de la tabla. Se leería en
valor que indique esa posición y se le sumaría 8 y se le restaría 7. (la
constante)
OPERACIONES NUMERICAS
Las operaciones lógicas devuelven siempre verdadero
(true) o falso (false). Se utilizan para hacer comprobaciones.
Las operaciones lógicas de que disponemos son estas:
= : Devuelve verdadero si los dos operandos son iguales
<> : Devuelve verdadero si los dos operandos son
diferentes
> : Devuelve verdadero si el primer operando es mayor
que el segundo
< : Devuelve verdadero si el segundo operando es mayor
que el primero
>= : Verdadero si el primer operando es mayor o igual
que el segundo
<= : Verdadero si el primer operando es menor o igual
que el segundo
and : Devuelve verdadero si las dos expresiones lógicas
son verdaderas
or : Verdadero si una o las dos expresiones lógicas son
verdaderas
not : Devuelve verdadero si la expresión es falsa
Y ahora expliquemos esto un poquito:
Las primeras 6 operaciones son muy sencillas. Sirven para
comparar dos expresiones numéricas y nos devuelven el valor booleano
correspondiente. Así, por ejemplo, la expresión "3 = 2" siempre nos devolverá
falso, pero la expresión "A = 2" tal vez devuelva falso o tal vez
devuelva verdadero, ya que dependerá de si la variable A está almacenando o no
el valor 2 en el momento en que se hace la comprobación.
Como siempre, podemos complicar las cosas y escribir
cosas como esto:
(Tabla[3] - Constante + 8 * Tabla[ Tabla[ 9 - 3 ] + 9)
>= Tabla[5]
(Si alguien no acaba de ver claro esto, que pruebe a
desglosar en pasos esta expresión, tal y como he hecho yo con las anteriores, y
me lo comente)
Las 3 últimas operaciones de la lista ya no trabajan con
expresiones numéricas sino con expresiones lógicas. Teniendo arriba la función
de cada una creo que lo mejor es explicarlo mediante ejemplos.
(3 = 2) or (1 = 4) daría siempre falso porque la
expresión (3 = 2) da falso y la expresión (1 = 4) también. Y "or"
sólo devuelve verdadero cuando al menos una de las expresiones es verdadera.
(3 = 2) or (1 = 1) daría verdadero porque aunque (3 = 2)
es falso, (1 =1) es verdadero.
((3 = 2) or (1 = 1)) and (9 = 3) devolvería falso porque
((3=2) or
(1=1)) da verdadero pero (9 = 3) da falso. Y para que
"and" devuelva verdadero han de ser verdaderas las dos expresiones.
not (1=3) daría verdadero. Porque (1=3) da falso y
"not" devuelve lo contrario de lo que vale la expresión dada.
Hasta aquí es sencillo, pero hay que tener en cuenta que
no nos vamos a limitar a hacer que el Turbo Pascal nos diga que 1 no es igual a
3. La finalidad de esto es mucho más útil, por supuesto. Hay que recordar que para
construir las expresiones lógicas podemos valernos de cualquier expresión
numérica. Esto es, si tenemos dos expresiones numéricas como estas:
(Tabla[4] - 8) * 34
(Contante + A) % Tabla[3]
Podemos hacer una expresión lógica que compare esas dos
expresiones, como por ejemplo:
( (Tabla[4] - 8) * 34 ) >= ( (Constante + A) %
Tabla[3] )
Y una vez tenemos esta expresión lógica podemos
combinarla con otras expresiones lógicas para hacer expresiones lógicas más
complejas, por ejemplo algo como esto:
((( Tabla[4] - 8) * 34 ) >= ((Constante + A) %
Tabla[3])) or (2=(1+A))
(si alguien quiere entretenerse, podría ser un buen
ejercicio calcular para qué valores de Tabla[4], Tabla[3] y A la expresión
ENTERA es verdadera.
DESCARGAR CAPITULO 4 VERSIÓN PDF
CAPITULO 5
0 comentarios: