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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ C++. Файлы ввода-вывода, массивы, указатели http://www.cyberforum.ru/cpp/thread42519.html
Люди, учусь на инженера... зачем я пошла учится сюда уже не знаю... Помогите кто чем может, профи просьба сильно не ругаться и не матерится)) На языке Си) Написать программу, которая позволяет: - осуществлять запись в новый текстовый файл сведений о студентах в формате: Ф.И.О. Информатика Физика Математика Иванов И.И. 4 3 4 Петров П.П. 4 4 5 ... ... ... ...
C++ Уменьшение значений элементов матрицы(перегрузка операции "--") Задача Перегрузите операцию "--" позволяющую уменьшать переменную типа матрица на 1. В результате каждылемент матрицы должен уменьшаться на 1. Хм, можете ли написать мне код готовой программы. http://www.cyberforum.ru/cpp/thread42334.html
многоэтажные дроби в wxwigets C++
Помогите реализовать ввод многоэтажных дробей в wxwigets(С++). Есть ли какие-нибудь базовые классы в wx для их реализации?
C++ Win32 in Visual Studio 2008
Я в С++ полный ноль, но хотелось бы создать простое приложение с интерфейсом(Button, Label, Edit...). Помогите советами и если не трудно набрасайте код. Заранее спастбо.
C++ Симплетрон http://www.cyberforum.ru/cpp/thread42209.html
Прошу помощи с проектом. Во время компиляции вылетают следующие ошибки Compiling... 1>postfix.cpp 1>e:\g7\sim\sim\stack.h(5) : error C2011: 'stack' : 'class' type redefinition 1> e:\g7\sim\sim\stack.h(5) : see declaration of 'stack' 1>e:\g7\sim\sim\postfix.cpp(7) : error C2079: 'st' uses undefined class 'stack' 1>e:\g7\sim\sim\postfix.cpp(71) : error C2228: left of '.put' must have...
C++ Идентификатор не найден что не так....кажется все уже проверил... error C3861: sum_full: идентификатор не найден c:\documents and settings\admin\рабочий стол\compressed_matrix\compressed_matrix\main.cpp full_matrix mf1(number_of_rows); // создадим матрицу 1 mf1.init_full(number_of_rows); // заполним значениями full_matrix mf2(number_of_rows); // создадим матрицу 2 mf2.init_full(number_of_rows); //... подробнее

Показать сообщение отдельно
RazorQ
 Аватар для RazorQ
576 / 343 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
30.06.2009, 22:42     Перевод в постфиксную нотацию
Есть функция для перевода выражения в постфиксную нотацию.
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 секунды
Форумчане, очень надо доделать функцию. Я уже второй день голову ломаю. Помогите, пожалуйста.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru