30 Septiembre 2014, 07:52:54 pm

Autor Tema: Programa que construye tablas de verdad de proposiciones logicas.  (Leído 19794 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado csaralg

  • Me das tu IP?
  • *
  • Mensajes: 58
  • Puntos: +0/-0
  • Sexo: Masculino
  • http://alguienenlafisi.blogspot.com
    • Ver Perfil
    • Alguien en la FISI
Hola, seguro todos conocen las proposiciones lógicas... si esa vaina de: "Estudio o no apruebo matemática discreta. Voy al cine si y solo si no estudio. Si no voy al cine me pierdo el estreno. Ni loco me pierdo el estreno." Conclusión...  "No apruebo matemática discreta."  :(

Bueno eso mismo se puede expresar formalmente por medio de proposiciones:

Sean las variables (proposiciones):

e = Estudio
a = apruebo matemática discreta
c = voy al cine
p = me pierdo el estreno

[EDITADO, puedes saltarte esto si quieres...]

Cada variable puede tomar un valor de verdad que puede ser V (verdadero) o F (falso). Además podemos formar proposiciones mas complejas usando los operadores o conectivos lógicos que son:

NEGACION (~p) : Invierte el valor de la variable p. Se lee: No es cierto que p; o tambien: No p
CONJUNCION (p ^ q) : Es verdadero únicamente cuando p y q son verdaderos. Se lee: p y q
DISYUNCION (p v q) : Es falso únicamente cuando p y q son falsos. Se lee: p o q
IMPLICACION (p --> q) : Es falso únicamente cuando p es verdadero y q es falso. Se lee: p implica q; o tambien: Si p entonces q
BICONDICIONAL (p <--> q) : Es verdadero cuando p y q tienen el mismo valor de verdad (ambos falsos o ambos verdaderos). Se lee: p si y solo si q;

Ahora si usamos las variables que definimos para formalizar el enunciado inicial tenemos: (formalizamos oración por oración)

1. Estudio o no apruebo matemática discreta.  =  (e v ~a)
2. Voy al cine si y solo si no estudio. = (c <--> ~e)
3. Si no voy al cine me pierdo el estreno. = (~c --> p)
4. Ni loco me pierdo el estreno. =  (~p)

Ahora, el valor de verdad de cada una de estas proposiciones compuestas dependerá de los valores de sus variables. Si ordenamos en una tabla todas las posibles combinaciones de los valores de sus variables  y los evaluamos obtendremos la tabla de verdad de la proposición compuesta. Por ejemplo para la proposición 1:

Código: Registrate para ver este link. Registrate ó Login
e a | ( e v ~ a )

V V |   V V F V  
V F |   V V V F  
F V |   F F F V  
F F |   F V V F  

Hay que tener presente que hay un orden para evaluar una proposición. Primero se resuelven los paréntesis mas anidados. Luego la negación. Después las conjunciones y disyunciones. Luego las implicaciones y finalmente las bicondicionales. El operador que se resuelve al final se denomina de máxima jerarquía y es el que resume el valor de verdad de toda la proposición. En el ejemplo el operador de máxima jerarquía es la disyunción y se puede observar que la proposición sera falsa únicamente cuando "e" es falso y "a" es verdadero. Es decir cuando apruebe sin estudiar :P

Ahora podemos usar las proposiciones 1, 2, 3 y 4 para construir una inferencia. Una inferencia es cuando a partir de un conjunto de premisas (proposiciones que se asumen verdaderas) se llega a demostrar que otra proposición llamada conclusión es también verdadera. Ejemplo: Sean las premisas P1, P2 y P3 y la conclusión C construimos la inferencia:

(P1 ^ P2 ^ P3) --> C

Si la inferencia es correcta, al resolverse, la implicación debe ser siempre verdadera. Cuando una proposición es siempre verdadera se dice que es una "tautología".

En el enunciado inicial mi conclusión era: "No apruebo matemática discreta." entonces mi inferencia quedaría así:

( (e v ~a) ^ (c <--> ~e) ^ (~c --> p) ^ (~p) ) --> ~a

Para demostrar si la inferencia es correcta y por tanto mi conclusión es valida. Debo construir la tabla de verdad de toda esa expresión y revisar si es una tautología. Pero... como que esta algo grande no?  :o

Bueno aquí es donde entra en juego el programa que pondré a continuación pues sirve para construir la tabla de verdad de cualquier proposición lógica (o al menos esa es la idea  :D).

[FIN EDITADO]

Los operadores lógicos los representare como:

!         NEGACION ( NO )
&        CONJUNCION ( Y )
|         DISYUNCION ( O )
:         IMPLICACION ( ENTONCES )
=        BICONDICIONAL ( SI Y SOLO SI )
( )       PARENTESIS

Se considera una proposición cualquier caracter diferente de los operadores. Se puede usar espacios en blanco mientras se escribe la proposición de todos modos son suprimidos al leer la entrada.

El ejemplo anterior se representaría así:

Código: Registrate para ver este link. Registrate ó Login
( ( e | ! a ) & ( c = ! e ) & ( ! c : p ) & ( ! p ) ) : ! a
Y la salida seria:

Código: Registrate para ver este link. Registrate ó Login
e a c p | ( ( e | ! a ) & ( c = ! e ) & ( ! c : p ) & ( ! p ) ) : ! a

V V V V |     V V F V   F   V F F V   F   F V V V   F   F V     V F V
V V V F |     V V F V   F   V F F V   F   F V V F   F   V F     V F V
V V F V |     V V F V   V   F V F V   V   V F V V   F   F V     V F V
V V F F |     V V F V   V   F V F V   F   V F F F   F   V F     V F V
V F V V |     V V V F   F   V F F V   F   F V V V   F   F V     V V F
V F V F |     V V V F   F   V F F V   F   F V V F   F   V F     V V F
V F F V |     V V V F   V   F V F V   V   V F V V   F   F V     V V F
V F F F |     V V V F   V   F V F V   F   V F F F   F   V F     V V F
F V V V |     F F F V   F   V V V F   F   F V V V   F   F V     V F V
F V V F |     F F F V   F   V V V F   F   F V V F   F   V F     V F V
F V F V |     F F F V   F   F F V F   F   V F V V   F   F V     V F V
F V F F |     F F F V   F   F F V F   F   V F F F   F   V F     V F V
F F V V |     F V V F   V   V V V F   V   F V V V   F   F V     V V F
F F V F |     F V V F   V   V V V F   V   F V V F   V   V F     V V F
F F F V |     F V V F   F   F F V F   F   V F V V   F   F V     V V F
F F F F |     F V V F   F   F F V F   F   V F F F   F   V F     V V F

Si se observa la salida debajo del ultimo ":" que representa la conclusión es todo V (verdadero) por lo tanto la proposición resulta una tautología y la conclusión es valida.

Bueno, gracias por leer. Espero sus comentarios, por favor si alguien encuentra un error coméntelo que este programa tengo que presentarlo la próxima semana al profe de mate discreta y si esta mal... saquen sus conclusiones... ;D

Hasta luego, saludos.

Código: Registrate para ver este link. Registrate ó Login
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define LMAX 100

//DECLARACION DE PROTOTIPOS

int leer_entrada(char *prop);
int max_precedencia(char *prop, int ini, int fin);
int precedencia(char c);
bool validar_sintaxis(char *prop, int ini, int fin);
bool evaluar_proposicion(char *prop, bool *vals, char *vars, char *resp, int ini, int fin);
int buscar_variables(char *prop, char *vars);


//PROGRAMA PRINCIPAL

int main() {
char prop[LMAX];
char *vars;
char *resp;
bool *vals;


printf("Este programa construye la tabla de verdad de una exprecion logica.\n");
printf("Los operadores logicos validos son:\n\n");
printf("\"!\"\tNEGACION\n");
printf("\"&\"\tCONJUNCION\n");
printf("\"|\"\tDISYUNCION\n");
printf("\":\"\tIMPLICACION\n");
printf("\"=\"\tBICONDICIONAL\n\n");
printf("Puede usar expreciones anidadas con parentesis.\n\n");

printf("EXPRECION> ");
int n = leer_entrada(prop);

resp = new char[n];
vars = new char[n];
vals = new bool[n];
for(int i=0; i<n; i++) {
resp[i] = ' ';
vars[i] = '\0';
vals[i] = false;
}
resp[n-1] = '\0';

if(validar_sintaxis(prop, 0, n)) {
int nvars = buscar_variables(prop, vars);
int reps = (int)pow(2, nvars);

        printf("\n");
for(int i=0; i<nvars; i++)
printf("%c ", vars[i]);
printf("| ");
for(int i=0; i<n; i++)
printf("%c ", prop[i]);
printf("\n\n");
for(int i=0; i<reps; i++) {
for(int j=0; j<nvars; j++) {
if(i%(int)pow(2, nvars-j-1) == 0) {
vals[j] = !vals[j];
}
if(vals[j]) printf("V "); else printf("F ");
}
printf("| ");
evaluar_proposicion(prop, vals, vars, resp, 0, n);
for(int j=0; j<n; j++)
printf("%c ", resp[j]);
printf("\n");
}
}
else {
printf("ERROR LA SINTAXIS DE LA EXPRECION ES INCORRECTA.\n");
}
    system("pause>nul");
return 0;
}


//IMPLEMENTACION DE FUNCIONES

/*
Lee una exprecion por teclado anulando los espacios en blanco y devuelve el
numero de caracteres que conforman la exprecion.
*/
int leer_entrada(char *prop) {
char c; int i=0;
while((c=getchar()) != '\n' && i < (LMAX-1))
if(c!=' ')
prop[i++] = c;
prop[i] = '\0';
return i;
}

/*
Busca dentro de una exprecion el operador que tiene mayor precedencia, es decir,
el que se resolvera al final y devuelve su indice dentro de la exprecion.
*/
int max_precedencia(char *prop, int ini, int fin) {
int npar=0, prec=0, anid=0, index=0;
bool prim=true;
for(int i=ini; i<fin; i++) {
if(prop[i] == '(') {
npar++;
}
else if(prop[i] == ')') {
npar--;
}
else {
if(npar<0) return -1; //error de sintaxis
int p = precedencia(prop[i]);
if(prim) {
anid = npar;
prec = p;
index = i;
prim = false;
continue;
}
if(npar<anid) {
anid = npar;
prec = p;
index = i;
}
else if(anid==npar) {
if(p>prec) {
prec = p;
index = i;
}
else if(p==prec) {
if(prop[index] != prop[i])
return -1; //error de doble interpretacion
if(prop[index] != '!')
index = i;
}
}
}
}
if(npar != 0 || prim) return -1; //error de sintaxis
return index;
}

/*
Esta funcion recibe un caracter por parametro y devuelve un entero de 0 a 4 que
representa la precedencia del operador. Los operadores con menor precedencia
se resuelven primero y los que tienen mayor precedencia se resuelven al final.
*/
int precedencia(char c) {
switch(c) {
case '!': return 1; //negacion
case '&': return 2; //conjuncion
case '|': return 2; //disyuncion
case ':': return 3; //implicacion
case '=': return 4; //bicondicional
}
return 0;
}

/*
Esta funcion se encarga de validar la sintaxis de una exprecion de forma recursiva
usando la siguiente definicion:

P ::= p / (!P) / (P&Q) / (P|Q) / (P:Q) / (P=Q)

Devuelve verdadero si la proposicion cumple la definicion y falso si no.
*/
bool validar_sintaxis(char *prop, int ini, int fin) {
int index = max_precedencia(prop, ini, fin);
if(index == -1) return false;
if(prop[index] == '!') {
int npar=0, i=index+1, f;
for(f=i; f<fin; f++) {
if(prop[f]=='(') {
npar++;
}
else if(prop[f]==')') {
npar--;
if(npar<0) break;
}
}
return validar_sintaxis(prop, i, f);
}
else if(prop[index]=='&' || prop[index]=='|' || prop[index]==':' || prop[index]=='=') {
int npar=0, i, f=index;
bool p, q;
for(i=f-1; i>=ini; i--) {
if(prop[i]==')') {
npar++;
}
else if(prop[i]=='(') {
npar--;
if(npar<0) break;
}
}
p = validar_sintaxis(prop, i+1, f);
npar=0; i=index+1;
for(f=i; f<fin; f++) {
if(prop[f]=='(') {
npar++;
}
else if(prop[f]==')') {
npar--;
if(npar<0) break;
}
}
q = validar_sintaxis(prop, i, f);
return (p && q);
}
else {
int vars=0;
for(int i=ini; i<fin; i++)
if(prop[i]!='(' && prop[i]!=')')
vars++;
if(vars == 1)
return true;
}
return false;
}

bool evaluar_proposicion(char *prop, bool *vals, char *vars, char *resp, int ini, int fin) {
int index = max_precedencia(prop, ini, fin);
if(prop[index] == '!') {
int npar=0, i=index+1, f;
bool b;
for(f=i; f<fin; f++) {
if(prop[f]=='(') {
npar++;
}
else if(prop[f]==')') {
npar--;
if(npar<0) break;
}
}
b = !evaluar_proposicion(prop, vals, vars, resp, i, f);
if(b) resp[index] = 'V'; else resp[index] = 'F';
return b;
}
else if(prop[index]=='&' || prop[index]=='|' || prop[index]==':' || prop[index]=='=') {
int npar=0, i, f=index;
bool p, q, r;
for(i=f-1; i>=ini; i--) {
if(prop[i]==')') {
npar++;
}
else if(prop[i]=='(') {
npar--;
if(npar<0) break;
}
}
p = evaluar_proposicion(prop, vals, vars, resp, i+1, f);
npar=0; i=index+1;
for(f=i; f<fin; f++) {
if(prop[f]=='(') {
npar++;
}
else if(prop[f]==')') {
npar--;
if(npar<0) break;
}
}
q = evaluar_proposicion(prop, vals, vars, resp, i, f);
switch(prop[index]) {
case '&': r = p&&q; break;
case '|': r = p||q; break;
case ':': r = !p||q; break;
case '=': r = (!p||q)&&(!q||p); break;
}
if(r) resp[index] = 'V'; else resp[index] = 'F';
return r;
}
else {
for(int i=0; vars[i]!='\0'; i++)
if(prop[index] == vars[i]){
if(vals[i])
resp[index] = 'V';
else
resp[index] = 'F';
return vals[i];
}
}
}

int buscar_variables(char *prop, char *vars){
int nvars = 0;
for(int i=0; prop[i]!='\0'; i++) {
if(prop[i]!='(' && prop[i]!=')' && prop[i]!='!' && prop[i]!='&' && prop[i]!='|' && prop[i]!=':' && prop[i]!='=') {
bool existe = false;
for(int j=0; j<nvars && !existe; j++) {
if(prop[i] == vars[j]) {
existe = true;
}
}
if(!existe) {
vars[nvars++] = prop[i];
}
}
}
return nvars;
}
« última modificación: 03 Mayo 2010, 07:25:39 pm por csaralg »
Mi blog: Registrate para ver este link. Registrate ó Login
<Registrate para ver este link. Registrate ó Login>

Desconectado [ZONIC]

  • Me das tu IP?
  • *
  • Mensajes: 47
  • Puntos: +0/-0
  • Sexo: Masculino
  • "Los naúfragos no eligen puerto"
    • Ver Perfil
Re: Programa que construye tablas de verdad de proposiciones logicas.
« Respuesta #1 en: 01 Mayo 2010, 06:11:39 pm »
no entiendo mucho de esto pero parese estar bueno el code =) buen aportee ;D
"No es vencido sino el que cree serlo"

Desconectado myguestp

  • Yo vivo en CPH
  • ***
  • Mensajes: 1,469
  • Puntos: +0/-0
  • A storm comin that the weatherman couldn’t predict
    • Ver Perfil
Re: Programa que construye tablas de verdad de proposiciones logicas.
« Respuesta #2 en: 01 Mayo 2010, 06:14:32 pm »
no entiendo el para que sirve esto, xd es mas, no se que hace el programa

Registrate para ver este link. Registrate ó Login

Desconectado csaralg

  • Me das tu IP?
  • *
  • Mensajes: 58
  • Puntos: +0/-0
  • Sexo: Masculino
  • http://alguienenlafisi.blogspot.com
    • Ver Perfil
    • Alguien en la FISI
Re: Programa que construye tablas de verdad de proposiciones logicas.
« Respuesta #3 en: 01 Mayo 2010, 06:20:51 pm »
Gracias [ZONIC], espero que este bien...

¿Alguien tiene alguna entrada maliciosa que haga caer el programa? :P


Desconectado csaralg

  • Me das tu IP?
  • *
  • Mensajes: 58
  • Puntos: +0/-0
  • Sexo: Masculino
  • http://alguienenlafisi.blogspot.com
    • Ver Perfil
    • Alguien en la FISI
Re: Programa que construye tablas de verdad de proposiciones logicas.
« Respuesta #4 en: 01 Mayo 2010, 06:33:54 pm »
Jajaja... vamos pensé que me había explicado bien... parece que no XD... Tampoco quiero explicar la clase de lógica proposicional... ummm... modifique el post para ver si se entiende mejor...

De todos modos quien quiera enterarse un poco mas de logica proposicional o logica booleana pueden revisar este link:

Registrate para ver este link. Registrate ó Login

Gracias por los comentarios :P

Desconectado myguestp

  • Yo vivo en CPH
  • ***
  • Mensajes: 1,469
  • Puntos: +0/-0
  • A storm comin that the weatherman couldn’t predict
    • Ver Perfil
Re: Programa que construye tablas de verdad de proposiciones logicas.
« Respuesta #5 en: 01 Mayo 2010, 06:40:56 pm »
lo que no entiendo es que utilidad le puedes dar a tu code, donde lo podrias usar

Desconectado csaralg

  • Me das tu IP?
  • *
  • Mensajes: 58
  • Puntos: +0/-0
  • Sexo: Masculino
  • http://alguienenlafisi.blogspot.com
    • Ver Perfil
    • Alguien en la FISI
Re: Programa que construye tablas de verdad de proposiciones logicas.
« Respuesta #6 en: 01 Mayo 2010, 07:04:06 pm »
Ah vale... jejeje... era eso bueno... ¿alguna ves se te a ocurrido pensar como funcionan los compiladores? osea tu escribes tu código C++ y el compilador lo traduce a ordenes en binario para el procesador. Pero antes de convertirlo tiene que hacer un análisis del lenguaje para verificar si tu código puede compilarse o tiene errores. A esto se le llama análisis de sintaxis. La sintaxis de un lenguaje son un conjunto de reglas que deben cumplirse para determinar si una expresión pertenece o no al lenguaje.

Bien pues, la lógica proposicional también es un lenguaje y su regla de sintaxis puede definirse así:

P = p / (~P) / (P^Q) / (PvQ) / (P-->Q) / (P<-->Q)

Es una definición recursiva. Lo que hace el programa es validar si una expresión cumple con esa definición o no y si cumple entonces crea la tabla de verdad de esa expresión.

Y... respondiendo a tu pregunta... Pues para que me serviría la tabla de verdad... pues para nada hombre!!! si esas cosas no sirven!!! XD

Esto es solo por un trabajo de matemática discreta como dije... y bueno de que funcione depende mi nota :P.

Ademas si a alguien le dejan la misma tareita pues... ahí tienen una referencia no?

Saludos.

Desconectado .xAk.

  • el engendro
  • Moderador
  • *****
  • Mensajes: 6,934
  • Puntos: +7/-2
  • Sexo: Masculino
  • F0r3v3R NeWbI3
    • Ver Perfil
Re: Programa que construye tablas de verdad de proposiciones logicas.
« Respuesta #7 en: 01 Mayo 2010, 07:59:42 pm »
¿fuiste al estreno?
Is the truth out there?

Desconectado NRagh

  • Me das tu password?
  • **
  • Mensajes: 314
  • Puntos: +0/-0
  • Sexo: Masculino
  • Pulverizador de estrellas...
    • Ver Perfil
Re: Programa que construye tablas de verdad de proposiciones logicas.
« Respuesta #8 en: 01 Mayo 2010, 08:04:25 pm »
Registrate para ver este link. Registrate ó Login
¿fuiste al estreno?

algo me dice que no  :toma:

Buenas!

estaria bueno para que te resuelva usando el metodo de las "leyes de morgan"

saludos!

Nragh

p.d.: Registrate para ver este link. Registrate ó Login
Chuck Norris no deriva, Chuck Norris desintegra

Desconectado .xAk.

  • el engendro
  • Moderador
  • *****
  • Mensajes: 6,934
  • Puntos: +7/-2
  • Sexo: Masculino
  • F0r3v3R NeWbI3
    • Ver Perfil
Re: Programa que construye tablas de verdad de proposiciones logicas.
« Respuesta #9 en: 01 Mayo 2010, 08:09:52 pm »
Sorry, estaba por las posibilidades que tiene del hacer, y me parecio que el estreno debe ser ... para no perderselo O:)

perdon, de veras, cuando los valores no hexa, char, .... tengo que seguir leyendo ... pero .... curiosidad. Seguro que, a lo mejor tambien empuja ver el estreno. Y pueda proporcionar, si duda en ello, no se, sorry

SaludOS

Desconectado csaralg

  • Me das tu IP?
  • *
  • Mensajes: 58
  • Puntos: +0/-0
  • Sexo: Masculino
  • http://alguienenlafisi.blogspot.com
    • Ver Perfil
    • Alguien en la FISI
Re: Programa que construye tablas de verdad de proposiciones logicas.
« Respuesta #10 en: 01 Mayo 2010, 08:23:51 pm »
Bueno... estoy leyendo el método de las leyes de Morgan :P

Gracias por los comentarios...

(Editado)

P.S.: Jajaja lo del estreno era solo un ejemplo...  ;D en realidad espero pasar el curso :S

Saludos.
« última modificación: 01 Mayo 2010, 08:34:15 pm por csaralg »

Desconectado .xAk.

  • el engendro
  • Moderador
  • *****
  • Mensajes: 6,934
  • Puntos: +7/-2
  • Sexo: Masculino
  • F0r3v3R NeWbI3
    • Ver Perfil
Re: Programa que construye tablas de verdad de proposiciones logicas.
« Respuesta #11 en: 01 Mayo 2010, 08:30:54 pm »
je, je. off topic en cinetube o pelisyonkis seguro mañana también ironman2 ... no te compliques con más estrenos si aparece ;)

Me cuesta un poco entender ... pero el tu primer mensaje, en el trato a booleano ha de pensar que tanto en C como C ++ .... mejor tepítete, igual es == que es verdadero o diferente de 0.

Un sólo signo de igualdad es asignación (Y se cumplira si se puede asignar el valor).
« última modificación: 01 Mayo 2010, 08:36:01 pm por AnimAlf »

Desconectado csaralg

  • Me das tu IP?
  • *
  • Mensajes: 58
  • Puntos: +0/-0
  • Sexo: Masculino
  • http://alguienenlafisi.blogspot.com
    • Ver Perfil
    • Alguien en la FISI
Re: Programa que construye tablas de verdad de proposiciones logicas.
« Respuesta #12 en: 01 Mayo 2010, 08:36:14 pm »
Registrate para ver este link. Registrate ó Login
je, je. off topic en cinetube o pelisyonkis seguro mañana también ironman2 ... no te compliques con más estrenos si aparece ;)

Si pues... menos mal existen esas soluciones alternativas y no todo es verdadero o falso, ceros y unos, apruebas o jalas!!! XD
« última modificación: 01 Mayo 2010, 08:36:42 pm por csaralg »

Desconectado .xAk.

  • el engendro
  • Moderador
  • *****
  • Mensajes: 6,934
  • Puntos: +7/-2
  • Sexo: Masculino
  • F0r3v3R NeWbI3
    • Ver Perfil
Re: Programa que construye tablas de verdad de proposiciones logicas.
« Respuesta #13 en: 01 Mayo 2010, 08:39:53 pm »
Registrate para ver este link. Registrate ó Login
apruebas o jalas!!! XD

El jajas se conoce. Aprueba ... y cuentanos.

Desconectado .xAk.

  • el engendro
  • Moderador
  • *****
  • Mensajes: 6,934
  • Puntos: +7/-2
  • Sexo: Masculino
  • F0r3v3R NeWbI3
    • Ver Perfil
Re: Programa que construye tablas de verdad de proposiciones logicas.
« Respuesta #14 en: 01 Mayo 2010, 10:31:25 pm »
Registrate para ver este link. Registrate ó Login
seguro mañana también ironman2

Sigo en off, pero no puedo evitarme comentar que a sido rápido, la sorpresa ha sido verla Registrate para ver este link. Registrate ó Login, como en Registrate para ver este link. Registrate ó Login.

SaludOS

Desconectado coredump

  • Yo vivo en CPH
  • ***
  • Mensajes: 408
  • Puntos: +0/-0
  • Sexo: Masculino
    • Ver Perfil
Re: Programa que construye tablas de verdad de proposiciones logicas.
« Respuesta #15 en: 04 Mayo 2010, 01:45:56 am »
No lo probé, pero se ve bueno el código.
Tal vez te interese, si es que no lo conoces, el paradigma lógico: Registrate para ver este link. Registrate ó Login

Hacer un intérprete es realmente apasionante, y un motor de inferencia todavía más.
Luego de que apruebes la materia, y sólo por festejar, puedes implementar punteros a funciones; eso va a hacer que tu código ocupe un tercio de lo que ocupa ahora.
Y si todavía sigues con ganas, puedes usar LEX y YACC, las clásicas herramientas de parseo, para fabricar analizatores sintácticos.
Generation no: 298
Generation no: 299
Generation no: 300
The end of all the generations.
The best solution found is Program number: 42
+--DIV
|  +--[0]
|  +--[0]
The fitness value is: 68
Press any key to terminate....

Desconectado csaralg

  • Me das tu IP?
  • *
  • Mensajes: 58
  • Puntos: +0/-0
  • Sexo: Masculino
  • http://alguienenlafisi.blogspot.com
    • Ver Perfil
    • Alguien en la FISI
Re: Programa que construye tablas de verdad de proposiciones logicas.
« Respuesta #16 en: 04 Mayo 2010, 02:05:43 am »
Algunos términos nuevos para mi: Prolog, LEX, YACC

Ya los buscare, como dices, cuando apruebe :P y lleve Lenguajes y Traductores :)

Gracias por los datos...

Saludos.


Desconectado lpmartinez

  • CPQUE??
  • *
  • Mensajes: 1
  • Puntos: +0/-0
  • Yo AMO a pOrtal HAcker!
    • Ver Perfil
Re:Programa que construye tablas de verdad de proposiciones logicas.
« Respuesta #17 en: 03 Noviembre 2011, 02:47:10 pm »
Me parece muy interesante tu programa, sin embargo no logro entiender que hace tu funcion buscar_variables. Tienes depronto un pseucodigo planteado para tu programa de manera en que se facilite un poco la comprension? :D

Desconectado nano20sm

  • Me das tu password?
  • **
  • Mensajes: 282
  • Puntos: +0/-0
  • Sexo: Masculino
  • Solo C que nada C
    • Ver Perfil
Re:Programa que construye tablas de verdad de proposiciones logicas.
« Respuesta #18 en: 28 Noviembre 2011, 02:01:30 pm »
La verdad es que no habia visto este post, quedó bueno.

Haber si puedes calcularme este argumento logico y decirme si es contingencia, contradiccion o tautologia con tu programa.

Código: Registrate para ver este link. Registrate ó Login
       p | V

Código: Registrate para ver este link. Registrate ó Login
       p | F

donde p es una variable, V es una constante que indica verdadero y F es una constante que indica falso..

Te faltó agregar algo tan simple como las constantes. Los argumentos logicos en el calculo proposicional estan compuesto de variables y de constantes. ( para que decir la LPO  )

saludos!!

Desconectado Avoidance25

  • Moderador
  • *****
  • Mensajes: 1,246
  • Puntos: +0/-0
  • Sexo: Masculino
  • Da gehört eiskrem aber nicht hin xD
    • Ver Perfil
    • sytes
Re:Programa que construye tablas de verdad de proposiciones logicas.
« Respuesta #19 en: 28 Noviembre 2011, 08:38:35 pm »
No conocia este post, la verdad es que esta muy bueno. Justo hace unos dias hice un programa con la misma funcion.

Al pasarlo a php me di cuenta del chiste que es programar en php en comparacion con C :P
Lo subi al servidor de mi universidad, que tiene una buena capacidad de procesamiento, y me resuelve la funcion en un corto tiempo incluso si tiene las 26 variables permitidas :D

PD: Iba a poner el link, pero en la direccion esta mi nombre real, asi que .....

 :cura:
Registrate para ver este link. Registrate ó Login
por ejemplo, se habla de emprender la Registrate para ver este link. Registrate ó Login con el "fusil de carne" y se insta a una mujer a introducir Registrate para ver este link. Registrate ó Login en su Registrate para ver este link. Registrate ó Login


  Asunto / Iniciado por Respuestas / Vistas Último mensaje
xx
Ayuda Crear tablas de verdad

Iniciado por kevinomd

1 Respuestas
1014 Vistas
Último mensaje 03 Noviembre 2012, 08:40:44 pm
por WaesWaes
question
¿Algun programa que me limpie las tablas NAT?

Iniciado por sacopapas

0 Respuestas
526 Vistas
Último mensaje 11 Agosto 2010, 08:45:42 am
por sacopapas
xx
Construye tu propia extension de Firefox

Iniciado por Vassily

0 Respuestas
1404 Vistas
Último mensaje 21 Septiembre 2005, 04:24:52 am
por Vassily
xx
Construye el cable de datos para el SE T226

Iniciado por putus

3 Respuestas
1691 Vistas
Último mensaje 27 Abril 2006, 12:01:44 am
por beto95
xx
Bombas logicas

Iniciado por chhack

5 Respuestas
1452 Vistas
Último mensaje 11 Abril 2007, 08:29:12 pm
por chhack
xx
Bombas Logicas en VB6

Iniciado por ziBboh

4 Respuestas
3310 Vistas
Último mensaje 29 Enero 2007, 03:14:00 am
por Zion_Tm
question
Compuertas lógicas...

Iniciado por txged

5 Respuestas
1888 Vistas
Último mensaje 20 Septiembre 2010, 08:20:38 pm
por Jackerst
xx
bombas logicas

Iniciado por clipto boxw

17 Respuestas
5243 Vistas
Último mensaje 31 Enero 2007, 01:14:39 am
por clipto boxw