![]() |
|
![]() ![]() ![]() |
|
Валерия |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: нет Всего: 8 |
Нужно написать прогу которая сможет распознавать типа такого
((5+(3-2))*sin(2*2))/5 Как примерно такое делать ![]() |
|||
|
||||
Walker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 23.10.2006 Репутация: нет Всего: 16 |
Доброго времени суток, Валерия!
Тема уже поднималась. Без определённых соглашений никак. Пользователь может накатать любую ересь. Не знаю, какой вы придумали интерфейс, но могу предложить, например, следующее: Поле отображения формулы readonly - заполняется с помощью button, combobox, listbox и прочих контролов, которые могут предложить набор функций, ограниченный Вами. Удачи! -------------------- "От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..." |
|||
|
||||
esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
Вопрос почти наверняка на формальные грамматики и распознавание языка. И бутоны тут скорей всего не причем. Валерия, построй грамматику для ваших выражений переведите грамматику в форму Хомского и распознавайте -------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
NaOH |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 8.12.2007 Репутация: нет Всего: нет |
Я делал программку для распознования математических выражений на Делфи
![]() Кто хочет, могу показать... * Это сообщение отредактировал(а) NaOH - 8.12.2007, 06:08 |
|||
|
||||
Валерия |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: нет Всего: 8 |
NaOH, я хочу
![]() |
|||
|
||||
dereyly |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 217 Регистрация: 16.6.2006 Репутация: 1 Всего: 4 |
Обычно строят дерево арифмитических выражений, можно так же через префиксную форму
((5+(3-2))*sin(2*2))/5 ~ [3] [2] [-] [5] [+] [2] [2] [*] [sin] [*] [5] [/] В моем фиговом интерпретаторе это работало через 2 стека (только непомню как я там унарный минус обходил) Стек операндов(чисел): [3] [2] [5] [2] [2] [5] Стек операций [-] [+] [*] [sin] [*] [/] (Будем читать стек слева направо) Берем первую операцию [-], она требует 2 операнда (т.е. мы минус не считаем унарным), далее берем [3] [2] и вычисляем 3-2=1 и записывем в стек результат у нас получится 2. [1] [5] [2] [2] [5] [+] [*] [sin] [*] [/] 3. [6] [2] [2] [5] [*] [sin] [*] [/] 4. [12] [2] [5] [sin] [*] [/] 5. [-0.54] [2] [5] [*] [/] 6. [-1.04] [5] [/] 7. [-0.22] [] Понятно что последнее число оставшееся в стеке есть ответ Так же следует рассмотреть 3 случая 1. Стек 1 содержит больше 1й цифры 2. Стек 2 не пуст 3. Оператору не хватает операндов Все случаи значат что исходное выражение составлено не правильно |
|||
|
||||
NaOH |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 8.12.2007 Репутация: нет Всего: нет |
Валерия, выложил на своей страничке (наз."интерпритатор") с исходниками ![]() Может не только арифметические опреации распознавать, но и многие функции, напимер cos, sin, abs, tg, ln ... Жду комментарии... ![]() Это сообщение отредактировал(а) NaOH - 8.12.2007, 17:41 |
|||
|
||||
Валерия |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 10.3.2007 Репутация: нет Всего: 8 |
Спасибо, только в Дэлфи я не пишу а на C#
![]() Да и уже не важно, я всетаки забила на это, и решила что бы после ввода текстовой строки, генерировалась и компилировалась другая программа, которая передает обратно результат ![]() Всем спасибо ![]() |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Я когда-то в древности писал парсер для логических выражений на VB. Если нужно - могу поискать.
Естественно, что пользователь должен знать правила написания выражения: что скобки должны быть парными и т.п. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 1 Всего: 37 |
В .NET не нужно придумывать такие велосипеды.
|
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Все зависит от степени стандартности задачи ![]() Кстати, вот подобная тема в ветке по Java -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |