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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2014, 21:31   #1
egrozavr
Пользователь
 
Регистрация: 26.03.2014
Сообщений: 17
По умолчанию Разобрать математическое выражение на лексемы

С клавиатуры в вводится какое-либо выражение, например "((-3*5)+7)+2)*2-8". По нажатию кнопки это математическое выражение должно выводиться в listbox по след. правилам (метод Дейкстры):

1. Операторы с меньшим приоритетом вытесняют операторы с большим приоритетом
2. скобка "(" кладётся сверху
3. скобка ")" вытесняет все операторы до "("

Т.е. в listbox должно быть выведено вот такое выражение: 735 *-2+2*8-, если я конечно правильно посчитал.
egrozavr вне форума Ответить с цитированием
Старый 27.03.2014, 09:41   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
((-3*5)+7)+2)*2-8
   текущий ввод:.((-3*5)+7)+2)*2-8
стек операторов:
 выходной поток:

   текущий ввод:((-3*5)+7)+2)*2-8
стек операторов:(
 выходной поток:

   текущий ввод:((-3*5)+7)+2)*2-8
стек операторов:((
 выходной поток:

в правилах нет как работать с унарным оператором (отрицательное число) можно считать это как "(0-3)"
   текущий ввод:((-3*5)+7)+2)*2-8
стек операторов:((- 
 выходной поток:0

   текущий ввод:((-3*5)+7)+2)*2-8
стек операторов:((
 выходной поток:03-

   текущий ввод:((-3*5)+7)+2)*2-8
стек операторов:((*
 выходной поток:03-

   текущий ввод:((-3*5)+7)+2)*2-8
стек операторов:((*
 выходной поток:03-5

   текущий ввод:((-3*5)+7)+2)*2-8
стек операторов:((*) =(( // "(" вытесняет все до ")" 
 выходной поток:03-5*

   текущий ввод:((-3*5)+7)+2)*2-8
стек операторов:((+
 выходной поток:03-5*

   текущий ввод:((-3*5)+7)+2)*2-8
стек операторов:((+
 выходной поток:03-5*7

   текущий ввод:((-3*5)+7)+2)*2-8
стек операторов:((+) =(
 выходной поток:03-5*7+

   текущий ввод:((-3*5)+7)+2)*2-8
стек операторов:(+
 выходной поток:03-5*7+

   текущий ввод:((-3*5)+7)+2)*2-8
стек операторов:(+
 выходной поток:03-5*7+2

   текущий ввод:((-3*5)+7)+2)*2-8
стек операторов:(+) = "пусто"
 выходной поток:03-5*7+2+

   текущий ввод:((-3*5)+7)+2)*2-8
стек операторов:*
 выходной поток:03-5*7+2+

   текущий ввод:((-3*5)+7)+2)*2-8
стек операторов:*
 выходной поток:03-5*7+2+2

   текущий ввод:((-3*5)+7)+2)*2-8
стек операторов:*- = - (меньшие вытесняют большие(
 выходной поток:03-5*7+2+2*

   текущий ввод:((-3*5)+7)+2)*2-8 
стек операторов:-
 выходной поток:03-5*7+2+2*8

и напоследок освобождаем стек операторов
    текущий ввод:((-3*5)+7)+2)*2-8. 
стек операторов:-
 выходной поток:03-5*7+2+2*8-
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 27.03.2014 в 09:45.
evg_m вне форума Ответить с цитированием
Старый 23.04.2014, 17:35   #3
egrozavr
Пользователь
 
Регистрация: 26.03.2014
Сообщений: 17
По умолчанию

Спасибо за алгоритм, но проблема даже не в нём, а в том как это всё написать в коде
egrozavr вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Математическое выражение Zazug Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 17.05.2013 16:25
Задание на математическое выражение Zazug Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 17.05.2013 11:46
Математическое выражение. Правильность. glushara Помощь студентам 1 22.04.2012 22:56
вычислить математическое выражение в Паскале! arxemond Помощь студентам 6 06.03.2012 00:28