Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 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();
}
Вечеслав вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Логическая ошибка "Обратной польской записи" 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