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; p>
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")) p>
{
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"
}
} p>