Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 13 вариант. Найти зеачение булевского выражения в обратной польской записи
- #define IS_BOOL(x) ((1 == x || 0 == x) ? 1 : 0)
- #define IS_OPER(x) ((| == x || & == x) ? 1 : 0)
- int inp[n];
- ... // Получаем пример, забиваем им inp
- int elems = n; // Количество элементов(операторов и констант) в массиве
- int j, k;
- while (elems > 1) {
- j = i+1;
- while (i < n-1 && -1 = inp[j]) // Скипаем пустые ячейки
- ++j;
- k = j+1;
- while (i < n && -1 = inp[k]) // Скипаем пустые ячейки
- ++k;
- if (n == k) {
- printf("ERROR; BAD INPUT");
- return 1;
- }
- for (int i = 0; i < n - 2; ++i) {
- if (IS_BOOL(inp[j]) && IS_BOOL(inp[k] && IS_OPER(inp[i])) {
- inp[i] = calc(inp[i], inp[j], inp[k]); // calc - функция, возвращающая константу по опреатору и двум константам
- inp[j] = inp[k] = -1;
- }
- }
- }
- int res; // Сюда сунем ответ
- for (int i = 0; i < n; ++i) {
- if (-1 != inp[i])
- res = inp[i];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement