Untitled

 avatar
unknown
plain_text
2 years ago
2.5 kB
11
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