Visual DaVinci Teoria
Visual Da Vinci
1. El robot Da Vinci
Da Vinci es un robot que es controlado por un conjunto de instrucciones, que permite
realizar recorridos y tareas dentro de una ciudad.
El robot puede:
Moverse.
Gira 90 grados en el sentido de las agujas del reloj. Gira hacia la derecha
Puede tomar y depositar: flores y papeles. Los mismos se hallan ubicados en las
esquinas de la ciudad.
Lleva consigo una bolsa donde puede transportar flores y papeles. Está capacitado para
recoger y/o depositar cualquiera de los dos tipos de objetos en una esquina, pero de a
uno a la vez. La bolsa posee capacidad ilimitada.
Puede realizar cálculos simples.
Puede informar los resultados obtenidos.
El robot puede moverse en una ciudad de avenidas y calles, las calles
son horizontales y las avenidas son verticales como muestra la figura 1
Figura 1: la ciudad donde se mueve el robot
El robot siempre comienza sus movimientos en la avenida 1 y calle1
como se muestra en la figura 1, siempre mira hacia arriba al comenzar un
programa. Cada esquina está determinada por la intersección de una avenida y una
calle.
Cada esquina es el punto de intersección entre dichas avenidas y calles.
La esquina se representará por dos coordenadas: la primera indicará el
número de avenida y la segunda el número de calle. Por ejemplo, la
esquina (2,4) es la intersección de la avenida 2 y la calle 4.
Las flores y los papeles se encuentran siempre en las esquinas. Pueden existir varias
flores y varios papeles en cada esquina.
Se hacen las siguientes observaciones:
• La ciudad queda reducida a un ámbito cuadrado de 100 calles y 100 avenidas;
• El robot al moverse da un paso que equivale a una cuadra de recorrido;
• El robot puede tomar y depositar flores y papeles;
• El robot siempre inicia sus recorridos en la posición (1,1) de la ciudad.
El objetivo es escribir programas que permitan mostrar recorridos con funciones
simples (contar, limpiar, depositar).
2. Operaciones sobre el Robot
El robot puede entender un conjunto de acciones limitadas:
iniciar: Instrucción primitiva que posiciona al robot en la esquina (1,1) orientado hacia
arriba.
derecha: Instrucción primitiva que cambia la orientación del robot en 90° en sentido
horario respecto de la orientación actual. Ósea si estaba mirando hacia arriba mira a la
derecha
mover: Instrucción primitiva que conduce al robot de la esquina en la que se encuentra
a la siguiente, respetando la dirección en la que está orientado. Es responsabilidad del
programador que esta instrucción sea ejecutada dentro de los límites de la ciudad. En
caso contrario se producirá un error y el programa será abortado, es decir el robot caerá
de la cuidad.
tomarFlor: Instrucción primitiva que le permite al robot recoger una flor de la esquina
en la que se encuentra y ponerla en su bolsa. Es responsabilidad del programador que
esta instrucción sea ejecutada solo cuando haya al menos una flor en dicha esquina. En
caso contrario se producirá un error y el programa será abortado.
tomarPapel: Instrucción primitiva que le permite al robot recoger un papel de la
esquina en la que se encuentra y ponerlo en su bolsa. Es responsabilidad del
programador que esta instrucción sea ejecutada solo cuando haya al menos un papel en
dicha esquina. En caso contrario se producirá un error y el programa será abortado.
depositarFlor: Instrucción primitiva que le permite al robot depositar una flor de su
bolsa en la esquina en la que se encuentra.
depositarPapel: Instrucción primitiva que le permite al robot depositar un papel de su
bolsa en la esquina en la que se encuentra.
PosAv: Identificador que representa el número de avenida en la que el robot está
actualmente posicionado.
PosCa: Identificador que representa el número de calle en la que el robot está
actualmente posicionado.
HayFlorEnLaEsquina: Proposición cuyo valor es V si hay al menos una flor en la
esquina en la que el robot esta actualmente posicionado, ó F en caso contrario.
HayPapelEnLaEsquina: Proposición cuyo valor es V si hay al menos un papel en la
esquina en la que el robot está actualmente posicionado, ó F en caso contrario.
HayFlorEnLaBolsa: Proposición cuyo valor es V si hay al menos una flor en la bolsa
del robot, ó F en caso contrario.
HayPapelEnLaBolsa: Proposición cuyo valor es V si hay al menos un papel en la
bolsa del robot, ó F en caso contrario.
Pos: Instrucción que requiere dos valores Av y Ca, cada uno de ellos en el rango
1..100, y posiciona al robot en la esquina determinada por el par (Av,Ca) sin
modificar la orientación del robot.
Informar: Instrucción que permite visualizar en pantalla un conjunto de valores.
HayObstaculo: proposición lógica cuyo valor es V si hay un obstáculo en la esquina
Para tener cuidado: al escribir las instrucciones estas son sensible a mayúsculas y
minúsculas. No es lo mismo escribir “depositarFlor” que “DepositarFlor” ó
“depositarflor”.
De las tres formas anteriores sólo “depositarFlor” es correcta.
3. Estructura de un programa
Un programa escrito en el lenguaje del robot comienza con la palabra clave programa,
la cual debe estar seguida por un identificador que determina el nombre del programa.
El cuerpo del programa principal es una secuencia de sentencias, delimitada por las
palabras claves comenzar y fin.
La sintaxis a utilizar es la siguiente:
programa nombre_del_programa
comenzar
sentencias que indican el recorrido del robot
fin
4. Comentarios
Los problemas para poder ser resueltos, deben entenderse, es decir interpretarse
adecuadamente. Esto requiere un enunciado preciso de los mismos. Un comentario
dentro de un algoritmo no representan ni un dato, ni una orden, representa la
documentación del programa y es necesario para que otras personas puedan entender el
propósito del programa y luego se pueda hacer el mantenimiento del mismo.
Un comentario es un texto que explica en forma resumida la función de una instrucción
o un bloque del algoritmo, tratando de explicar cuál es el procesamiento de los datos
que se logra con el mismo.
En el Visual Da Vinci los comentarios se indican por medio de llaves { } y no son
instrucciones que se van a ejecutar, solo es un documento para guiar al programador
Por ejemplo el siguiente programa tiene dos comentarios
programa inicio
{es un comentario antes de comenzar}
comenzar
iniciar
{es un comentario al iniciar}
mover
fin
5. La programación
La programación en Visual Da Vinci utiliza ciertas reglas las cuales son muy estrictas y
están relacionadas con la indentación y el uso de mayúsculas y minúsculas.
Al escribir código se deben respetar las siguientes reglas de indentación:
• La palabra clave programa debe comenzar en la primer columna.
• Las palabras claves comenzar y fin de un programa deben comenzar en la misma
columna que la palabra clave programa.
• Las sentencias del cuerpo del programa debe comenzar dos columnas más a la derecha
que las palabras claves que lo delimitan: comenzar y fin.
• Las sentencias que pertenecen al cuerpo de una estructura de control deben comenzar
dos columnas más a la derecha que la palabra clave que identifica a la estructura de
control.
• La indentación es la única forma de indicar si una sentencia está dentro de una
estructura de control o no.
Por otro lado, todas las palabras claves deben ser escritas siempre con letras minúsculas,
excepto que su nombre esté compuesto por más de una palabra, en cuyo caso, de la
segunda palabra en adelante, cada una comienza con mayúscula. Por ejemplo, iniciar,
tomarFlor, mientras, numero.
Por el contrario, las variables del sistema y los procesos del sistema deben comenzar
cada palabra que compone su nombre con una letra mayúscula y las demás minúsculas.
Por ejemplo, PosAv, HayFlorEnLaBolsa, Pos, Informar.
6. El Ambiente de programación
Se denomina ambiente de programación a la herramienta que permite cubrir las distintas
etapas en el desarrollo de un programa, que van desde la codificación del algoritmo en
un lenguaje de programación hasta su ejecución, a fin de obtener los resultados
esperados.
Cada ambiente de programación trabaja sobre un lenguaje específico. En particular, el
ambiente Visual DaVinci utiliza las instrucciones del robot descripta previamente.
Para codificar un algoritmo en el lenguaje del robot es necesario realizar las siguientes
tres etapas:
1. Escribir el programa utilizando el Editor de código. El resultado será un archivo de
texto.
2. Para lograr que la computadora ejecute el programa escrito en la etapa anterior es
necesario traducirlo a un lenguaje que la computadora comprenda. Esto se realiza
mediante la compilación. En esta etapa se detectan los errores sintácticos (mala
ortografía).
3. Una vez que el programa ha sido compilado, puede ejecutarse. El ambiente Visual Da
Vinci permite visualizar durante la ejecución, el recorrido que realiza el robot.
A continuación se describe el funcionamiento del ambiente a fin de poder realizar cada
una de las etapas mencionadas anteriormente.
La figura 2 muestra el ingreso el ambiente formado por varias ventanas superpuestas. La
ventana de presentación se cierra automáticamente luego de pasado un cierto tiempo.
Figura 2: Ambiente de programación Visual DaVinci
El ambiente provee un Editor de Diagrama a fin de ingresar el programa a través de una
herramienta visual. Sin embargo, los programas serán ingresados a través del Editor de
Código. Por lo tanto, se recomienda cerrar el Editor de Diagrama quitando el tilde de la
opción Ver \ Editor de Diagrama del menú principal.
Para comenzar a trabajar, debe ingresarse el programa que se desea ejecutar en el Editor
de Código, como lo muestra la figura 3
Figura 3: Editor de Código
Si bien no es imprescindible, se recomienda salvar el programa ingresado mediante la
opción Archivo \ Guardar Como. Allí se deberá indicar el nombre que se desea dar al
programa. Los programas que se ejecutan dentro del ambiente Visual DaVinci poseen
extensión vdv.
A partir de este momento, en el extremo superior izquierdo del Editor de Código
aparecerá el nombre que ha sido asignado al programa.
Previo a la ejecución, es necesario realizar el proceso de compilación seleccionando la
opción Compilar del menú principal. El proceso de compilación se encargará de
verificar la sintaxis del programa escrito y en caso de existir errores, visualizará los
mensajes correspondientes.
Si el programa ha sido correctamente escrito, puede ejecutarse mediante la opción
Ejecutar del menú. En la ventana correspondiente a la Ciudad es posible ver cómo el
robot efectúa el recorrido indicado.
A la izquierda de la pantalla aparece una ventana (ver Figura 4) que informa las
coordenadas y la dirección del robot así como la cantidad de objetos que lleva en su
bolsa.
De ser necesario, la ejecución del programa puede abortarse en forma manual usando la
opción Ejecutar\ Abortar. Esta opción sólo se encuentra habilitada cuando el programa
está corriendo.
Figura 4: Variables del Robot
Es posible indicar la cantidad inicial de flores y papeles tanto para la ciudad como para
la bolsa del robot. Para ello se utiliza la opción Opciones \ Ciudad. La figura 5 muestra
la distribución de las flores. Puede procederse de la misma forma para manejar la
distribución de papeles seleccionando la lengüeta que dice Papeles (extremo inferior).
Figura 2.5: Opciones de la Ciudad
Esta configuración no se hará efectiva hasta que no se ejecute el programa nuevamente.
7 Estructuras de Control
En esta sección se detallará la sintaxis correspondiente a las estructuras de control
utilizadas por el robot.
7.1 Secuencia
Está definida por un conjunto de instrucciones que se ejecutarán una a continuación de
otra.
Ejemplo 1: Programe al robot para que camine desde (1,1) a (1,3) y desde allí a (4,3).
programa Cap2Ejemplo1
comenzar
iniciar
mover
mover
derecha
mover
mover
mover
fin
La instrucción iniciar ubica al robot en (1,1) orientado hacia el norte (hacia arriba).
Luego avanza dos cuadras en línea recta por lo que queda posicionado en la calle 3.
Dobla a la derecha para seguir avanzando por la calle 3 y camina tres cuadras por lo que
finaliza el recorrido parado en (4,3). El robot queda mirando hacia el este.
Note que no existe en el lenguaje del robot una instrucción que permita detenerlo. Esto
ocurrirá naturalmente al terminar el programa.
Ejemplo 2: Programe al robot para que recorra la avenida 4 desde la calle 4 hasta la
calle 7.
Al finalizar debe informar en qué esquina quedó parado.
programa Cap2Ejemplo2
comenzar
iniciar
Pos(4,3)
mover
mover
mover
Informar(PosAv, PosCa)
Fin
La instrucción Pos(4,3) permite que el robot “salte” desde (1,1) hasta (4,3). A partir de
allí, camina tres cuadras en línea recta, realizando el recorrido solicitado. Al terminar el
programa el robot quedará ubicado en la esquina (4,6). La instrucción Informar(PosAv,
PosCa) muestra los valores retornados por las instrucciones PosAv y PosCa.
1. Programe al robot para que recorra la calle 6 desde la avenida 11 a la
avenida 13.
2. Programe al robot para que recorra la avenida 17 desde la calle 31 hasta
la calle 25.
Aun faltan las estructuras de selección, repetición e iteración en una clase posterior
Tareas del Robot
Tareas del robot
El robot puede:
Tomar una flor que se ubica en una manzana
Tomar un papel que se ubica en una manzana
Depositar una flor que está en su bolsa de flores
Depositar un papel que está en su bolsa de papeles
También el robot puede esquivar obstáculos que están en su camino, estos obstáculos
pueden ser simples barreras o sino algo más complicado.
Para ubicar manualmente una flor o papel se debe ir al menú Opciones – Ubicación
manual, y entonces se abre una ventana con 3 botones:
El botón de flores
El botón de papeles
El botón de obstáculos
Ubicación Manual
Solo se debe hacer clic en el botón correspondiente y luego hacer clic en el mapa en la
esquina que uno quiera, las cantidades que muestra son 9999, es la cantidad disponibles
de flores, papeles y obstáculos disponibles. Luego que se termina de disponer de estos
objetos se hace clic en el botón Finalizar
Ubicación al azar
Para ubicar al azar estos objetos se debe ir al menú Opciones – Ciudad
Entonces aparecerá una ventana Opciones de Ciudad
Como se ve en la figura anterior, en esta ventana se puede elegir 3 diferentes pestañas
en la parte inferior Flores, Papeles o Obstáculos
Como se ve en la figura en la pestaña Flores, se debe hacer clic en el casillero de
chequeo Automático y al lado de pone la cantidad de flores que se van a distribuir en el
mapa, luego en la parte inferior se pone la dirección de la esquina inferior izquierda y la
esquina superior derecha del cuadrado donde se van a ubicar al azar las flores, se debe
poner el numero de avenida y calle para tal fin.
Al final en la parte inferior en la Bolsa de flores se pone la cantidad de flores que va a
tener al bolsa para que el robot pueda dejar flores en el mapa.
Para los papeles también se trabaja de la misma forma, dando la dirección de la región
cuadrada donde queremos ubicar al azar los papeles, en la parte inicial se debe poner la
cantidad de papeles que van a aparecer al azar y en la parte final la cantidad de papeles
que llevara en su bolsa.
Para los obstáculos, se debe hacer click en el botón de chequeo Automático y al lado se
debe poner la cantidad de obstáculos que se van a poner al azar en el mapa. Luego se
pone las direcciones de avenida y calle donde se ubicaran al azar los obstáculos o sea se
debe poner la dirección de la avenida y calle de la esquina inferior izquierda y la
dirección de la avenida y calle de la esquina superior derecha.
En la parte inferior se elije que tipo de barrera se va a usar Obstáculo simple o barreras
En cuanto a las tareas que puede realizar el robot este puede:
tomarFlor: Instrucción primitiva que le permite al robot recoger una flor de la esquina
en la que se encuentra y ponerla en su bolsa. Es responsabilidad del programador que
esta instrucción sea ejecutada solo cuando haya al menos una flor en dicha esquina. En
caso contrario se producirá un error y el programa será abortado.
tomarPapel: Instrucción primitiva que le permite al robot recoger un papel de la
esquina en la que se encuentra y ponerlo en su bolsa. Es responsabilidad del
programador que esta instrucción sea ejecutada solo cuando haya al menos un papel en
dicha esquina. En caso contrario se producirá un error y el programa será abortado.
depositarFlor: Instrucción primitiva que le permite al robot depositar una flor de su
bolsa en la esquina en la que se encuentra.
depositarPapel: Instrucción primitiva que le permite al robot depositar un papel de su
bolsa en la esquina en la que se encuentra.
PosAv: Identificador que representa el número de avenida en la que el robot está
actualmente posicionado.
PosCa: Identificador que representa el número de calle en la que el robot está
actualmente posicionado.
Informar: Instrucción que permite visualizar en pantalla un conjunto de valores. Por
ejemplo en el siguiente programa
programa obstaculos
comenzar
iniciar
mover
Informar(PosAv)
Informar(PosCa)
fin
Se informa por una ventana de Salida cual es la posición del robot, en la salida aparecen
los números 1, 2
Esto informa que el robot esta en la avenida 1 y calle 2 luego de moverse
TP de tareas del robot
Ej 1 Ubicar Manualmente 3 flores en las posiciones (1,4), (3,2) y (4,3). Luego el robot
debe recoger cada flor y cada vez que encuentre una flor debe informar su posición.
Ej 2 Ubicar Manualmente 7 flores en las posiciones (2,7), (3,1), (4,7), (4,6), (1,7), (3,6),
y (6,6). Luego el robot debe recoger cada flor y cada vez que encuentre una flor debe
informar su posición.
Ej 3 Ubicar Manualmente 5 papeles en las posiciones (2,7), (3,1), (4,7), (4,6), (1,7),
(3,6), y (6,6). Luego el robot debe recoger cada flor y cada vez que encuentre una flor
debe informar su posición.
Ej 4 Ubicar Manualmente 7 papeles en las posiciones (2,7), (3,1), (4,7), (4,6), (1,7),
(3,6), y (6,6). Luego el robot debe recoger cada flor y cada vez que encuentre una flor
debe informar su posición.
Ej 5Ubicar Manualmente 9 flores y papeles en las posiciones (2,7), (3,1), (4,7), (4,6),
(1,7), (3,6), (7,7), (7,1) y (6,6). Luego el robot debe recoger cada flor y papel y cada vez
que encuentre una flor o papel debe informar su posición.
Ej 6 Ubicar Manualmente 4 obstáculos en las posiciones (2,7), (3,1), (4,7) y (4,6).
Luego el robot debe esquivar cada obstáculo y cada vez que esquive debe informar su
posición.
Ej 7 Ubicar Manualmente 7 obstáculos en las posiciones (2,7), (3,1), (4,7), (4,6), (1,7),
(3,6), y (6,6). Luego el robot debe esquivar cada obstáculo y cada vez que esquive debe
informar su posición.
Condiciones Lógicas, el uso de la conjunción,
disyunción y negacion
Condiciones Lógicas. Proposiciones lógicas, simbolización y tablas de
verdad
Cuando se emplearon condiciones para definir las acciones a tomar en la selección y la
iteración, como ser HayPapelEnLaBolsa, esta es una condición simple pero en la
realidad las condiciones son compuestas y debe indicarse la forma en que pueden
combinarse varias condiciones. Los ejercicios vistos hasta el momento fueron lo
suficientemente simples como para poder ser resueltos con una pregunta sencilla. Sin
embargo, en un problema real, esto no es así y se requiere combinar expresiones para
poder representar una situación a evaluar. Por esta causa se introducirán y repasarán
algunos conceptos básicos de la lógica proposicional que permitirán clarificar este
aspecto, aplicados específicamente a problemas con el robot.
Dos de las estructuras de control ya vistas, selección e iteración, requieren para su
funcionamiento, la evaluación de una condición. Estas condiciones se corresponden con
lo que en términos de lógica se conoce como proposiciones.
Una proposición es una expresión de la cual tiene sentido decir si es verdadera o falsa, o
sea es posible asignarle un valor de verdad (verdadero o falso, pero no ambos).
Ejemplos de proposiciones
1 + 4 = 5 (Verdad)
La Pampa es una nación. (Falso)
Un triángulo es menor que un círculo. (No se le puede asignar un valor de verdad, por lo
tanto no es proposición)
El color azul vale menos que una sonrisa (ídem anterior)
Hay una flor en la esquina (será verdadero ó falso dependiendo de si la flor se encuentra
o no en la esquina)
1. Proposiciones atómicas y moleculares
En Lógica, el término atómico se utiliza con su significado habitual: “algo que no puede
ser dividido nuevamente”.
Una proposición es considerada atómica si no puede ser descompuesta en otras
proposiciones.
Ejemplos:
La casa es roja.
Hoy es lunes.
He llegado al final del recorrido.
Estoy ubicado a 3 metros de altura.
Cuando en una expresión se unen varias proposiciones atómicas se forma
una proposición molecular o compuesta. Dicha unión se realiza mediante conectivos
lógicos ó términos de enlace.
Estos términos de enlace son de gran importancia. Tanto es así, que se estudiarán
algunas reglas muy precisas para el uso de esta clase de términos.
Los términos de enlace a utilizar son los siguientes: “y”, “o”, “no”. Los dos primeros se
utilizan para conectar proposiciones atómicas; en tanto que el conectivo “no”, solamente
se coloca frente a una proposición atómica.
Ejemplos:
No es cierto que la luna esté hecha de queso verde.
La vaca está cansada y no dará leche.
Hace calor ó hay mucha humedad.
Hay papel en la bolsa y hay papel en la esquina.
Resumiendo:
Una proposición es atómica si no tiene conectivos lógicos, en caso contrario es
molecular.
2. Simbolización
Así como en matemática se simbolizan las cantidades para facilitar el planteo y solución
de problemas, también en este caso es importante simbolizar las proposiciones
atómicas, las moleculares y los conectivos lógicos con el objeto de facilitar las
operaciones.
Conectiv Simbolización en Visual Da Vinci
o
y &
o |
no ~
Tabla 1: Conectivos lógicos ó términos de enlace
Se utilizarán letras minúsculas para simbolizar las proposiciones atómicas:
Ejemplos de simbolización de proposiciones atómicas
Ayer fue un día ventoso.
Si se considera p = “ayer fue un día ventoso”, esta proposición puede ser simbolizada
como: p.
Ese pájaro vuela muy alto.
Si se llama q = “ese pájaro vuela muy alto”, la proposición se simboliza como: q.
PosCa < 100.
Si se llama r = “PosCa < 100”, la proposición se simboliza como: r.
A continuación se aplicará este mecanismo de simbolización a las proposiciones
moleculares.
El proceso para simbolizarlas consiste en:
1. Determinar cuáles son las proposiciones atómicas que la componen.
2. Simbolizar las proposiciones como se explicó anteriormente.
3. Unir las proposiciones con los conectivos ya vistos. Por tal motivo, debe definirse un
símbolo para cada uno de los conectivos. La tabla 1 muestra la simbolización a utilizar
en cada caso.
Ejemplos de simbolización de proposiciones moleculares
Juan es estudiante y es jugador de fútbol.
p = “Juan es estudiante”
q = “Juan es jugador de fútbol”
Simbolizando p & q
No es cierto que PosCa = 100.
p = “PosCa=100”
Simbolizando ~ p
Hay flor en la esquina y hay papel en la bolsa, o hay papel en la esquina.
p = “Hay flor en la esquina”
q = “hay papel en la bolsa”
r = “hay papel en la esquina”
Analicemos, para resolver correctamente el ejemplo anterior debe tenerse en cuenta la
aparición de la coma, la cual separa las dos primeras proposiciones de la tercera.
Cuando se obtiene la simbolización debe respetarse ese orden. Por lo tanto la
simbolización sería:
(p & q) | r
No hay flor en la bolsa, pero hay flor en la esquina.
p = “hay flor en la bolsa”
q = “hay flor en la esquina”
Simbolizando (~ p & q)
Notemos que la palabra pero actúa como el conectivo lógico “y”.
3 .Tablas de verdad.
Como se explicó previamente, una proposición es una expresión de la cual tiene sentido
decir si es verdadera o falsa.
Para poder analizar cualquier proposición molecular y decir qué valor de verdad tiene,
es usual hacerlo a través de lo que se conoce como tabla de verdad.
La tabla de verdad de una proposición es, como su nombre lo indica, una tabla donde se
muestran todas las combinaciones posibles de los valores de verdad de dicha
proposición.
3.1 Conjunción. Tabla de verdad
Dadas dos proposiciones cualesquiera p y q, la proposición molecular p & q representa
la conjunción de p y q.
La conjunción de dos proposiciones es cierta únicamente en el caso en que ambas
proposiciones lo sean.
Dadas dos proposiciones cualesquiera p y q, si ambas son verdaderas, entonces p &
q, que representa la conjunción de p y q, es verdadera. Cualquier otra combinación da
como resultado una proposición molecular falsa. La tabla 2.4 representa la tabla de
verdad de la conjunción p & q utilizando las cuatro combinaciones posibles de valores
de verdad para p y q. Por lo tanto, si p & q es una proposición verdadera entonces p es
verdadera y q también es verdadera. En Lógica se pueden unir dos proposiciones
cualesquiera para formar una conjunción. No se requiere que el contenido de una de
ellas tenga relación con el contenido de la otra.
p q p&q
V V V
V F F
F V F
F F F
Tabla 2: Conjunción (p & q)
Ejemplos:
6 es un número par y divisible por 3.
p = “6 es un numero par”
q = “6 es divisible por 3”
p es verdadera y q también, por lo tanto p & q es verdadera.
Suponiendo que el robot se encuentra situado en la esquina (1,1)
p = “PosCa=1”
q = “PosAv=2”
p es verdadera y q es falsa, por lo tanto p & q es falsa.
El siguiente ejemplo muestra la aplicación de la conjunción en un algoritmo:
Ejemplo 1: Hacer que el robot deposite, de ser posible, una flor en la esquina (4,4) en el
caso que en dicha esquina no haya flores.
programa Ejemplo1
{si en (4,4) no hay flor en esa esquina y hay flor en la bolsa depositar esa flor}
variables
p:boolean
q:boolean
comenzar
iniciar
Pos(4,4)
p:=HayFlorEnLaBolsa
q:=HayFlorEnLaEsquina
si ((p) & ~(q))
depositarFlor
fin
La selección utiliza la conjunción de dos proposiciones que, como se explicó
anteriormente, para ser verdadera necesitará que ambas proposiciones lo sean
simultáneamente. Esto es, basta con que una de ellas sea falsa para que no se deposite
una flor en la esquina.
3.2 Disyunción. Tabla de verdad
Dadas dos proposiciones cualesquiera p y q, la proposición molecular p | q representa la
disyunción de p y q.
La disyunción entre dos proposiciones es cierta cuando al menos una de dichas
proposiciones lo es.
La disyunción utiliza el término de enlace “o” en su sentido incluyente. Esto significa
que basta con que una de las dos proposiciones sea verdadera para que la disyunción sea
verdadera.
Dadas dos proposiciones cualesquiera p y q, su disyunción, p | q, será falsa cuando
ambas proposiciones sean falsas. La tabla 3 representa la tabla de verdad de la
disyunción p | q utilizando las cuatro combinaciones posibles de valores de verdad para
p y q.
p q p|q
V V V
V F V
F V V
F F F
Tabla 3: Disyunción (p v q)
Ejemplos
2 es primo o es impar
p = “2 es primo”
q = “2 es impar”
p es verdadera, q es falsa. Se deduce que p | q es verdadera
Suponiendo que el robot se encuentra situado en la esquina (1,1)
p = “PosCa=8”
q = “PosAv=2”
p es falsa, q es falsa. Se deduce que p | q es falsa.
El siguiente problema puede resolverse aplicando la disyunción:
Ejemplo 2: hacer que el robot se mueva desde la esquina (4,7) a la esquina (4,11) en el
caso que la esquina (4,7) no esté vacía (se considera no vacía a aquella esquina que
tiene al menos una flor o un papel).
programa Ejemplo2
{si en (4,7) hay flor o papel entonces se mueve a (4,11)}
variables
p:boolean
q:boolean
comenzar
iniciar
Pos(4,7)
p:=HayFlorEnLaEsquina
q:=HayPapelEnLaEsquina
si ((p) | (q))
repetir 4
mover
sino
Informar('Esquina vacia no me puedo mover')
fin
La selección utiliza la disyunción de dos proposiciones que, como se explicó
anteriormente, para ser verdadera solo requiere que una de ellas sea verdadera. Note que
si la esquina (4,7) tiene flor y papel, el robot avanza hasta la esquina (4,11). La única
forma de que el robot no avance es que la esquina esté vacía, sin flor ni papel.
3.3 Negación. Tabla de verdad
Dada una proposición p, su negación ~ p, permitirá obtener el valor de verdad opuesto.
El valor de verdad de la negación de una proposición verdadera es falso y el valor de
verdad de la negación de una proposición falsa es verdadero.
Dada una proposición p, la tabla 4 representa los posibles valores de verdad de dos
valores de verdad posibles de p.
p ~p
V F
F V
Tabla 4: Negación (~ p)
Ejemplos
p = “El número 9 es divisible por 3”
La proposición p es verdadera.
La negación de p es:
~ p = “El número 9 no es divisible por 3”
Se ve claramente que ~ p es falsa.
Suponiendo que el robot se encuentra situado en la esquina (1,1)
p = “PosCa=1”
La proposición p es verdadera.
La negación de p es: ~p= “~PosCa=1”.
Se deduce que ~p es falsa.
Ejemplo 3: el robot debe recorrer la calle 1 hasta encontrar una flor que seguro existe.
programa Ejemplo2
{el robot debe recorrer la calle 1 hasta encontrar una flor que seguro
existe.}
variables
p:boolean
comenzar
iniciar
derecha
p:=HayFlorEnLaEsquina
mientras ~p
mover
p:=HayFlorEnLaEsquina
fin
Note que la iteración utiliza la negación de la proposición atómica “hay flor en la
esquina” y que la misma proposición debe volver a evaluarse por cada esquina en que el
robot se mueve
De esta forma, el robot detendrá su recorrido cuando encuentre una flor.
3.4 Utilización del paréntesis
Es frecuente encontrar proposiciones que tienen más de un término de enlace. En estos
casos, uno de los términos de enlace es el más importante, o el término dominante,
porque actúa sobre toda la proposición.
El operador “~” es el que tiene mayor prioridad, es decir, es el que primero es evalúa;
seguido por “&” y “|”. Estos dos últimos poseen igual prioridad. Ante una expresión que
utilice varias conjunciones y/o disyunciones, se evaluaran de izquierda a derecha.
Lo mismo ocurre en Matemática. Si se considera la siguiente cuenta: “2 + 3 * 5”, el
resultado final, como es fácil de deducir, es 17.
La primera operación que se resuelve es el producto entre 3 y 5, y luego a su resultado
se le suma 2. Ocurre así porque el operando * (por), igual que el operando / (dividido),
se resuelve antes que el operando + (mas), o que el operando - (menos).
Dada la siguiente proposición p & ~ q, primero se resuelve la negación y luego la
conjunción.
En determinados casos se tiene la necesidad de alterar este orden natural de resolución.
Al igual que en matemática, el uso de paréntesis permite resolver este problema.
Ejemplo
~ p | q es una disyunción entre ~ p y q.
~ (p | q) es la negación de una disyunción.
En el ejemplo anterior se muestra la manera de convertir una disyunción en una
negación. Es decir, el operador de negación se resuelve en forma posterior a la
disyunción.