Operadores lógicos.

¿Operadores lógicos?.
Analizando el operador lógico Y.
Analizando el operador lógico O.
Explicación matemática.

¿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.