Untitled
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