Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <ctype.h>
- #include <conio.h>
- #include <string.h>
- #include <cstring>
- #define VF 0
- #define SAU 'v'
- #define SI '^'
- #define IMPL '>'
- #define ECHIV '<'
- #define XOR 'x'
- using namespace std;
- int isLetter(char a)
- {
- return (a >= 'A' && a <= 'Z' && a != XOR && a != SAU);
- }
- void umpleLinii(char A[100][100], int linii, int variabile) {
- //umple linile variabilielor cu adevarat si fals
- int temp = linii;
- for (int i = 0; i < variabile; i++) {
- int poz = 1;
- int temp2 = 0;
- while (poz <= linii) {
- for (int k = 0; k < temp / 2; k++) {
- if (temp2 % 2 == 0)
- A[poz][i] = '1';
- else
- A[poz][i] = '0';
- poz++;
- }
- temp2++;
- }
- temp = temp / 2;
- }
- }
- //operatii
- int chkSgn(char a,char b, char c)
- {
- if (b == '>')
- return (!a || b);
- if (b == '^')
- return a && c;
- if (b == 'v')
- return a || c;
- if (b == '<')
- return ((a&&b) || (!a && !b));
- if (b == 'x')
- if (a)
- return !c;
- else
- return c;
- }
- int breaktherules(char a[100], int n)
- {
- int i;
- int p1, p2;
- for (i = 0; i < n; i++)
- if (a[i] == '(') {
- p1 = i;
- break;
- }
- else
- p1 = -1;
- for (i = p1; i <= n; i--)
- if (a[i] == ')') {
- p2 = i;
- break;
- }
- else
- p2 = -1;
- int evaluare, nrev = 0;
- for (i = p1 + 1; i < p2; i++)
- if (a[i + 1] == SAU ||
- a[i + 1] == SI ||
- a[i + 1] == XOR ||
- a[i + 1] == IMPL ||
- a[i + 1] == ECHIV && nrev == 0) {
- evaluare = chkSgn(a[i], a[i + 1], a[i + 2]);
- nrev = 1;
- }
- else
- if (a[i + 1] == SAU ||
- a[i + 1] == SI ||
- a[i + 1] == XOR ||
- a[i + 1] == IMPL ||
- a[i + 1] == ECHIV)
- evaluare = chkSgn(evaluare, a[i + 1], a[i + 2]);
- return evaluare;
- }
- int main() {
- char prop[100];
- char tabla[100][100];
- char tabla2[100][100];
- int n, i, nrLit, nrCif, j, k;
- printf_s("Introduceti o propozitie logica:");
- cin.get(prop, 100);
- n = strlen(prop);
- for (i = 0; i < n; i++)
- if (islower(prop[i]) && prop[i] != XOR && prop[i] != SAU)
- prop[i] = toupper(prop[i]);
- for (i = 0; i < n; i++)
- printf_s("%c", prop[i]);
- printf_s("\n\n");
- nrLit = 0;
- for (i = 0; i < n; i++)
- if (isLetter(prop[i]))
- for (j = 0; j <= n; j++)
- if (tabla[VF][j] != prop[i]) {
- tabla[VF][nrLit++] = prop[i];
- break;
- }
- nrCif = pow(2, nrLit);
- umpleLinii(tabla, nrCif, nrLit);
- for (i = 0; i <= nrCif; i++)
- for (j = 0; j < nrLit; j++)
- if (i == 0)
- tabla[i][j + nrLit] = tabla[i][j];
- else
- if (tabla[i][j] == '1')
- tabla[i][j + nrLit] = '0';
- else
- tabla[i][j + nrLit] = '1';
- for (i = 0; i <= nrCif; i++) {
- for (j = 0; j < nrLit * 2; j++)
- if (j >= nrLit && j < nrLit * 2 && i==0) {
- printf("!");
- printf("%c\t", tabla[i][j-nrLit]);
- }
- else
- printf("%c\t", tabla[i][j]);
- printf_s("\n");
- }
- _getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement