Advertisement
Guest User

Untitled

a guest
Nov 24th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.43 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. char sir[100], sirAux[100], SirEsential[100], vectorC[64];
  7. int a[64][64], nr = 0, putere = 1, aux2;
  8. char auxiliar[100]="a";
  9.  
  10. void notatii() {
  11. printf("Negatia = ~");
  12. printf("\nConjunctia = ^");
  13. printf("\nDisjunctia = v");
  14. printf("\nImplicatia = -");
  15. printf("\nEchivalenta = =");
  16. printf("\nDisjunctia exclusiva = +");
  17. }
  18.  
  19. void initializare() {
  20. for (int i = 0; i < 64; i++)
  21. for (int j = 0; j < 64; j++)
  22. a[i][j] = -1;
  23. }
  24.  
  25. void VectorCunostinta() {
  26. int i, j, ok, contor;
  27.  
  28. vectorC[0] = '\0';
  29. contor = 0;
  30. for (i = 0; i < strlen(sir); i++)
  31. if ((sir[i] >= 'A') && (sir[i] <= 'Z')) {
  32. ok = 1;
  33. for (j = 0; j < contor; j++)
  34. if (sir[i] == vectorC[j])
  35. ok = 0;
  36. if (ok) {
  37. vectorC[contor] = sir[i];
  38. contor++;
  39. nr++;
  40. }
  41. }
  42. vectorC[contor] = '\0';
  43. printf("Variabilele sunt: %s\n", vectorC);
  44.  
  45. }
  46.  
  47. void negatia(char P, int pozitia) {
  48. int poz = 0, i;
  49.  
  50. for (i = 0; i < nr; i++)
  51. if (vectorC[i] == P)
  52. poz = i;
  53. for (i = 0; i < putere; i++) {
  54. if (a[i][poz] == 1)
  55. a[i][nr] = 0;
  56. else
  57. a[i][nr] = 1;
  58. }
  59.  
  60. strcat_s(vectorC, auxiliar);
  61. strcpy_s(SirEsential + pozitia,100, SirEsential + pozitia + 1); // Sterg ~Q si pun rezultatul ( de ex: Pv~Q <--> Pva )
  62. SirEsential[pozitia] = auxiliar[0];
  63. auxiliar[0] = auxiliar[0] + 1;
  64. nr++;
  65. }
  66.  
  67. void conjunctia(char P, char Q) {
  68. int poz1 = 0, poz2 = 0, i;
  69.  
  70. for (i = 0; i < nr; i++) {
  71. if (vectorC[i] == P)
  72. poz1 = i;
  73. if (vectorC[i] == Q)
  74. poz2 = i;
  75. }
  76. for (i = 0; i < putere; i++) {
  77. if ((a[i][poz1] == 1) && (a[i][poz2] == 1))
  78. a[i][nr] = 1;
  79. else
  80. a[i][nr] = 0;
  81. }
  82.  
  83. strcat_s(vectorC, auxiliar);
  84. auxiliar[0] = auxiliar[0] + 1;
  85. nr++;
  86. }
  87.  
  88. void disjunctia(char P, char Q, int pozitia) {
  89. int poz1 = 0, poz2 = 0, i;
  90.  
  91. for (i = 0; i < nr; i++) {
  92. if (vectorC[i] == P)
  93. poz1 = i;
  94. if (vectorC[i] == Q)
  95. poz2 = i;
  96. }
  97. for (i = 0; i < putere; i++) {
  98. if ((a[i][poz1] == 0) && (a[i][poz2] == 0))
  99. a[i][nr] = 0;
  100. else
  101. a[i][nr] = 1;
  102. }
  103. strcat_s(vectorC, auxiliar);
  104. pozitia = pozitia - 1;
  105. strcpy_s(SirEsential + pozitia, 100, SirEsential + pozitia + 2); // Sterg PvQ si pun rezultatul ( de ex: PvQ^R <--> a^R )
  106. SirEsential[pozitia] = auxiliar[0];
  107. auxiliar[0] = auxiliar[0] + 1;
  108. nr++;
  109. }
  110.  
  111. void implicatia(char P, char Q) {
  112. int poz1 = 0, poz2 = 0, i;
  113.  
  114. for (i = 0; i < nr; i++) {
  115. if (vectorC[i] == P)
  116. poz1 = i;
  117. if (vectorC[i] == Q)
  118. poz2 = i;
  119. }
  120. for (i = 0; i < putere; i++) {
  121. if ((a[i][poz1] == 1) && (a[i][poz2] == 0))
  122. a[i][nr] = 0;
  123. else
  124. a[i][nr] = 1;
  125. }
  126. strcat_s(vectorC, auxiliar);
  127. auxiliar[0] = auxiliar[0] + 1;
  128. nr++;
  129. }
  130.  
  131. void echivalenta(char P, char Q) {
  132. int poz1 = 0, poz2 = 0, i;
  133.  
  134. for (i = 0; i < nr; i++) {
  135. if (vectorC[i] == P)
  136. poz1 = i;
  137. if (vectorC[i] == Q)
  138. poz2 = i;
  139. }
  140. for (i = 0; i < putere; i++) {
  141. if (((a[i][poz1] == 1) && (a[i][poz2] == 1)) || ((a[i][poz1] == 0) && (a[i][poz2] == 0)))
  142. a[i][nr] = 1;
  143. else
  144. a[i][nr] = 0;
  145. }
  146. strcat_s(vectorC, auxiliar);
  147. auxiliar[0] = auxiliar[0] + 1;
  148. nr++;
  149.  
  150. }
  151.  
  152. void disjunctiaexclusiva(char P, char Q) {
  153. int poz1 = 0, poz2 = 0, i;
  154.  
  155. for (i = 0; i < nr; i++) {
  156. if (vectorC[i] == P)
  157. poz1 = i;
  158. if (vectorC[i] == Q)
  159. poz2 = i;
  160. }
  161. for (i = 0; i < putere; i++) {
  162. if (((a[i][poz1] == 1) && (a[i][poz2] == 0)) || ((a[i][poz1] == 0) && (a[i][poz2] == 1)))
  163. a[i][nr] = 1;
  164. else
  165. a[i][nr] = 0;
  166. }
  167. strcat_s(vectorC, auxiliar);
  168. auxiliar[0] = auxiliar[0] + 1;
  169. nr++;
  170. }
  171.  
  172. void operatii(char operatie, char op1, char op2, int pozitia) {
  173. int cazul = 0;
  174. if (operatie == '~')
  175. cazul = 1;
  176. else
  177. if (operatie == '^')
  178. cazul = 2;
  179. else
  180. if (operatie == 'v')
  181. cazul = 3;
  182. else
  183. if (operatie == '-')
  184. cazul = 4;
  185. else
  186. if (operatie == '=')
  187. cazul = 5;
  188. else
  189. if (operatie == '+')
  190. cazul = 6;
  191. switch (cazul) {
  192. case 1:
  193. negatia(op2, pozitia);
  194. break;
  195.  
  196. case 2:
  197. conjunctia(op1, op2);
  198. break;
  199.  
  200. case 3:
  201. disjunctia(op1, op2, pozitia);
  202. break;
  203.  
  204. case 4:
  205. implicatia(op1, op2);
  206. break;
  207.  
  208. case 5:
  209. echivalenta(op1, op2);
  210. break;
  211.  
  212. case 6:
  213. disjunctiaexclusiva(op1, op2);
  214. break;
  215.  
  216. default:printf("In propozitie exista o operatie incorecta!!!\n");
  217. }
  218. }
  219.  
  220. void paranteze() {
  221. int find=1, poz1 = -1, poz2 = -1, i, pozitie = 0;
  222. char operatia, op1, op2;
  223.  
  224. while (find==1) {
  225. find = 0;
  226. for (i = 0; i < strlen(sir); i++) {
  227. if (sir[i] == '(')
  228. poz1 = i;
  229. if (sir[i] == ')') {
  230. poz2 = i;
  231. find = 1;
  232. break;
  233. }
  234. }
  235.  
  236. if (find == 1) {
  237. sir[poz2] = '\0';
  238. SirEsential[0] = '\0';
  239. strcpy_s(SirEsential, 100, sir + poz1 + 1);
  240. printf("Sirul esential este: %s", SirEsential); // * - merge
  241. sir[poz2] = ')';
  242. strcpy_s(sir + poz1, 100, sir + poz2);
  243. printf("\nSirul initial acum este: %s", sir); // ** - merge
  244. int gaseste = 1;
  245. while (gaseste == 1) {
  246. gaseste = 0;
  247. for (i = 0; i < strlen(SirEsential); i++)
  248. if (SirEsential[i] == '~') {
  249. gaseste = 1;
  250. operatia = '~';
  251. op1 = SirEsential[i + 1];
  252. op2 = SirEsential[i + 1];
  253. pozitie = i;
  254. operatii(operatia, op1, op2, pozitie);
  255. printf("\nSirul esential este 2 : %s\n", SirEsential); // *** - merge
  256. break;
  257. }
  258. }
  259. while (strlen(SirEsential) > 1) {
  260. for (i = 0; i < strlen(SirEsential); i++) {
  261. if (((SirEsential[i] < 'A') || (SirEsential[i] > 'Z')) && ((SirEsential[i] < 'a') || (SirEsential[i] >= 'v'))) {
  262. operatia = SirEsential[i];
  263. op1 = SirEsential[i - 1];
  264. op2 = SirEsential[i + 1];
  265. pozitie = i;
  266. operatii(operatia, op1, op2, pozitie);
  267. printf("\nUn alt sir esential: %s", SirEsential);
  268. break;
  269. }
  270. }
  271. }
  272. sir[poz1] = SirEsential[0];
  273. }
  274. }
  275. printf("\nNu am mai gasit paranteze\n Sirul final este: %s\n", sir);
  276. for (int k = 0; i < putere; i++) {
  277. for (int j = 0; j < nr; j++)
  278. printf("%d ", a[k][j]);
  279. printf("\n");
  280. }
  281.  
  282. }
  283.  
  284. void main() {
  285.  
  286. char operatie;
  287. int i, j, numar = 0;
  288. notatii(); //Notatiile folosite
  289. printf("\nIntroduceti propozitia: ");
  290. gets_s(sir);
  291. sirAux[0] = '\0';
  292. strcpy_s(sirAux, sir); //Salvam propozitia in alt sir pentru orice eventualitate
  293. VectorCunostinta(); //Salvam variabilele intr-un vector de cunostinta
  294. aux2 = nr; //Salvam numarul de variabile pentru orice eventualitate
  295. initializare(); //Initializam matricea(tabela de adevar) cu -1
  296. for (i = 0; i < nr; i++)
  297. putere = putere * 2;
  298. numar = putere - 1;
  299. for (i = 0; i < putere; i++) { // Adaugam in tabela de adevar valorile de adevar ale variabilelor
  300. int aux = numar;
  301. for (j = nr - 1; j >= 0; j--) {
  302. a[i][j] = aux & 1;
  303. aux = aux >> 1;
  304. }
  305. numar--;
  306. }
  307. for (i = 0; i < putere; i++) {
  308. for (j = 0; j < nr; j++)
  309. printf("%d ", a[i][j]);
  310. printf("\n");
  311. }
  312. /*char op1 = sir[0];
  313. char op2 = sir[2];
  314. char op3 = sir[1];
  315. int pozitie = 1;
  316. operatii(op3, op1, op2, pozitie);
  317. for (i = 0; i < putere; i++) {
  318. for (j = 0; j < nr; j++)
  319. printf("%d ", a[i][j]);
  320. printf("\n");
  321. }*/
  322. paranteze();
  323. _getch();
  324. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement