|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
29.06.2013, 17:27 | #1 |
Новичок
Джуниор
Регистрация: 25.06.2013
Сообщений: 1
|
Сделать подсчёт обратной польской записи
Кто поможет нужно чтобы не только переводил в обратную польскую но и мог её посчитать
#include <stdio.h> #include <conio.h> #define N 255 #define OK 1 #define NotOK 0 #define Op 5 char Stack[N]; char opers[Op]={'+', '-', '*', '/', '('}; int priors[Op]={1, 1, 2, 2, 0}; int Top; int Prior(char op1, char op2) { int op1p, op2p, i; op1p=0; op2p=0; for (i=0; i<Op; i++) { if(op1==opers[i]) op1p=i; if(op2==opers[i]) op2p=i; } if(priors[op1p]<=priors[op2p]) return 1; return 0; } int IsDigit(char c) { if(c>='0'&&c<='9') return 1; return 0; } int IsOper(char c) { int i; for(i=0; i<Op; i++) { if(c==opers[i]) return 1; } return 0; } int IsOpBr(char c) { if(c=='('||c=='['||c=='{') return 1; return 0; } int IsClBr(char c) { if(c==')'||c==']'||c=='}') return 1; return 0; } int Push(char Ch) { if (Top>=N) return NotOK; Stack[Top++]=Ch; return OK; } int Pop(char *pCh) { if (Top<=0) return NotOK; *pCh=Stack[--Top]; return OK; } void main() { char inexpr[N]; char outexpr[N]; char c; int i, j, x; i=0; j=0; Top=0; printf("Enter an expression\n"); scanf("%s", inexpr); while(inexpr[i]!='\0') { if(IsDigit(inexpr[i])) { outexpr[j]=inexpr[i]; j++; } if(IsOpBr(inexpr[i])) { Push(inexpr[i]); } if(IsClBr(inexpr[i])) { Pop(&c); while(!IsOpBr(c)) { outexpr[j]=c; Pop(&c); j++; } } if(IsOper(inexpr[i])&&inexpr[i]!='(') { outexpr[j]=' '; j++; x=Pop(&c); if(x==OK) { while(Prior(inexpr[i], c)) { outexpr[j]=c; j++; x=Pop(&c); if(x==NotOK) break; } } if(x!=NotOK) Push(c); Push(inexpr[i]); } i++; } while(Pop(&outexpr[j])) j++; outexpr[j]='\0'; printf("%s", outexpr); getch(); } |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Логическая ошибка "Обратной польской записи" | Fanyuus | Общие вопросы C/C++ | 10 | 22.05.2013 18:50 |
Вопросы по обратной польской записи | АлексВ | Паскаль, Turbo Pascal, PascalABC.NET | 8 | 01.06.2012 11:29 |
[Visual C++] Калькулятор с обратной польской нотацией | WhiteKuz | Visual C++ | 0 | 22.03.2012 00:13 |
восстановление выражения по его прямой польской записи | Котик | Общие вопросы C/C++ | 1 | 29.04.2010 22:30 |
преобразования польской формы записи уравнения | Безбашик | Общие вопросы по Java, Java SE, Kotlin | 6 | 12.05.2009 10:25 |