domingo, 7 de noviembre de 2010

Prolog-Laboratorio

Hola compañeros para la semana de Lenguajes lógicos de laboratorio voy a realizar dos programas en Prolog que ví en mi materia de matemáticas discretas:

El primero:

¿Qué persona es cuñado de quién? Si se tienen los siguientes parentescos:
Pedro es hermano de Luis,
Luis es el esposo de Ana,
Antonio es el esposo de Elsa y
Juan es el hermano de Luis,
Carlos es el hermano de Juan,
Elsa es hermana de Luis y
Elsa es esposa de Antonio.

Bueno el problema esta un poquito confuso por tantos parentescos pero basta con hacer un arbolito para despejar dudas :D:

Analizando:

Por hermanos
Pedro es hermano de Luis,
Juan es el hermano de Luis,
Carlos es el hermano de Juan,
Elsa es hermana de Luis (Elsa tambien es hermana de Pedro, juan y Carlos)

Por esposos
Luis es el esposo de Ana,
Antonio es el esposo de Elsa y
Elsa es esposa de Antonio.

Para encontrar los cuñados se sabe que si tenemos cuñados "a", "c" , "a" debe de tener un esposo que es "b", y "b" tiene un hermano "c" que será el cuñado de "a".

cuñados(a,c):-esposo(b,a),hermano(b,c).
Este es mi código en prolog:

%hermano(A,B)
hermano(luis,pedro).
hermano(luis,juan).
hermano(luis,carlos).
hermano(luis,elsa).
hermano(juan,carlos).
hermano(elsa,luis).
hermano(elsa,pedro).
hermano(elsa,juan).
hermano(elsa,carlos).

%esposo(A,B)
esposo(luis,ana).
esposo(elsa,antonio).

cunados(A,C):-esposo(B,A),hermano(B,C).


Resultado:
Tenemos que Ana es cuñada de Pedro, Juan, Carlos y Elsa y Antonio es cuñado de Pedro, Luis, Juan y Carlos. Y estas son todas las combinaciones que me da el programa:


El segundo:

Un estudiante de ingeniería piensa lo siguiente:
Si estudio aprobaré el examen de cálculo integral, pero si hago la tarea también. El estudiante quiere realizar las dos cosas y piensa estudiaré o hare la tarea. Demuestre que cualquiera de las dos decisiones le ayudará a aprobar el examén de cálculo integral.

En este problema es muy fácil plantear la tabla de verdad puesto que tenemos 4 combinaciones posibles, el mismo problema me dice que si estudia aprueba, si hace la tarea aprueba, y si hace las dos estudiar y la tarea tambien aprueba, entonces la única manera de que repruebe es que ni estudie ni haga la tarea, esta relación se representa por medio del operador lógico OR "o" o "v", bueno la tabla de verdad queda de la siguiente forma:

T = Tarea
E = Estudia
V ="VERDADERO"
F = "FALSO"

E v T Resultado
V o V V
V o F V
F o V V
F o F V

Ese es el razonamiento del problema con su código en prolog que cuando escribimos algunas de las posibilidades el programa me dice ciero o falso si esque aprueba o no:
pasa(est,tar).
pasa(est,notar).
pasa(noest,tar).
p_exam(X,Y):-pasa(X,Y).

Y la captura de pantalla:



Con el primero problema lógico no batalle nada, pero para este último no estoy del todo segura de que mi código sea correcto, tarde mucho pero no se de que otra forma plantearlo espero comenten y me puedan ayudar con el :D

1 comentario: