Nota:
En este apartado existen muchas similitudes con el del
apartado 5.1
Operadores y expresiones del Curso de Diseño de
Algoritmos. No obstante,
en el libro EMPEZAR DE
CERO A PROGRAMAR EN PASCAL no se da está
circunstancia, ya que, los contenidos están distribuidos de
forma distinta.
En
un programa,
el tipo de un dato determina las operaciones que se pueden
realizar con él. Por ejemplo, con los datos de tipo entero
se
pueden realizar operaciones aritméticas, tales como la suma,
la
resta o la multiplicación.
Ejemplo
1: Algunos
ejemplos son:
111
+
6 (operación
suma)
19 - 72 (operación resta)
24
*
3 (operación multiplicación)
Todas las operaciones del
ejemplo
constan de
dos
operandos (constantes
enteras) y un operador. La mayoría de
las
veces es así, pero, también es posible realizar
operaciones con distinto número de operadores y/u operandos.
Ejemplo
2: Por
ejemplo:
111
+
6 - 8 (tres
operandos y dos operadores)
-( ( +19 ) + 72 ) (dos
operandos y tres operadores)
-( -72
) (un
operando y dos operadores)
En las operaciones del ejemplo se puede observar que los caracteres más (+)
y menos (-)
tienen dos usos:
1.
Operadores suma y resta.
2. Signos de un
número
(también son operadores).
Los operadores de signo más (+)
y menos (-)
son operadores monarios,
también llamados unarios,
ya que, actúan, solamente, sobre un operando.
Los caracteres
abrir
paréntesis "("
y cerrar
paréntesis ")"
se utilizan para establecer la prioridad de los operadores, es decir,
para establecer el orden en el que los operadores actúan
sobre
los operandos.
Un operador
indica el tipo de operación a realizar sobre los operandos
(datos) que actúa. Los operandos pueden ser:
- Constantes
(expresadas por
su
valor o con un nombre (identificador)).
- Variables.
- Llamadas a funciones.
- Elementos de
formaciones
(arrays).
En este apartado se van a
tratar
operaciones
en
donde sólo aparecen constantes y variables. Cuando se
combinan
uno o más operadores con uno o más operandos se
obtiene
una expresión. De modo que, una expresión
es una secuencia de operandos y operadores escrita bajo unas reglas de
sintaxis.
Ejemplo
3: Dadas
las siguientes declaraciones de
constantes y variables:
const
PI = 3.141592;
var
Numero : Integer;
Radio_circulo : Real;
Algunos
ejemplos de
expresiones son:
2 * PI * Radio_circulo
(
PI * PI )
Numero * 5
El valor de la constante PI
viene dado en su declaración (3.141592).
No obstante, los valores de las variables Numero
y Radio_circulo
serán dados en la ejecución del programa. Por
ejemplo, podrían asignarse mediante dos instrucciones
de asignación en el bloque de instrucciones
principal del programa:
begin
...
Numero := 2;
Radio_circulo
:= 3.2;
...
end.
Nota:
Fíjese que, en Pascal, la sintaxis para realizar
una instrucción de asignación es:
<nombre_de_la_variable>
:=
<expresión>;
|
Por tanto, al evaluar las expresiones del ejemplo 3, se
obtendrían los valores:
20.106189
(valor real) ( 2 * 3.141592 * 3.2 )
9.869600
(valor real) ( 3.141592 * 3.141592 )
10
(valor entero) ( 2 * 5 )
Un operador siempre forma parte de una expresión, en la
cual, el
operador siempre actúa sobre al menos un operando. Por el
contrario, un operando sí puede aparecer solo en una
expresión.
En programación, de la evaluación de una
expresión
siempre se obtiene un valor. Dicho valor puede ser de tipo: entero,
real,
lógico, carácter o cadena. Por consiguiente, una
expresión puede ser:
- Aritmética
(devuelve un
número entero o real).
- Lógica
(devuelve
un
valor lógico: verdadero
o falso)
- De
carácter
(devuelve
un carácter representable por el ordenador).
- De cadena
(devuelve una
cadena).
A continuación,
vamos a
estudiar los
operadores y las expresiones en Turbo Pascal.
Expresiones
aritméticas
De la
evaluación
de
una expresión
aritmética siempre
se obtiene un valor de tipo entero o real. En las expresiones
aritméticas se pueden utilizar los siguientes operadores aritméticos:
|
Operadores
Aritméticos en Turbo Pascal:
|
|
+
Suma
-
Resta
*
Multiplicación
/
División real
div
División
entera
mod
Módulo (resto
de la división entera)
+
Signo más
-
Signo menos |
|
Figura.
Clasificación de los operadores aritméticos en
Turbo Pascal.
Ejemplo
4: El operador multiplicación
(*)
realiza la multiplicación de dos operandos
numéricos.
5 *
2
3.1 * 2.5
Los resultados son:
10 (valor entero)
7.75 (valor real)
Ejemplo
5: El operador división real
(/) realiza la
división real entre dos operandos numéricos.
5 /
2
3.1
/
2.5
6 /
2
Sus resultados son:
2.5 (valor real)
1.24 (valor real)
3.0 (valor real)
Ejemplo
6: El operador división
entera (div)
realiza la división entera entre dos operandos
numéricos enteros.
5 div
2
3.1 div 2.5
El operador división entera (div)
no puede operar con operandos numéricos reales. Por tanto,
al
evaluar las expresiones de este ejemplo se obtienen los valores:
2 (valor entero)
ERROR (no se puede
evaluar; ambos operandos deben ser valores enteros)
Ejemplo
7: El operador módulo
(mod)
realiza la división entera entre dos operandos
numéricos enteros, devolviendo el resto de la misma.
5 mod
2
3.1 mod 2.5
Al igual que el operador división entera (div),
el operador módulo (mod)
tampoco puede operar con operandos numéricos reales. De modo
que, en este caso, los resultados son:
1 (valor entero)
ERROR (no se puede
evaluar; ambos operandos deben ser valores enteros)
Ejemplo
8: El operador signo menos
(-)
cambia el signo de un operando numérico. Así, de
las expresiones
-11
-(
3.1 )
-( -2.5 )
se obtienen los valores:
-11 (valor entero)
-3.1 (valor real)
2.5 (valor real)
Prioridad
de los operadores aritméticos
Ejemplo
9: En una expresión
aritmética puede aparecer más de un operador
aritmético.
11 + 3 div 3
(dos operadores)
-3
*
6 mod 4
(tres operadores)
-3.1 + 5 * 0.5
(tres operadores)
+3
*
-8
(tres operadores)
Para poder evaluar correctamente las expresiones aritméticas
del
ejemplo, es necesario seguir un criterio de prioridad de operadores. En
Turbo Pascal, la prioridad de los operadores aritméticos es:
|
Prioridad
de los operadores aritméticos
(de mayor a menor) en Turbo Pascal:
|
|
* / div mod
Multiplicación,
división real, división entera y módulo
+ -
Suma
(o Signo más)
y resta (o Signo menos)
|
|
Figura. Prioridad
de los operadores aritméticos en Turbo Pascal.
Todos los
operadores aritméticos con la misma prioridad, por ejemplo,
el
operador multiplicación (*)
y el operador módulo (mod),
se evalúan de izquierda a derecha. En consecuencia, los
valores que proporcionan las expresiones del ejemplo 9 son:
12
(actúan en orden los operadores: (div)
y suma (+))
-2
(actúan en orden los operadores: (*),
(mod)
y signo menos (-))
-0.6
(actúan en orden los operadores: (*), signo
menos (-),
y suma (+))
-24
(actúan en orden los operadores: (*),
signo menos (+)
y
signo menos (-))
Para modificar la prioridad de los operadores en las expresiones, se
debe hacer uso de los caracteres abrir
paréntesis "("
y cerrar
paréntesis ")".
En las expresiones aritméticas hay que tener la
precaución de no dividir entre cero (0).
Ejemplo
10: Por tanto, las siguientes
expresiones son incorrectas:
11 / 0
5 div 0
-3
mod
0
De la evaluación de cada una de estas expresiones se obtiene:
ERROR (no se puede
evaluar; no se puede dividir entre cero)
Expresiones
lógicas
De la evaluación de una expresión
lógica siempre se obtiene un valor de tipo
lógico (TRUE o
FALSE).
En las expresiones lógicas se pueden utilizar dos tipos de
operadores:
·
Relacionales
· Lógicos
Un operador relacional
se
utiliza para comparar los valores de dos expresiones. Estas
deben ser del mismo tipo (aritméticas, lógicas,
de
carácter o de cadena).
Ejemplo
11: Algunos ejemplos son:
22 >
13 (comparación de dos expresiones
aritméticas)
22.5
<
3.44
(comparación de dos expresiones aritméticas)
TRUE
= FALSE (comparación de
dos
expresiones lógicas)
'c' > 'f'
(comparación de dos expresiones de carácter)
"coche" = "Coche"
(comparación de dos expresiones de cadena)
Proporcionan los valores:
TRUE (22
es mayor que 13)
FALSE (22.5
no es menor que 3.44)
FALSE (TRUE
no es igual que FALSE)
FALSE ('c'
no es mayor que 'f')
FALSE ("coche"
no es igual que "Coche")
Las comparaciones entre los valores de tipo numérico son
obvias. En cuanto a los valores de tipo lógico (TRUE y FALSE) se considera
que FALSE
es menor que TRUE.
En lo que respecta a los valores de tipo carácter, su orden
viene dado por el ASCII
extendido utilizado por el ordenador
para
representarlos. Y en el caso de los valores de tipo cadena,
también se tiene en cuenta dicho código.
Los operadores relacionales son:
|
Operadores
Relacionales en Turbo Pascal:
|
|
<
Menor que
<=
Menor o igual que
>
Mayor que
>=
Mayor o igual que
=
Igual que
<>
Distinto que
|
|
Figura.
Clasificación de los operadores relacionales en
Turbo Pascal.
Nota:
Existe un operador relacional más (in),
del cual hablaremos más adelante.
Para escribir una expresión
relacional (lógica) se utiliza la sintaxis:
<expresión_1>
<operador_de_relación>
<expresión_2>
|
Siendo <expresión_1>
y <expresión_2>
del mismo tipo (aritmética, lógica, de
carácter o de cadena).
Por otra parte, un operador
lógico actúa, exclusivamente, sobre
valores de expresiones lógicas. Los operadores
lógicos son:
|
Operadores
Lógicos en Turbo Pascal:
|
|
and Conjunción
or
Disyunción
not
Negación
|
|
Figura.
Clasificación de los operadores lógicos en
Turbo Pascal.
Nota:
Existen tres operadores lógicos más (xor, shl
y shr
),
de los cuales hablaremos más adelante.
El operador conjunción (and)
y el operador disyunción (or)
siempre actúan sobre dos operandos, mientras que, el
operador negación (not)
sólo actúa sobre un operando, o dicho de otra
forma, es un operador monario.
El modo en que actúan los operadores lógicos se
resume en
las llamadas tablas de verdad, definidas por el matemático
George Boole.
La tabla de verdad del operador
conjunción (and)
es:
|
|
|
|
<expresión_1> and <expresión_2>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Figura. Tabla
de verdad del operador conjunción (and)
en Turbo Pascal.
Se supone que <expresión_1>
y <expresión_2>
son expresiones lógicas. De la tabla de verdad se deduce
que <expresión_1> and <expresión_2>
se evalúa a TRUE
sólo en el caso de que tanto <expresión_1>
como <expresión_2>
se evalúen también como verdaderas, en cualquier
otro caso el resultado será FALSE. Dicho de otro
modo, si al menos una de las dos expresiones es falsa, el resultado
será FALSE.
Ejemplo
12: Algunos ejemplos son:
( 9 >
3 ) and ( 8 > 6 )
( 9 >
3 ) and ( 8 > 9 )
( 9 =
3 ) and ( 8 >= 6 )
( 9 =
3 ) and ( 8 >= 9 )
Las expresiones anteriores se evalúan a:
TRUE (9 > 3
es TRUE
y 8 > 6
es TRUE)
FALSE (9 > 3
es TRUE
y 8 > 9
es FALSE)
FALSE (9 = 3
es FALSE
y 8 >= 6
es TRUE)
FALSE (9 = 3
es FALSE
y 8 >= 9
es FALSE)
La tabla de verdad del operador
disyunción (or)
es:
|