EXPRESIONES-CAPITULO 4

10:39:00 Unknown 0 Comments


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: