Advertisement
AbraaoAllysson

Lógica parte 1 - Formula final

Sep 1st, 2016
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.85 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <locale.h>
  3.  
  4. #define TRUE              1
  5. #define FALSE             0
  6. #define IMP(b1, b2)       (b1 && !b2 ? FALSE : TRUE)
  7. #define VARS              3
  8. #define P                 0
  9. #define Q                 1
  10. #define R                 2
  11.  
  12.  
  13. char nome[VARS];
  14. int I[VARS];
  15.  
  16.  
  17. void inicializa_formula()
  18. {
  19.   nome[P] = 'P';
  20.   nome[Q] = 'Q';
  21.   nome[R] = 'R';
  22.  
  23.   for (int c = 0; c < VARS; c++)
  24.     I[c] = FALSE;
  25. }
  26.  
  27. int ultima_interpretacao()
  28. {
  29.   int res = 1;
  30.  
  31.   for (int c = 0; c < VARS; c++)
  32.   {
  33.     res = res && I[c];
  34.   }
  35.  
  36.   return res;
  37. }
  38.  
  39.  
  40. void proxima_interpretacao()
  41. {
  42.   int c = VARS - 1;
  43.  
  44.   while (c >= 0 && I[c] != 0)
  45.   {
  46.     I[c--] = 0;
  47.   }
  48.  
  49.   if (c >= 0)
  50.     I[c] = 1;
  51. }
  52.  
  53. int valor_formula()
  54. {
  55.   return IMP(I[P], (I[R] && (I[Q] || I[R]))) && (!I[Q] || IMP(!I[Q], (I[R] && I[P])));
  56.  
  57.   //(P -> (R ^ (Q v R))) ^ (~Q v (~Q -> (R ^ P))
  58. }
  59.  
  60. void mostra_tabela()
  61. {
  62.   int fim = FALSE;
  63.  
  64.   inicializa_formula();
  65.  
  66.   printf("Fórmula Proposicional:\n");
  67.   printf("(P -> (R ^ (Q v R))) ^ (~Q v (~Q -> (R ^ P))\n\n");
  68.   //  printf("P -> (R ^ (Q v R)))\n");
  69.   for (int c = 0; c < VARS; c++)
  70.   {
  71.     printf(" %c |", nome[c]);
  72.   }
  73.   printf(" H\n");
  74.  
  75.   for (int c = 0; c < 4 * VARS + 3; c++)
  76.     printf("-");
  77.   printf("\n");
  78.  
  79.   while (!fim)
  80.   {
  81.      for (int c = 0; c < VARS; c++)
  82.     {
  83.       if (I[c])
  84.         printf(" 1 |");
  85.       else
  86.         printf(" 0 |");
  87.     }
  88.  
  89.     if (valor_formula())
  90.       printf(" 1\n");
  91.     else
  92.       printf(" 0\n");
  93.  
  94.     if (ultima_interpretacao())
  95.       fim = TRUE;
  96.     else
  97.       proxima_interpretacao();
  98.   }
  99. }
  100.  
  101. int main()
  102. {
  103.   setlocale(LC_ALL, "Portuguese");
  104.  
  105.   printf("*******************************\n");
  106.   printf("*  Cálculo de Tabela Verdade  *\n");
  107.   printf("*******************************\n\n\n");
  108.  
  109.   mostra_tabela();
  110.  
  111.   return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement