TEMA 1.5
OPERADORES Y EXPRESIONES





1.5.1 - Introducción a los operadores

En este tema vamos a ver como construir las expresiones matemáticas y lógicas necesarias para que nuestros programas sea capaces de hacer cálculos.

Una expresión sería lo equivalente a las fórmulas que escribimos en una hoja de cálculo (Excel), es decir una sucesión de números, operadores (signos más, menos, etc.) y nombres de variables, entre otras cosas, colocados en el orden correcto.





1.5.2 - Operador de asignación

Lo primero que vamos a ver en este tema es un operador que nos permita guardar "algo" en una variable.

En el programa Saludador para guardar nuestro nombre en la variable nombre$ usábamos directamente la instrucción INPUT que se encargaba de leer los datos del teclado y guardarlos directamente en la variable. Aquí no empleábamos el operador de asignación, pero después hemos hecho cosas como:

mensaje$ = "Prueba superada"

o al declarar las constantes hacíamos:

CONST iva = 16

En estos ejemplos se puede ver que hemos usado el signo Igual para "Asignar" a la variable que hay a su izquierda el valor de la "Expresión" que hay a su derecha, por lo tanto ya podemos decir que el signo igual es el operador de asignación en el lenguaje Basic.

En el caso más sencillo:

total = 500

hacemos que en la variable total se almacene el número 500, perdiéndose el valor que tuviera anteriormente.

También podemos hacer:

total = total + 100

En este caso estamos usando la variable total como un "acumulador" ya que vamos a almacenar en ella el valor que tenga antes de la asignación más cien. Dicho de otra forma, si la variable valía 500 ahora le vamos a almacenar su valor de 500 más 100, con lo que al final de la asignación pasará a valer 600. En el siguiente apartado se explican algunas cosas sobre estas asignaciones.

Es importante tener claro que a una variable solo le podemos asignar los datos adecuados a su tipo, por ejemplo si a una variable de cadena le asignamos una expresión numérica o a una variable numérica le asignamos una cadena se producirá un Error de Tiempo de Ejecución y el programa se parará.

También hay que tener en cuenta que si a una variable de tipo entero le asignamos una expresión cuyo valor es con decimales, el número almacenado se redondeará, por ejemplo...

num% = 10 / 3

hará que num% valga 3 en vez de 3.3333, igual que

num% = 20 / 3

hará que num% valga 7 en vez de 6.6666. Esta vez se ha redondeado hacia arriba.

Tiene que quedar claro que la variable "destino" siempre va a la izquierda del signo igual, y la expresión a la derecha.

Las expresiones nunca van a ir solas. Siempre van en una asignación o en una estructura condicional que ya veremos más adelante.





1.5.3 - Contadores y acumuladores

Estas dos palabras se usan mucho en programación para referirse a variables que van incrementando su valor a lo largo de la ejecución del programa.

Normalmente serán de tipo numérico y no se tratan de ninguna forma en especial, solo que al asignarles un valor se hace de forma que el anterior no se pierda, por ejemplo:

nivel = nivel + 1
total = total + subtotalLinea
vidas = vidas - 1
tamaño = tamaño * 2

Es muy importante inicializarlas de forma correcta siguiendo estas normas:

La diferencia entre acumuladores y contadores es que los acumuladores se incrementan con cualquier número, como por ejemplo el total de una factura, mientras que los contadores se incrementan siempre con el mismo número, normalmente 1.





1.5.4 - Operadores aritméticos

Llamamos operadores aritméticos a los signos que usaremos para hacer operaciones aritméticas como sumas, restas, etc.

OperadorNombre
+ Suma
- Resta
* Multiplicación
/ División
MOD Resto de división (Módulo)
^ Potencias

El operador suma lo que hace es sumar valores. Se pueden encadenar tantas sumas como queramos, por ejemplo

total = 2 + 74 + 7 + 25 + 82

El operador resta resta un valor a otro, por ejemplo:

neto = peso - tara

El operador asterisco hace multiplicaciones, por ejemplo:

elDoble = n * 2

El operador división divide un valor entre otro, por ejemplo:

kilos = gramos / 1000

El operador MOD nos devuelve el resto de una divisíón. Es especialmente útil para deducir si un número es par, ya que al dividir un par entre 2 el resto siempre es 0. Se usa entre los dos operandos igual que los símbolos anteriores, veremos su funcionamiento y su utilización en los temas siguientes.

El operador "acento circunflejo" sirve para calcular potencias, por ejemplo 5^2 es cinco al cuadrado o también 5*5. También podríamos calcular potencias decimales como 4^2.5. Para escribir este símbolo pulsa mayúsculas y la tecla correspondiente dos veces, oirás un pitido y solo entonces aparecerá escrito en la pantalla. Si aparece dos veces borra uno.





1.5.5 - Operadores relacionales o de comparación

Estos operadores hacen que una expresión devuelva un valor lógico, es decir, en vez de un número devolverá VERDADERO o FALSO. Esto nos será muy útil en las estructuras condicionales que veremos en los siguientes temas, dónde veremos muchos ejemplos de su utilización.

OperadorNombre
= Igual
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que
<> Distinto de

En QBasic el signo igual sirve tanto para asignaciones como para comparaciones, pero nunca se confunden ya que QBasic los evalúa de una u otra forma según dónde estén escritos.





1.5.6 - Operadores lógicos

Estos operadores también devuelven un valor VERDADERO o FALSO a partir de los valores de las dos expresiones lógicas que unen. Igual que los anteriores se explicarán en los temas siguientes dedicados a estructuras condicionales.

OperadorNombre
ANDOperador Y
OROperador O
NOTOperador monario de negación
XOROperador O exclusivo
EQVOperador de equivalencia
IMPOperador de implicación

Los tres primeros son las puertas lógicas elementales del álgebra de Boole, los otros se pueden construir a partir de las anteriores y por eso no suelen estar en otros lenguajes de programación y no hablaremos de ellos aquí.

AND devuelve verdadero si las dos expresiones que une son verdaderas, en caso contrario devuelve falso. Por ejemplo:

esNavidad = ((mes = 12) AND (dia = 25))

Podemos asegurar que es Navidad si el mes es 12 y el día es 25. Si el mes no es diciembre no será navidad aunque estemos a 25, tampoco si es un día de diciembre distinto de 25 y mucho menos si ni es diciembre ni es 25. Usamos por primera vez los paréntesis para dar más claridad, más adelante se explica cómo hacerlo.

OR devuelve verdadero si alguna de las dos expresiones que une es verdadera, o las dos lo son. Si las dos son falsas devuelve falso, por ejemplo:

puedesComprar = ((tuDinero > 0) OR (precio = 0))

En este caso la variable puedesComprar sería verdadero si tu dinero es mayor que cero (aprovechamos para dar un ejemplo del operador >) o si el precio es gratis, o las dos cosas. Solo sería falso si no tienes dinero y el producto a comprar vale dinero, con lo que las dos partes de la expresión serían falsas y el resultado también.

NOT es un operador "monario". Esto significa que sólo tiene un operando, a diferencia de los otros que siempre están entre dos operandos. Lo que hace NOT es invertir el resultado de una expresión, es decir, si es verdadera devuelve falso y si es falsa devuelve verdadero.

Para detallar los posibles valores que devuelven los operadores lógicos se construyen las llamadas "Tablas de la verdad" que representan todas las combinaciones posibles y los valores devueltos por cada operador.

Tabla de la verdad para AND
VERDADEROANDVERDADERO=VERDADERO
VERDADEROANDFALSO=FALSO
FALSOANDVERDADERO=FALSO
FALSOANDFALSO=FALSO

Tabla de la verdad para OR
VERDADEROORVERDADERO=VERDADERO
VERDADEROORFALSO=VERDADERO
FALSOORVERDADERO=VERDADERO
FALSOORFALSO=FALSO

Tabla de la verdad para NOT
NOTVERDADERO=FALSO
NOTFALSO=VERDADERO

Observa que la variable puedesComprar y la esNavidad del ejemplo anterior pueden ser de cualquier tipo numérico para poder ser verdaderas o falsas. QBasic entiende que una variable (o el resultado de una expresión) es falsa si vale 0 y verdadera en cualquier otro caso. Otros lenguajes tienen un tipo de datos específico para estas situaciones, pero aquí puede valer cualquier tipo de datos numérico.

Es normal declarar constantes al principio de los programas para poder usar las palabras VERDADERO y FALSO en las expresiones y darle más claridad. Se haría:

CONST FALSO = 0

pero para verdadero podemos hacer...

CONST VERDADERO = NOT FALSO

con lo que hacemos que VERDADERO sea justo lo contrario de FALSO. Muy lógico.













CuRSo De iNTRoDuCCióN a La PRoGRaMaCióN CoN QBaSiC
© 2004 Juan M. González