Crear programa de logica

Iniciado por $Edu$, 10 Septiembre 2011, 03:33 AM

0 Miembros y 1 Visitante están viendo este tema.

$Edu$

[(p>q).(q>r)]>(q>r)

V V V   V   V V V   V    V V V
F V V   V   V V V   V    V V V
V F F   F   F V V   V    F V V
F V F   V   F V V   V    F V V
V V v   F   V F F   V    V F F
F V v   F   V F F   V    V F F
V F F   F   F V F   V    F V F
F V F   V   F V F   V    F V F

ENTONCES EL RESULTADO ES:

V
V
V
V
V
V
V
V

LO QUE DEJA COMO UNA CONCLUSION VALIDA

Alguien sabe de esto? es logica que aprendi en filosofia, quiero hacer un programa que al yo introducir lo de arriba de todo me diga el resultado, es decir que termine el resultado en un array supongo.

Si alguien que sepa de esto se pone a pensar conmigo le agradezco mucho.

Yo ya se lo de los signos, cuando uno es verdadero y el otro falso y es el . entonces el resultado es falso, etc etc
Eso lo se, solo pido que me digan como lograrian a hacer el programa? solamente por arriba que me digan, pero pensando como lo codearian porque si me dicen:

"Haria los parentesis ( ) primero y luego los 2 primeros con el . y el resultado de eso con el otro termino que esta en parentesis que sacamos su resultado y lo hacemos con el > para obtener el final.

Si, bien pero con codigo? xDD y si por ejemplo pone esto: [(p>q)>(r>q)].[(p.r)>(p>q)] ??

Al que le guste esto y quiera ayudarme le agradezco!!

gracias!

[Case]

Esto es mas o menos difícil de programar, que conocimientos tienes?, yo lo programe en haskell hace tiempo tal vez te sirva. Si lo deseas ver me avisas.

$Edu$

fa no conozco ni ese lenguaje pero pasalo que talvez entiendo algo.

Y dices que es dificil, pero una vez que se logra la idea de como hacerlo lo otro es facil, a mi me falta el pensarlo xD yo no se mucho de programacion talvez pero ya hecho cosas asi parecidas aunque talvez no tanto, hace poco hice un programa que el usuario ingresaba una ecuacion desordenada como: 2x+8(4+3x(5+x)-4+3x)-10=45x-32x^2+48x-10 por ejemplo y te hallaba X , talvez puedo usar algun procedimiento que hice para eso pero necesito ayuda para pensar como hacerlo, es decir yo ya tengo creado 2 funciones, uno que recibira "(p>r)" por ejemplo y separa las preposiciones y el signo en arrays y un string para el simbolo y luego manda eso como parametro para la otra funcion que hace la "operacion" para devolver el resultado en un array.

Pero tengo problemas en como llegar a tomar esos datos de los parentesis, y como guardarme cuando ya hice 3 resultados por ejemplos, como saber cual de esos tendra que operarse con cual :/

Pasame el codigo y si me puedes explicar por arriba mejor ;)

[Case]

Haskell es un lenguaje funcional, por lo tanto lo único que implemente son funciones, nada de cosas imperativas.

$Edu$

Bueno pero lo muestras o me explicas? o sino que fue lo que hiciste vs? xD

Valkyr

Las "ecuaciones" lógicas, puesto que siguen una sintaxis podría considerarse como un lenguaje de programación. Podrías hacer uso de Flex y Bison. Son dos programas que sirven para crear tu propio compilador, es algo complejo y tendrías que leer algún buen manual, pero me imagino que los resultados serían bastante buenos.

También, por supuesto, se podrá realizar un programa que examine para ver si todo es correcto y la "interprete" pero me imagino que también será algo difícil.

Saludos.

$Edu$

Pero no se ahoguen en un vaso de agua como estoy haciendo yo xD, si se toma la ecuacion como string no se podria capturar lo que esta entre los parentesis, guardar resultados en arrays, etc? algo asi quiero hacerlo simplemente, solo que no logro encontrar el algoritmo que funcione para todo tipo de ecuacion.

Valkyr

Lo más complicado me parece a mi que sería dar preferencia a lo que está entre corchetes, evaluarlo primero y luego evaluar el resto de la expresión.

Con expresiones regulares se podría hacer fácilmente. Supongo que también habría que comprobar que la ecuación es correcta, es decir, que no le faltan o le sobran paréntesis o corchetes.

$Edu$

Es dificil porque son muy distintas las formas que podra poner el usuario, pero yo tengo codigo que saque de mi proyecto de las ecuaciones q dije anteriormente y logro hacer que cuando la ecuacion es:

[(p>q).(q>r)]>(q>r)

me crea una lista de esta forma:

>
.
p>q
q>r
q>r

Pero no se como seguir desde ahi, esque una vez que tengo la operacion de (p>q).(q>r) no se donde guardarla para luego hacer esa con q>r y con el >

Pero seguire intentando, gracias por ayudar y si tienes otra idea perfecto :P


Y para los que no sepan de que es esto, simplemente imaginense un programa que te pida que ingreses una ecuacion del tipo:

[(3+4)*(4+5)]+(4+5)

Y sacar el resultado final, pero no haciendo distributivas ni nada, solo que el programa tome los numeros 3+4, tome el 4+5, tome el 4+5 otra vez porque pueden ser otros numeros.
Y luego mande a un procedimiento para que haga la primer suma, luego la segunda suma y a esos valores los multiplique. Y luego ese resultado lo sume con el resultado de lo otro.

$Edu$

He estado pensando en si podria ser mas facil si lo uso como deberia, es decir que:

p == 10101010
q == 11001100
r ==  11110000

Y entonces en la programacion haria el uso de operadores logicos y listo. En vez de:

p.q haria P and Q

Pero.. no se como hacer que me tome el resultado ni tampoco se por ejemplo en > que seria el Entonces, ni otros, pero quiero saber si seria mejor hacerlo asi como digo.