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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 54, средняя оценка - 4.83
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,931
Записей в блоге: 1
#1

Преобразовать выражение в постфиксную форму - C++

11.02.2012, 12:02. Просмотров 7787. Ответов 12
Метки нет (Все метки)

Преобразовать выражение, составленное из цифр и знаков арифметических операций (+,-,*,/) в постфиксную форму. В постфиксной форме сначала записываются операнды, а затем знак операции.
Обычная запись
3+4
(5-4)*2
2*(3+4)*5

Постфиксная запись
3 4 +
5 4 – 2 *
2 3 4 + * 5 *

я сначала думал с помощью switch но не подходит
Может кто алгоритм подскажит, или функция есть кака это

Добавлено через 1 час 55 минут
Кто то знает как это можно сделать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2012, 12:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Преобразовать выражение в постфиксную форму (C++):

Преобразовать выражение в префиксной форме в постфиксную (C -> C++) - C++
Помогите пожалуйста перевести программу на язык СИ. #include <cctype> #include <iostream> #include <string> typedef std::string ...

Перевести выражение из инфиксной формы в постфиксную - C++
Помогите пожалуйста написать программу. Дана строка, в которой записано математическое выражение в инфиксной форме. В этой строке могут...

Неверный перевод в постфиксную форму - C++
Реализация алгоритма перевода выражения в постфиксную форму и последующего вычисления. Проблема в том, что когда после скобок в выражении...

Преобразовать строку в выражение - C++
Добрый день, вообщем суть проблемы такова, есть какая-то функция, к примеру y=cos(x) и эту функцию необходимо ввести с клавиатуры или...

Преобразовать строку, содержащую выражение на Си - C++
Преобразовать строку, содержащую выражение на Си с операциями (=,==,!=,a+=,a-=), в строку, содержащую эти же операции с синтаксисом языка...

Логическое выражение преобразовать в бинарное дерево - C++
Преобразовать логическое выражение в бинарное дерево и вывести его.Выражение может содержать логическое и,или,отрицание(&,|,! ...

12
remarkes
303 / 226 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
11.02.2012, 12:28 #2
Цитата Сообщение от Sylar9 Посмотреть сообщение
функция есть кака это
стандартных функций нет

Добавлено через 5 минут
Цитата Сообщение от Sylar9 Посмотреть сообщение
Может кто алгоритм подскажит
собственно программа и будет алгоритмом. вкрадце так:
- читаешь выражение как строку посимвольно.
- находя знак, выводишь его после чисел (создаешь соответствующую функцию).
- находя скобки, ищешь внутри знак и убрав скобки, выводишь знак после чисел (предыдущая функция).

Добавлено через 46 секунд
Цитата Сообщение от Sylar9 Посмотреть сообщение
Постфиксная запись
еще это называется польская запись
0
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,931
Записей в блоге: 1
11.02.2012, 12:49  [ТС] #3
Цитата Сообщение от remarkes Посмотреть сообщение
стандартных функций нет

Добавлено через 5 минут

собственно программа и будет алгоритмом. вкрадце так:
- читаешь выражение как строку посимвольно.
- находя знак, выводишь его после чисел (создаешь соответствующую функцию).
- находя скобки, ищешь внутри знак и убрав скобки, выводишь знак после чисел (предыдущая функция).

Добавлено через 46 секунд
еще это называется польская запись
- читаешь выражение как строку посимвольно.
это надо объявить переменую string
0
remarkes
303 / 226 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
11.02.2012, 13:24 #4
Цитата Сообщение от Sylar9 Посмотреть сообщение
это надо объявить переменую string
это смотря на чем писать - на си или с++. я пишу на си.
имхо, достаточно char:
C
1
2
#define MAX_INPUT 256
char expr_cls[MAX_INPUT];
Начинаешь читать посимвольно. вначале у тебя два варианта:
- цифра
- скобка
то есть у нас условие. цифру можно проверить isdigit(expr_cls)

ветвление может понадобиться при определении оператора
C
1
2
3
4
5
6
7
8
9
10
11
12
char find_operator(char expr_cls[])
{
    int i;
    for (i=0; i<strlen(expr_cls); i++) {
        switch (expr_cls[i]) {
            case '+': case '-': case '*': case '/': 
            return expr_cls[i]; break;
            default: break;
        }
    }
    return 0;
}
0
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,931
Записей в блоге: 1
11.02.2012, 13:50  [ТС] #5
Цитата Сообщение от remarkes Посмотреть сообщение
это смотря на чем писать - на си или с++. я пишу на си.
имхо, достаточно char:
C
1
2
#define MAX_INPUT 256
char expr_cls[MAX_INPUT];
Начинаешь читать посимвольно. вначале у тебя два варианта:
- цифра
- скобка
то есть у нас условие. цифру можно проверить isdigit(expr_cls)

ветвление может понадобиться при определении оператора
C
1
2
3
4
5
6
7
8
9
10
11
12
char find_operator(char expr_cls[])
{
    int i;
    for (i=0; i<strlen(expr_cls); i++) {
        switch (expr_cls[i]) {
            case '+': case '-': case '*': case '/': 
            return expr_cls[i]; break;
            default: break;
        }
    }
    return 0;
}
а полность пример как выглядит должен
0
remarkes
303 / 226 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
11.02.2012, 17:52 #6
Цитата Сообщение от Sylar9 Посмотреть сообщение
а полность пример как выглядит должен
ну код надо думать, щас сижу думаю.
0
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.02.2012, 18:01 #7
Обратная польская запись: примеры реализации
0
remarkes
303 / 226 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
11.02.2012, 19:43 #8
ru.wikipedia.org/wiki/Алгоритм_сортировочной_станции
0
Вложения
Тип файла: txt polsk_notation.c.txt (8.4 Кб, 322 просмотров)
remarkes
303 / 226 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
11.02.2012, 20:01 #9
Jupiter, то, что вы привели - это не совсем то. там пример вывода результата на основе введенного выражения в польской нотации, причем код на си нерабочий (не доделан). подобный пример (но естественно рабочий) был в K&R.
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
12.02.2012, 07:40 #10
http://e-maxx.ru/algo/expressions_parsing
0
Лисёнок
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 3
25.12.2012, 22:06 #11
помогите пожалуйста решить задачку на С#. Необходим код, работающий на линуксе
Дана формула.Перевести ее в постфиксную форму.Вычислить значение формулы в постфиксной форме.
Заранее огромнейшее спасибо
0
Маргарита28
0 / 0 / 0
Регистрация: 05.03.2017
Сообщений: 1
28.03.2017, 18:51 #12
Алгоритм перевода выражения в постфиксную запись следующий.

Константы и переменные кладутся в формируемую запись в порядке их появления в исходном массиве.
При появлении операции в исходном массиве:
если в стеке нет операций или верхним элементом стека является открывающая скобка, операции кладётся в стек;
если новая операции имеет больший* приоритет, чем верхняя операции в стеке, то новая операции кладётся в стек;
если новая операция имеет меньший или равный приоритет, чем верхняя операции в стеке, то операции, находящиеся в стеке, до ближайшей открывающей скобки или до операции с приоритетом меньшим, чем у новой операции, перекладываются в формируемую запись, а новая операции кладётся в стек.
Открывающая скобка кладётся в стек.
Закрывающая скобка выталкивает из стека в формируемую запись все операции до ближайшей открывающей скобки, открывающая скобка удаляется из стека.
После того, как мы добрались до конца исходного выражения, операции, оставшиеся в стеке, перекладываются в формируемое выражение.
0
GbaLog-
28.03.2017, 19:04     Преобразовать выражение в постфиксную форму
  #13

Не по теме:

Вас не смутило, что теме 5 лет?

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2017, 19:04
Привет! Вот еще темы с ответами:

Преобразовать в числа и вычислить арифметическое выражение - C++
написать программу, которая просит ввести из 5 знаков состоящую цепочку типа С формата xx+yy или xx-yy , где xx и yy целые двухзначные...

Преобразовать выражение используя функцию abs - C++
как можно заменить это,через модуль? if((i &gt; -1000 &amp;&amp; i &lt;-99)||(i &lt; 1000&amp;&amp; i &gt;99))

Преобразовать арифметическое выражение из постфиксной формы в инфиксную - C++
У меня задача: преобразовать арифметическое выражение из переменных, знаков арифметическич операций и круглых скобок из постфиксной формы в...

Помогите преобразовать выражение в ПОЛИЗ и вывести его - C++
Нужно преобразовать исходное арифметическое выражение записанное в файле в ПОЛИЗ и записать его в преобразованном виде в выходной файл....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.03.2017, 19:04
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru