Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Перевод в постфиксную нотацию - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ многоэтажные дроби в wxwigets http://www.cyberforum.ru/cpp/thread42311.html
Помогите реализовать ввод многоэтажных дробей в wxwigets(С++). Есть ли какие-нибудь базовые классы в wx для их реализации?
C++ Win32 in Visual Studio 2008 Я в С++ полный ноль, но хотелось бы создать простое приложение с интерфейсом(Button, Label, Edit...). Помогите советами и если не трудно набрасайте код. Заранее спастбо. http://www.cyberforum.ru/cpp/thread42242.html
Симплетрон C++
Прошу помощи с проектом. Во время компиляции вылетают следующие ошибки Compiling... 1>postfix.cpp 1>e:\g7\sim\sim\stack.h(5) : error C2011: 'stack' : 'class' type redefinition 1> ...
Идентификатор не найден C++
что не так....кажется все уже проверил... error C3861: sum_full: идентификатор не найден c:\documents and settings\admin\рабочий стол\compressed_matrix\compressed_matrix\main.cpp full_matrix...
C++ fseek вместо дополнительного массива (язык Си) http://www.cyberforum.ru/cpp/thread42094.html
Задача - в текстовом файл заменить все последовательности идущих подряд пробелов одним пробелом. Новый файл не создавать. Описание программы - прежде всего сохраняю размер текстового файла в...
C++ Реализация идеомы UniqueType Идея проста и стоит во главе идеологии C++: std::string password, login; unsigned short TCPport, YearOfBirth; Компилятор запрещает бессмысленные присвоения: login = TCPport; // error Однако не... подробнее

Показать сообщение отдельно
RazorQ
577 / 344 / 9
Регистрация: 06.02.2009
Сообщений: 1,386

Перевод в постфиксную нотацию - C++

30.06.2009, 22:42. Просмотров 1283. Ответов 1
Метки (Все метки)

Есть функция для перевода выражения в постфиксную нотацию.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
void postfix::convertToPostfix(char infix[], char postfix[])
{
    int i=0, j=0;
    char nowch , op;
    
    // читаем пока стек не пуст
    while(st.isEmpty())
    {
        nowch = infix[i++];
        if((nowch >= '0') && (nowch <= '9'))
            postfix[j++] = nowch; // если цифра, то помещаем в массив
        else if(nowch == '(')
            st.put(nowch);
        else if(isOperator(nowch)) // если оператор
        {
            op = st.returnVal();
            if((op == ')') || (op == '('))
            {
                st.put(nowch);
                continue;
            }
            else
                op = st.pop();
            while((precedence(op, nowch) == 0) || !(precedence(op, nowch) == -1))
            {
                postfix[j++] = op;
 
                op = st.returnVal();
                if((op == ')') || (op == '('))
                    break;
                else
                    op = st.pop();
            }
            st.put(nowch);
        }
        else if(nowch == ')')
        {
            op = st.pop();
            while(op != '(')
            {
                postfix[j++] = op;
                op = st.pop();
            }
        }
    }
}
она вызывает функции isOperator() и precedence().
Функция isOperator() - возвращает 1 если аргумент является оператором
Функция precedence() - возвращает -1 если первый оператор меньше второго по старшинству. Возвращает 0 если операторы равны по старшинству. Возвращает 1 если первый оператор больше второго по старшинству.
Сама функция (convertToPostfix()) переводит инфиксное выражение в постфиксное, но она не правильно работает. То есть работает, но не так как надо. Например, ввожу выражение (6 + 2) *5 - 8 / 4. Должно получится 6 2 + 5 * 8 4 / - а получается 6 2 + 5 * 8 4 /. Я знаю причину, но не могу решить проблему. Во время работы функция помещает в стек -, а потом извлекает его и помещает туда /. При этом - теряется потому что нигде не используется. Помогите исправить. Если надо, то выложу все необходимые функции и стек.

Добавлено через 5 часов 9 минут 2 секунды
Форумчане, очень надо доделать функцию. Я уже второй день голову ломаю. Помогите, пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru