Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.85 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctype.h>
  3. #include <conio.h>
  4. #include <string.h>
  5. #include <cstring>
  6.  
  7. #define VF 0
  8. #define SAU 'v'
  9. #define SI '^'
  10. #define IMPL '>'
  11. #define ECHIV '<'
  12. #define XOR 'x'
  13.  
  14. using namespace std;
  15.  
  16. int isLetter(char a)
  17. {
  18. return (a >= 'A' && a <= 'Z' && a != XOR && a != SAU);
  19. }
  20.  
  21. void umpleLinii(char A[100][100], int linii, int variabile) {
  22. //umple linile variabilielor cu adevarat si fals
  23. int temp = linii;
  24. for (int i = 0; i < variabile; i++) {
  25. int poz = 1;
  26. int temp2 = 0;
  27. while (poz <= linii) {
  28. for (int k = 0; k < temp / 2; k++) {
  29. if (temp2 % 2 == 0)
  30. A[poz][i] = '1';
  31. else
  32. A[poz][i] = '0';
  33. poz++;
  34. }
  35. temp2++;
  36. }
  37. temp = temp / 2;
  38. }
  39. }
  40.  
  41. //operatii
  42.  
  43. int chkSgn(char a,char b, char c)
  44. {
  45. if (b == '>')
  46. return (!a || b);
  47. if (b == '^')
  48. return a && c;
  49. if (b == 'v')
  50. return a || c;
  51. if (b == '<')
  52. return ((a&&b) || (!a && !b));
  53. if (b == 'x')
  54. if (a)
  55. return !c;
  56. else
  57. return c;
  58. }
  59.  
  60. int breaktherules(char a[100], int n)
  61. {
  62. int i;
  63. int p1, p2;
  64.  
  65. for (i = 0; i < n; i++)
  66. if (a[i] == '(') {
  67. p1 = i;
  68. break;
  69. }
  70. else
  71. p1 = -1;
  72. for (i = p1; i <= n; i--)
  73. if (a[i] == ')') {
  74. p2 = i;
  75. break;
  76. }
  77. else
  78. p2 = -1;
  79. int evaluare, nrev = 0;
  80. for (i = p1 + 1; i < p2; i++)
  81. if (a[i + 1] == SAU ||
  82. a[i + 1] == SI ||
  83. a[i + 1] == XOR ||
  84. a[i + 1] == IMPL ||
  85. a[i + 1] == ECHIV && nrev == 0) {
  86. evaluare = chkSgn(a[i], a[i + 1], a[i + 2]);
  87. nrev = 1;
  88. }
  89. else
  90. if (a[i + 1] == SAU ||
  91. a[i + 1] == SI ||
  92. a[i + 1] == XOR ||
  93. a[i + 1] == IMPL ||
  94. a[i + 1] == ECHIV)
  95. evaluare = chkSgn(evaluare, a[i + 1], a[i + 2]);
  96.  
  97.  
  98. return evaluare;
  99.  
  100.  
  101. }
  102.  
  103.  
  104. int main() {
  105. char prop[100];
  106. char tabla[100][100];
  107. char tabla2[100][100];
  108. int n, i, nrLit, nrCif, j, k;
  109. printf_s("Introduceti o propozitie logica:");
  110. cin.get(prop, 100);
  111. n = strlen(prop);
  112. for (i = 0; i < n; i++)
  113. if (islower(prop[i]) && prop[i] != XOR && prop[i] != SAU)
  114. prop[i] = toupper(prop[i]);
  115.  
  116. for (i = 0; i < n; i++)
  117. printf_s("%c", prop[i]);
  118. printf_s("\n\n");
  119.  
  120.  
  121. nrLit = 0;
  122. for (i = 0; i < n; i++)
  123. if (isLetter(prop[i]))
  124. for (j = 0; j <= n; j++)
  125. if (tabla[VF][j] != prop[i]) {
  126. tabla[VF][nrLit++] = prop[i];
  127. break;
  128. }
  129. nrCif = pow(2, nrLit);
  130.  
  131. umpleLinii(tabla, nrCif, nrLit);
  132.  
  133. for (i = 0; i <= nrCif; i++)
  134. for (j = 0; j < nrLit; j++)
  135. if (i == 0)
  136. tabla[i][j + nrLit] = tabla[i][j];
  137. else
  138. if (tabla[i][j] == '1')
  139. tabla[i][j + nrLit] = '0';
  140. else
  141. tabla[i][j + nrLit] = '1';
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148. for (i = 0; i <= nrCif; i++) {
  149. for (j = 0; j < nrLit * 2; j++)
  150. if (j >= nrLit && j < nrLit * 2 && i==0) {
  151. printf("!");
  152. printf("%c\t", tabla[i][j-nrLit]);
  153. }
  154. else
  155. printf("%c\t", tabla[i][j]);
  156. printf_s("\n");
  157. }
  158. _getch();
  159. return 0;
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement