Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Ayuda tp logico
Autor Mensaje
Andres_utn En línea
Militante
Sin estado :(
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 59
Agradecimientos dados: 21
Agradecimientos: 0 en 0 posts
Registro en: Apr 2014
Mensaje: #1
Ayuda tp logico Trabajo practico Paradigmas de Programación
buenas a todos, estoy totalmente bloqueado con el tp de paradigmas, seguro es una boludes, pero hace horas que le doy vueltas y no le encuentro la solucion.

yo tengo en mi base

esta(posicion(1,4),saiyajin(goku,8)).
esta(posicion(3,1),terricola(roque)).
esta(posicion(3,2),terricola(bulma)).
esta(posicion(3,2),monstruo(piccolo,34)).
esta(posicion(2,4),saiyajin(gohan,3)).
esta(posicion(4,3),monstruo(cell,17)).

aliado(goku,gohan).
aliado(goku,bulma).
aliado(roque,goku).
aliado(piccolo,cell).

necesito hacer "sonAliados(saiyajin(goku,8), terricola(bulma))." y que me de true

lo que hice hasta ahora fue unificar guerrero.

guerrero(Guerrero) :- guerrero(Guerrero) :- esta(_,Guerrero).

pero el problema es que aliado solo acepta el nombre que esta en el functor pero sonAliados necesita el functor

sonAliados(Guerrero1,Guerrero2) :- guerrero(Guerrero1), guerrero(Guerrero2), aliados(,). ahi en aliados nose como armarlo.

Si alguno me puede dar una mano agradecidisimo.

Saludos
02-05-2015 20:50
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Motomine Sin conexión
Militante
Sin estado :(
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 61
Agradecimientos dados: 10
Agradecimientos: 14 en 9 posts
Registro en: Feb 2012
Facebook
Mensaje: #2
RE: Ayuda tp logico
Hola!

Lo que podes hacer es algo asi: en sonAliados/2 recibis los functores, pero el predicado aliado relaciona los nombres. Lo que tenes que buscar es que consigas el nombre de la persona independientemente del planeta de origen. Podes pensarlo haciendo estos predicados:

nombre(sayajin(Nombre,_),Nombre).
nombre(terricola(Nombre),Nombre).
nombre(monstruo(Nombre,_),Nombre).

Ese es el viejo y querido polimorfismo, relaciona a una persona independientemente de su origen con su nombre. Despues podes plantear el problema que te piden resolver:

sonAliados(Aliado1, Aliado2):- guerrero(Aliado1), guerrero(Aliado2), nombre(Aliado1,Nombre1), nombre(Aliado2,Nombre2), aliado(Nombre1, Nombre2).

Simplemente se generan a los functores, se obtienen los nombres y luego corrobora que sean aliados entre si con el predicado que ya tenes. No es necesario que pienses la reciprocidad en aliado/2, ya que en algun momento los va a generar de la forma en la que esta en la base de conocimientos.

Espero que te sirva!

Saludos!
02-05-2015 23:00
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Motomine recibio 2 Gracias por este post
Andres_utn (03-05-2015), tofa (06-05-2015)
lucas_lucas Sin conexión
Campeon del cubo Rubik
||| + |
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 107
Agradecimientos dados: 73
Agradecimientos: 24 en 19 posts
Registro en: Jul 2013
Mensaje: #3
RE: Ayuda tp logico
Hola, primero deberias definir predicados para tratar a terricola,monstruo y saiyajin de la misma forma y despues es como lo estabas haciendo, asi:

guerrero(Guerrero) :- esta(_,saiyajin(Guerrero,_)).
guerrero(Guerrero) :- esta(_,terricola(Guerrero)).
guerrero(Guerrero) :- esta(_,monstruo(Guerrero,_)).

sonAliados(Guerrero1,Guerrero2) :- guerrero(Guerrero1), guerrero(Guerrero2), aliado(Guerrero1,Guerrero2), Guerrero1 \= Guerrero2.
---

ah, la consulta con el functor seria como dijeron arriba, mi consulta es solo por el nombre
(Este mensaje fue modificado por última vez en: 23-05-2015 23:03 por lucas_lucas.)
02-05-2015 23:09
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] lucas_lucas recibio 1 Gracias por este post
Andres_utn (03-05-2015)
Andres_utn En línea
Militante
Sin estado :(
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 59
Agradecimientos dados: 21
Agradecimientos: 0 en 0 posts
Registro en: Apr 2014
Mensaje: #4
RE: Ayuda tp logico
me fume el apunto del ceit que andaba digitalizado por ahi, y entendi lo que querias decir con eso y funciono joya!!

Mil gracias!!!!

Saludos
03-05-2015 14:11
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Raziel_yo Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 13
Agradecimientos dados: 17
Agradecimientos: 7 en 2 posts
Registro en: Feb 2012
Mensaje: #5
RE: Ayuda tp logico
Consulta sobre el mismo TP.

el punto 6 dice "TodosExceptoUno/1: dado un conjunto de guerreros determinar si todos están felices
excepto uno. No es inversible."

Mi consulta es como hacer para trabajar con un conjunto de guerreros. Entiendo que la consulta es de esta forma:

todosExceptoUno([Guerrero,Guerrero2,Guerrero3]). Donde Guerrero puede ser alguno de los funtores.

Para trabajar con varios valores tengo que crear una estructura de lista estilo [cab|Cola] ?, o hay una forma de que tome los valores de la lista uno por uno. A partir de este punto a varios similares por lo que estoy algo trabado con esto. Cualquier ayuda se agradece.
08-05-2015 17:08
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Martin. Sin conexión
Presidente del CEIT
Enjoy it !
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.353
Agradecimientos dados: 85
Agradecimientos: 241 en 125 posts
Registro en: Oct 2011
Mensaje: #6
RE: Ayuda tp logico
Si vos sabes que todos tienen que estar felices excepto uno, no te basta con generar una lista con todos los guerreros tristes y validar si su longitud es 1? (si es uno quiere decir que todos están felices excepto ese).
Para ello podrías hacer un findall.

[Imagen: jQJfyBGh9SOmZ.png]
08-05-2015 17:32
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Raziel_yo Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 13
Agradecimientos dados: 17
Agradecimientos: 7 en 2 posts
Registro en: Feb 2012
Mensaje: #7
RE: Ayuda tp logico
Esa solución no la toman como valida porque dicen que es estructurada y no declarativa.

La termine haciendo de la siguiente manera.

todosExceptoUno(Guerreros):- member(Guerrero,Guerreros), not(guerreroFeliz(Guerrero)),
forall((guerreroFeliz(Otroguerrero),Guerrero \= Otroguerrero),member(Guerrero,Guerreros)).

Lo que hace es buscar en la lista de guerreros un guerrero que no sea feliz, y después buscar que todos los guerreros sean felices siempre y cuando no sean el que no era feliz.
13-05-2015 12:41
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
alvar Sin conexión
Secretario de la SAE
:D
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 640
Agradecimientos dados: 41
Agradecimientos: 37 en 31 posts
Registro en: Feb 2012
Mensaje: #8
RE: Ayuda tp logico
(02-05-2015 20:50)Andres_utn escribió:  buenas a todos, estoy totalmente bloqueado con el tp de paradigmas, seguro es una boludes, pero hace horas que le doy vueltas y no le encuentro la solucion.

yo tengo en mi base

esta(posicion(1,4),saiyajin(goku,8)).
esta(posicion(3,1),terricola(roque)).
esta(posicion(3,2),terricola(bulma)).
esta(posicion(3,2),monstruo(piccolo,34)).
esta(posicion(2,4),saiyajin(gohan,3)).
esta(posicion(4,3),monstruo(cell,17)).

aliado(goku,gohan).
aliado(goku,bulma).
aliado(roque,goku).
aliado(piccolo,cell).

necesito hacer "sonAliados(saiyajin(goku,8), terricola(bulma))." y que me de true

lo que hice hasta ahora fue unificar guerrero.

guerrero(Guerrero) :- guerrero(Guerrero) :- esta(_,Guerrero).

pero el problema es que aliado solo acepta el nombre que esta en el functor pero sonAliados necesita el functor

sonAliados(Guerrero1,Guerrero2) :- guerrero(Guerrero1), guerrero(Guerrero2), aliados(,). ahi en aliados nose como armarlo.

Si alguno me puede dar una mano agradecidisimo.

Saludos

El punto 7 como solucionaste la parte del aliado, porque cuando queria unir las esferas me sale "false" si 1 de los 2 no tiene esferas. Pero si los 2 tienen esferas me anda bien.

unir([ ],L2,L2).
unir(L1,[ ],L1).
unir([X|R],L2,[X|Z]):-unir(R,L2,Z).

puedeConseguirAux(Guerrero,Esferas):-guerrero(Guerrero),forall(esta(Posicion,Guerrero),esta(Posicion,esfera(Esfera))),
findall(Esfera,(esta(Posicion,Guerrero),esta(Posicion,esfera(Esfera))),Esferas).

puedeConseguir2(Guerrero1,Esferas):-guerrero(Guerrero1),guerrero(Guerrero2),sonAliados(Guerrero1,Guerrero2),puedeConseguirAux(Guerrero1,Esferas1),puedeConseguirAux(Guerrero2,Esferas2),
unir(Esferas1,Esferas2,Esferas).

Spoiler: Mostrar
[Imagen: Hamster-shot-plays-dead.gif]
21-05-2015 12:14
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
alealpedo Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1
Agradecimientos dados: 1
Agradecimientos: 1 en 1 posts
Registro en: Jun 2011
Mensaje: #9
RE: Ayuda tp logico
(21-05-2015 12:14)alvar escribió:  
(02-05-2015 20:50)Andres_utn escribió:  buenas a todos, estoy totalmente bloqueado con el tp de paradigmas, seguro es una boludes, pero hace horas que le doy vueltas y no le encuentro la solucion.

yo tengo en mi base

esta(posicion(1,4),saiyajin(goku,8)).
esta(posicion(3,1),terricola(roque)).
esta(posicion(3,2),terricola(bulma)).
esta(posicion(3,2),monstruo(piccolo,34)).
esta(posicion(2,4),saiyajin(gohan,3)).
esta(posicion(4,3),monstruo(cell,17)).

aliado(goku,gohan).
aliado(goku,bulma).
aliado(roque,goku).
aliado(piccolo,cell).

necesito hacer "sonAliados(saiyajin(goku,8), terricola(bulma))." y que me de true

lo que hice hasta ahora fue unificar guerrero.

guerrero(Guerrero) :- guerrero(Guerrero) :- esta(_,Guerrero).

pero el problema es que aliado solo acepta el nombre que esta en el functor pero sonAliados necesita el functor

sonAliados(Guerrero1,Guerrero2) :- guerrero(Guerrero1), guerrero(Guerrero2), aliados(,). ahi en aliados nose como armarlo.

Si alguno me puede dar una mano agradecidisimo.

Saludos

El punto 7 como solucionaste la parte del aliado, porque cuando queria unir las esferas me sale "false" si 1 de los 2 no tiene esferas. Pero si los 2 tienen esferas me anda bien.

unir([ ],L2,L2).
unir(L1,[ ],L1).
unir([X|R],L2,[X|Z]):-unir(R,L2,Z).

puedeConseguirAux(Guerrero,Esferas):-guerrero(Guerrero),forall(esta(Posicion,Guerrero),esta(Posicion,esfera(Esfera))),
findall(Esfera,(esta(Posicion,Guerrero),esta(Posicion,esfera(Esfera))),Esferas).

puedeConseguir2(Guerrero1,Esferas):-guerrero(Guerrero1),guerrero(Guerrero2),sonAliados(Guerrero1,Guerrero2),puedeConseguirAux(Guerrero1,Esferas1),puedeConseguirAux(Guerrero2,Esferas2),
unir(Esferas1,Esferas2,Esferas).

El 7 yo lo hice asi :

consigue(Guerrero,Esfera):- esta(Posicion,Guerrero),esta(Posicion,esfera(Esfera)),Guerrero\=esfera(_).
consigue(Guerrero,Esfera):- esta(Posicion,Guerrero2),esta(Posicion,esfera(Esfera)),sonAliados(Guerrero2,Guerrero).

puedeConseguir(Guerrero,Esferas):- guerrero(Guerrero),
findall(Esfera,consigue(Guerrero,Esfera),Lista),
sinRepetidos(Lista,Esferas).

sinRepetidos([],[]).
sinRepetidos([Cab|Cola],Lista):-member(Cab,Cola),sinRepetidos(Cola,Lista).
sinRepetidos([Cab|Cola],[Cab|Cola1]):-sinRepetidos(Cola,Cola1).

Genere una lista que reciba todo junto (las esferas que consigue un guerrero y las que consigue su aliado). Después un sinRepetidos/2 para quitar los elementos repetidos. Anteriormente había hecho 2 listas (la lista 1 para las esferas del guerrero y la lista 2 para las esferas del aliado), después las concatenaba con unirSinRepeticion/3, pero me lo bocharon aclarándome que estaba usando una lista de mas.
Si algún alma caritativa encuentra errores bienvenido sea!
Y buen, espero que esto sea de ayuda. Saludoss
21-05-2015 19:26
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] alealpedo recibio 1 Gracias por este post
alvar (25-05-2015)
alvar Sin conexión
Secretario de la SAE
:D
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 640
Agradecimientos dados: 41
Agradecimientos: 37 en 31 posts
Registro en: Feb 2012
Mensaje: #10
RE: Ayuda tp logico
Tengo dudas con el punto 8 y no se como plantear el 9.

8)
guerrero(G):-esta(_,G),G\=esfera(_).

recorrer1(Pos,Nombre):-guerrero(Guerrero),findall(Posicion,(puedeMoverse(Guerrero,Terreno),tipoDeTerreno(Posicion,Terreno)),Pos),nombre(Guerrero,Nombre).

recorrer2(Pos,Nombre):-guerrero(Guerrero),findall(Posicion,esta(Posicion,Guerrero),Pos),nombre(Guerrero,Nombre).

puedeRecorrer(Pos,Nombre):-guerrero(Guerrero),nombre(Guerrero,Nombre),recorrer1(Pos1,Nombre),recorrer2(Pos2,Nombre),append(Pos1,Pos2,Pos).

al consultar

puedeRecorrer(Pos,Nombre).

me sale todos las posiciones de cada guerrero, pero al consultar alguna posicion en concreto para el guerrero, siempre me sale false.

Agradeceria su ayuda

Spoiler: Mostrar
[Imagen: Hamster-shot-plays-dead.gif]
25-05-2015 16:04
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
alvar Sin conexión
Secretario de la SAE
:D
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 640
Agradecimientos dados: 41
Agradecimientos: 37 en 31 posts
Registro en: Feb 2012
Mensaje: #11
RE: Ayuda tp logico
Agradecería una mano

Spoiler: Mostrar
[Imagen: Hamster-shot-plays-dead.gif]
26-05-2015 21:44
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Exequiel Delgado Sin conexión
Militante
Trabajando
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 83
Agradecimientos dados: 10
Agradecimientos: 13 en 3 posts
Registro en: Dec 2012
Mensaje: #12
RE: Ayuda tp logico
El punto 1 pide que sea Simetrico, osea que si A es aliado de B entonces B es aliado de A.
Como hiciste para que pase eso?

El Universo es tan grande como tu Imaginación lo crea, por eso, Abre tu Mente a las posibilidades
27-05-2015 21:38
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Andres_utn En línea
Militante
Sin estado :(
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 59
Agradecimientos dados: 21
Agradecimientos: 0 en 0 posts
Registro en: Apr 2014
Mensaje: #13
RE: Ayuda tp logico
en el punto 7 no te aceptan el sin repetidos, yo hice lo mismo, arme la lista y despues use una funcion para borrar los repetidos de la lista y no le gusto, como casi los 9 puntos del tp en todos tenia algo que acotar o decir.

el punto 8 lo hice asi y me dijo que estaba bien.

puedenRecorrer(Posiciones,Nombre) :- guerrero(Guerrero,Nombre), not(((member(Posicion,Posiciones), tipoDeTerreno(Posicion,Terreno)),not(puedeMoverse(Guerrero,Terreno)))).


alguien hizo el guerreroestafeliz/1 lo hice pero me da que nadie es feliz??
(Este mensaje fue modificado por última vez en: 31-05-2015 12:51 por Andres_utn.)
28-05-2015 09:26
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.