![]() |
|
Модераторы: volvo877, Snowy, MetalFan |
![]()
|
|
| MaxXx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 6.6.2006 Репутация: нет Всего: нет |
Мне нужно составить алгоритм вычисляющий скобочное выражение т.е.
пример: выражение: (1+3)-(2-1) результат: 3 Для реализации алгоритма я использую обратную польскую запись. Но у меня возникли проблемы (алгоритм "не хочет" приводить выражение к польской записи). Уважаемы программисты помогите отыскать отыскать ошибки в моем коде) --------------------------------------
Добавлено @ 12:47 А это алгоритм которым я пользовался: Входная строка просматривается слева направо, если входной символ является операндом (число или буква), то он переносится в выходную строку, иначе обрабатывается стеком по нижеприведенному принципу. ■Если стек пуст, то операция просто заносится в стек. ■Если в стеке верхняя операция (элемент стека) имеет более низкий приоритет, то рассматриваемая операция просто проталкивается в стек. ■Если в стеке верхняя операция имеет более высокий приоритет, то из стека вытапливаются в выходную строку все элементы, до тех пор пока не встретится операция с приоритетом ниже чем у рассматриваемой, после чего она проталкивается в стек. ■Если входной символ "(", то он проталкивается в стек. Если входной символ ")", то он выталкивает из стека в выходную строку все операции до ближайшей "(". Сами скобки взаимно уничтожаются и в выходную строку не попадают. |
|||
|
||||
| MaxXx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 6.6.2006 Репутация: нет Всего: нет |
Вроде сам сделал.....Но эта реализация не подходит для чисел с произвольной разрядностью.
А как можно представлять числа с произвольной разрядностью? |
|||
|
||||
| Mailman |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 6.6.2006 Репутация: нет Всего: нет |
Не стал читать если честно. Попробуй использовать массив из строк [255] для промежуточной польской записи. У меня так работает. А в неё и произвольная разрядность и ар-е знаки пойдут. Чтобы выделить число используй while s[i] in [0..9] do inc(i); Ну и подобное для пропуска многобуквенной переменной.
Заранее прошу прощения если написал не то, что хотели. Это сообщение отредактировал(а) Mailman - 6.6.2006, 20:34 |
|||
|
||||
| MaxXx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 6.6.2006 Репутация: нет Всего: нет |
Спасибо!!!! Вроде то...Попробую реализовать....
У вас не осталось рабочего примера..Если "да" то киньте мне его пожалуйста на мыло..... |
|||
|
||||
| e-moe |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 3.8.2004 Где: Украина, Донецк Репутация: нет Всего: 4 |
http://labinskiy.com/Calc.zip
когда-то сам писал.. пока только считает, а в планах было символьное дифференцирование. |
|||
|
||||
| MaxXx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 6.6.2006 Репутация: нет Всего: нет |
Буду разбираться.....Всем спасибо
|
|||
|
||||
![]()
|
| Правила форума "Delphi" | |
|
|
Запрещается! 1. Обсуждать и делится взломанными компонентами или программным обеспечением 2. Публиковать ссылки на варез 3. Оффтопить
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |