Red de conocimiento informático - Material del sitio web - Cómo programar en C o C: ingrese cualquier fórmula proposicional desde el teclado y use el método de la tabla de verdad para determinar su tipo

Cómo programar en C o C: ingrese cualquier fórmula proposicional desde el teclado y use el método de la tabla de verdad para determinar su tipo

#includelt;iostreamgt;

#includelt;stringgt;

usando el espacio de nombres std;

string calcValue(valor de cadena1);

cadena calcValueNop(valor de cadena1);

cadena caclAnd(cadena x, cadena y);

cadena caclOr(cadena x, cadena y);

string caclNot(string x);

int main()

{ string in, varList=""; //="!a b^c"

coutlt;lt;"Ingrese la fórmula de la proposición: Nota: !, ^, , (,), las letras son legales, no deben coincidir números, espacios y corchetes!"lt;lt;endl;

cingt;gt;in;

coutlt;lt;"La tabla de verdad de la fórmula de la proposición de entrada "lt;lt;inlt;lt;" es la siguiente: "lt;lt;endl ;

p>

int longitud=in.longitud();

for(int i=0; ilt; longitud; i)

{

char code=in[i];

if(((codegt;=97)amp;amp;(codelt;123)||((codegt;=65))amp;amp ;(codelt;81 ))amp;amp;varList.find(code,0)==-1)

varList =code

}

int n=varList();

for(i=0;ilt;n;i)

coutlt;lt;varList[i]lt;lt;"\t ";

coutlt;lt;inlt;lt;"\t\t"lt;lt;"value"lt;lt;endl;

int m=1;

int bandera;

char *trow=new char[n];

for(i=0;ilt;n;i){m*=2; trow[i]= '0';}

for(i=0;ilt;m;i)

{

for(int j=0 ;jlt;n; j )

coutlt;lt;trow[j]lt;lt;"\t";

valor de cadena1=in;

for(j=0 ;jlt;n;j )

{

char x=varList[j];

for(int k=0;klt ;longitud;k)

if(valor1[k]==x)

valor1[k]=trow[j]

}

coutlt ;lt;valor1lt;lt;"\t\t"lt;lt

;calcValue(valor1)lt;lt;endl;

flag=1;

for(j=n-1;jgt;-1;j--)

{ int temp;

temp=int(trow[j])-48;

flag=bandera temp;

if(flag== 2)

{

trow[j]='0';

bandera=1

}

else

{

trow[j]='1';

flag=0

break; >

}

}

}

eliminar trow;

devolver 0

}

cadena calcValue(valor de cadena1)

{

int nlp=value1.find('(',0);

int nrp =valor1.longitud();

string x="", v="";

int i=nlp 1;

while(nlpgt;= 0)

{

x=value1.substr(i,1);

if(x=="()

{

nlp=i;

i

}

más

{

if(x==")")

{

nrp=i;

v=calcValueNop(value1.substr(nlp 1,nrp -nlp-1));

valor1=(nlpgt;0?valor1.substr(0,nlp):"") v ((nrp 1)lt;=valor1.longitud()?valor1. substr(nrp 1): "");

nlp=value1.find('(', 0);

i=nlp 1;

}

más

{

i=i 1

}

}

if(igt;=value1.length())

{

nlp=value1.find('(',0);

i=nlp 1;

}

}

return calcValueNop(valor1);

}

cadena calcValueNop(cadena); valor1)

{

int nnot=valor1.find('!',0);

while(nnotgt;=0)

{

valor1=(nnotgt;0?valor1.substr(0,nnot):"") caclNot(valor1.substr(n

no 1, 1)) ((nno 2)lt; = valor1.length()?value1.substr(nno 2): "");

nnot=valor1.find('!', 0);

}

int nand=value1.find('^', 0

mientras (nandgt; 0)

{

valor1=((nand-1)gt;0?valor1.substr(0,nand-1):"") caclAnd(valor1.substr(nand-1,1),valor1. substr(nand 1, 1)) ((nand 2)lt;=value1.length()?value1.substr(nand 2): "");

nand=value1.find('^' , 0);

}

int nOr=value1.find(' ', 0

mientras (nOrgt; 0)

{

valor1=((nOr-1)gt;0?value1.substr(0,nOr-1):"")

caclOr(valor1.substr(nOr -1, 1), value1.substr(nO 1, 1))

((nO 2)lt; =value1.length()?value1.substr(nO 2): ""); /p>

nOr=value1.find(' ', 0);

}

devuelve valor1; >cadena caclAnd(cadena x, cadena y)

{

if ((x=="1") amp; amp; (y=="1"))

{

devolver "1"

}

más

{

regresar; "0";

}

}

cadena caclOr(cadena x, cadena y)

{

if ((x=="0") amp;amp; (y=="0"))

{

devuelve "0";

}

más

{

devolver "1"

}

}

cadena caclNot(cadena x)

{ if (x=="1")

{

return "0";

}

más

{

devuelve "1"

}

}