|
Operadores
lógicos.
¿Operadores lógicos?.
Hasta este momento hemos visto
que tanto en una condición (Sí... o En caso de...) como en
un bucle (Mientras...) utilizamos una sola condición para
llevarla a cabo. Pero puede ser que nos interese valorar más
de una condición. Me explico: puede ser que un determinado
momento nos interese mirar si el bloque que tenemos encima se
llama A y nos encontramos en la posición 5,
con lo que podríamos tomar una decisión determinada. Otra
cosa que podríamos mirar es si el bloque se llama A o
nos encontramos en la posición 5. Fíjate que estos dos
ejemplos tienen una pequeña diferencia uno esta planteado
utilizando una o y otro una y,
con lo que el resultado es diferente. A esta o
y a esta y se les llama operadores lógicos.
Recuerda que las condiciones siempre se valoran según si son
Verdaderas o Falsas .
Analizando
el operador lógico Y.
Para analizar el
funcionamiento de este operador lógico vamos a plantear un
pequeño caso para ver que es lo que ocurriría en diferentes
momentos.
Tenemos a
nuestro Robot moviéndose libremente por nuestra pasarela con
10 posiciones y queremos que mire si se
encuentra en la posición 5 y
si el bloque que tiene encima se llama A. Si
es así deberá cogerlo y llevarlo a la primera posición.
En un principio podríamos
pensar en utilizar un Si dentro de otro,
pero como ya hemos dicho muchas veces, cuantas menos líneas
tenga el código de un programa, en un principio mejor.
Veamos igualmente como sería el código utilizando un Si
anidado con otro. En un principio en el primero de los
"Sis" podemos preguntar por cualquiera de las
condiciones que se deben cumplir y dentro por la que queda.
Dentro de los dos "Sis" pondremos las líneas que
se debe ejecutar en caso de que las dos condiciones sean Verdaderas.
(Solo escribiremos las líneas en las que se utiliza la
instrucción Si). Te recomiendo que antes de
continuar mira la página de instrucciones de nuestro lenguaje.
| Si
Posición = 5 entonces |
Si BloqueEncima = "A" entonces
|
Instrucciones a
realizar...
|
Fin Si
|
| Fin Si |
Este sería el
código con un Si dentro de otro. ¿Que es
lo que haría el programa cuando llegara a estas líneas?
Primero miraría la primera condición si esta se cumple, si
es verdadera, pasaría a la siguiente línea, miraría si
esta condición se cumple, en caso afirmativo realizaría las
instrucciones que hubieran dentro. Si cualquiera de las dos
condiciones que tenemos en este ejemplo no se cumplieran el
programa no realizaría las instrucciones internas.
Ahora vamos a ver como podemos
implementar las mismas funciones pero todo dentro de un mismo
Si. En un principio la estructura del Si
es exactamente igual, lo único que debemos pensar es que
tendremos que separar las dos condiciones mediante un nexo.
En este caso como queremos que se cumplan las dos condiciones
utilizaremos un nexo Y. Veamos como
quedaría el ejemplo y después pasaremos a comentarlo viendo
su funcionamiento en diferentes casos.
| Si
Posición = 5 Y BloqueEncima = "A"
entonces |
Instrucciones
a realizar...
|
| Fin Si |
Observa como el
número de líneas se ha reducido. Ahora vamos a plantear las
diferentes opciones con las que nos podemos encontrar y si
realizaría o no las instrucciones que se encuentran dentro
del Si. Recuerda que las condiciones solo
pueden ser Verdaderas o Falsas.
| Posición = 5 |
BloqueEncima = "A" |
Instrucciones a
realizar... |
| Verdadero |
Verdadero |
Verdadero |
| Verdadero |
Falso |
Falso |
| Falso |
Verdadero |
Falso |
| Falso |
Falso |
Falso |
Observa que el
único caso en el que se realizarían las instrucciones
sería en el que se cumplen las dos condiciones planteadas en
el Si. Por el contrario si una de las dos
instrucciones no se cumple las instrucciones no se
ejecutarían. Fíjate bien en el cuadro e inténtalo
entender.
Analizando
el operador lógico O.
Para analizar el
funcionamiento de este otro operador lógico vamos a plantear
otro pequeño caso para ver que es lo que ocurriría en
diferentes momentos.
Tenemos a
nuestro Robot, otra vez, moviéndose libremente por nuestra
pasarela con 10 posiciones y queremos que
mire si el bloque que tiene encima se llama A
o si se llama B. Si es así deberá coger el
bloque y llevarlo a la primera posición.
Para poder realizar este
pequeño ejemplo sin utilizar los operadores lógicos
deberíamos utilizar dos instrucciones Si de
la siguiente manera:
| Si
BloqueEncima = "A" entonces |
Instrucciones
a realizar...
|
| Fin Si |
| Si
BloqueEncima = "B" entonces |
Instrucciones
a realizar...
|
| Fin Si |
¿Que es lo que
haría el programa cuando llegara a estas líneas? Primero
miraría el primer Si si se cumpliera
realizaría las instrucciones que tenemos en el interior,
sino pasaría al siguiente Si y miraría la
siguiente condición, aquí, si esta condición se cumple se
realizan las instrucciones que tenemos en el interior. De tal
manera que aquí, si una de las dos condiciones se cumple se
realizarían las instrucciones. Piensa que no podemos
utilizar un Sino dentro del primer Si
ya que podría ser que nos encontrásemos con un
bloque llamado C con lo que también se
realizarían las instrucciones, cosa que no nos interesa. Por
eso ponemos dos Si para comprobar que el
bloque de encima se llama A o se llama B.
Ahora vamos a ver como podemos
implementar las mismas funciones pero todo dentro de un mismo
Si. En un principio la estructura del Si
es exactamente igual, lo único que debemos pensar es que
tendremos que separar las dos condiciones mediante un nexo.
En este caso como queremos que se cumpla una de las dos
condiciones utilizaremos un nexo O. Veamos
como quedaría el ejemplo y después pasaremos a comentarlo
viendo su funcionamiento en diferentes casos.
| Si
BloqueEncima = "A" O BloqueEncima = "B"
entonces |
Instrucciones
a realizar...
|
| Fin Si |
Observa como el
número de líneas se ha reducido y más pensando que
tendríamos que repetir las instrucciones internas dos veces.
Ahora vamos a plantear las diferentes opciones con las que
nos podemos encontrar y si realizaría o no las instrucciones
que se encuentran dentro del Si. Recuerda
que las condiciones solo pueden ser Verdaderas
o Falsas.
| BloqueEncima = "A" |
BloqueEncima = "B" |
Instrucciones a
realizar... |
| Verdadero |
Verdadero |
Verdadero |
| Verdadero |
Falso |
Verdadero |
| Falso |
Verdadero |
Verdadero |
| Falso |
Falso |
Falso |
Observa que el
único caso en el que no se realizarían las instrucciones
sería en el que no se cumple alguna de las dos condiciones
planteadas en el Si. De forma que si una de
las dos condiciones es verdadera las instrucciones se
realizan. Fíjate bien en el cuadro e inténtalo entender.
Explicación matemática.
Vamos a ver como podemos
entender estos conceptos de operadores lógicos de forma
matemática. Esto es interesante en el momento en el que nos
podemos plantear una mezcla de Y y de O,
dentro de un mismo Si u otra instrucción.
Más adelante verás a lo que me refiero exactamente.
Antes de continuar
explicaremos que un ordenador realiza los cálculos en
sistema binario y no el sistema decimal como nosotros, solo
utiliza dos dígitos: el 1 y el 0. Con estos dos dígitos
representa cualquier número. Vamos a realizar una
comparación entre el sistema decimal y el binario contando
del 1 al 10.
| Decimal |
Binario |
| 1 |
1 |
| 2 |
10 |
| 3 |
11 |
| 4 |
100 |
| 5 |
101 |
| 6 |
110 |
| 7 |
111 |
| 8 |
1000 |
| 9 |
1001 |
| 10 |
1010 |
En un principio
no vamos a comentar como "funciona" el código
binario al completo, ya que sería un poco largo y tedioso,
puede ser que más adelante lo hagamos, es muy interesante.
Lo único en lo que queremos hacer hincapié es en un par de
operaciones, la suma y la resta, más adelante veremos para
que nos pueden servir. En un principio lo único que nos
interesaría sumar y multiplicar serían 1 y 0, por lo que el
tema se convierte en un poco más sencillo.
Veamos primero la suma
como sería en decimal y como es en binario.
Decimal
|
|
Binario
|
| 1 |
1 |
1 |
|
1 |
1 |
10 |
| 1 |
0 |
1 |
|
1 |
0 |
1 |
| 0 |
1 |
1 |
|
0 |
1 |
1 |
| 0 |
0 |
0 |
|
0 |
0 |
0 |
Observa que en
la parte de la operación en Binario lo único que se ha
visto afectado es el número 2 que como ya hemos visto en
Binario es un 10. Una vez hecha esta tabla compárala con la
tabla que realizamos del operador lógico O
y veras que si sustituimos los 1 por Verdadero
y los 0 y los 10 por Falso,
la tabla es exactamente igual.
Veamos ahora la multiplicación
como sería en decimal y como es en binario.
Decimal
|
|
Binario
|
| 1 |
1 |
1 |
|
1 |
1 |
1 |
| 1 |
0 |
0 |
|
1 |
0 |
0 |
| 0 |
1 |
0 |
|
0 |
1 |
0 |
| 0 |
0 |
0 |
|
0 |
0 |
0 |
Observa que en
la parte de la operación en Binario no se ha visto afectado
de ninguna manera ya que no se han utilizado dígitos que no
sean el 1 y el 0. Una vez
hecha esta tabla compárala con la tabla que realizamos del
operador lógico Y y veras que si
sustituimos los 1 por Verdadero
y los 0 por Falso, la tabla
es exactamente igual.
En definitiva lo que queremos
dar a entender con esto es que en el momento en el que nos
veamos delante de la necesidad de utilizar una combinación
de Y y O dentro de una
misma condición, podemos utilizar la multiplicación y la
suma en binario para poder ver cual es resultado que nos
daría.
Intenta pensar diferentes
momentos en los que puedas necesitar una combinación de los
dos operadores lógicos y como se actuaría delante de ellos.
|