Untitled
unknown
plain_text
2 years ago
2.5 kB
17
Indexable
#include <stdio.h>
#include <stdbool.h>
int main()
{
char statement[100];
int numVariables = 0, i = 0;
printf("Enter the compound statement (use uppercase letters for variables, '&' for AND, '|' for OR, '!' for NOT, '<->' for BICONDITIONAL, '->' for CONDITIONAL):\n");
scanf("%s", statement);
while (statement[i] != '\0')
{
if (statement[i] >= 'A' && statement[i] <= 'Z')
{
numVariables++;
}
i++;
}
int truthValues[numVariables];
int maxCombinations = 1 << numVariables;
for (int comb = 0; comb < maxCombinations; comb++)
{
for (int j = 0; j < numVariables; j++)
{
truthValues[j] = (comb >> j) & 1;
}
int variables[26] = {0};
i = 0;
while (statement[i] != '\0')
{
if (statement[i] >= 'A' && statement[i] <= 'Z')
{
variables[statement[i] - 'A'] = truthValues[statement[i] - 'A'];
}
else if (statement[i] == '&')
{
variables[statement[i + 1] - 'A'] = variables[statement[i - 1] - 'A'] && variables[statement[i + 2] - 'A'];
i += 2;
}
else if (statement[i] == '|')
{
variables[statement[i + 1] - 'A'] = variables[statement[i - 1] - 'A'] || variables[statement[i + 2] - 'A'];
i += 2;
}
else if (statement[i] == '!')
{
variables[statement[i + 1] - 'A'] = !variables[statement[i + 1] - 'A'];
i++;
}
else if (statement[i] == '<' && statement[i + 1] == '-' && statement[i + 2] == '>')
{
variables[statement[i + 3] - 'A'] = (variables[statement[i - 1] - 'A'] && variables[statement[i + 4] - 'A']) || (!variables[statement[i - 1] - 'A'] && !variables[statement[i + 4] - 'A']);
i += 4;
}
else if (statement[i] == '-' && statement[i + 1] == '>')
{
variables[statement[i + 2] - 'A'] = !variables[statement[i - 1] - 'A'] || variables[statement[i + 2] - 'A'];
i += 2;
}
i++;
}
if (!variables[statement[0] - 'A'])
{
printf("The statement is not a tautology.\n");
return 0;
}
}
printf("The statement is a tautology.\n");
return 0;
}Editor is loading...
Leave a Comment