Advertisement
Guest User

13_var

a guest
Jun 25th, 2017
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.23 KB | None | 0 0
  1. // 13 вариант. Найти зеачение булевского выражения в обратной польской записи
  2. #define IS_BOOL(x) ((1 == x || 0 == x) ? 1 : 0)
  3. #define IS_OPER(x) ((| == x || & == x) ? 1 : 0)
  4.  
  5. int inp[n];
  6. ... // Получаем пример, забиваем им inp
  7.  
  8. int elems = n; // Количество элементов(операторов и констант) в массиве
  9. int j, k;
  10. while (elems > 1) {
  11.     j = i+1;
  12.     while (i < n-1 && -1 = inp[j]) // Скипаем пустые ячейки
  13.         ++j;
  14.        
  15.     k = j+1;
  16.     while (i < n && -1 = inp[k]) // Скипаем пустые ячейки
  17.         ++k;
  18.        
  19.     if (n == k) {
  20.         printf("ERROR; BAD INPUT");
  21.         return 1;
  22.     }
  23.    
  24.     for (int i = 0; i < n - 2; ++i) {
  25.         if (IS_BOOL(inp[j]) && IS_BOOL(inp[k] && IS_OPER(inp[i])) {
  26.             inp[i] = calc(inp[i], inp[j], inp[k]); // calc - функция, возвращающая константу по опреатору и двум константам
  27.             inp[j] = inp[k] = -1;
  28.         }
  29.     }
  30. }
  31.  
  32. int res; // Сюда сунем ответ
  33. for (int i = 0; i < n; ++i) {
  34.     if (-1 != inp[i])
  35.         res = inp[i];
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement