Войти

Показать полную графическую версию : [решено] Существуют ли способы определения функции скобок без ОПЗ для калькулятора на С#?


Ksenya
13-12-2011, 00:49
С использованием ОПЗ непонятности, ищу альтернативные варианты решения..сам калькулятор - инженерный на С#..возможен какой-нибудь подход, не относящийся к использованию добавления класса ОПЗ на С#? Интересно послушать варианты и постараться воплотить их в жизнь.

Delirium
13-12-2011, 01:00
Ничего не понял из текста сообщения. Что есть ОПЗ?

lxa85
13-12-2011, 01:16
Delirium, ОПЗ - обратная польская запись (дальше я думаю ты знаешь :))
Ksenya, можешь попробовать создать класс "натурального" разбора строки. Т.е. повторить действия человека при решении примера. Т.е. следовать принятой логике установления приоритетов выполнения операций, и т.д. Насколько алгоритм будет рекурсивным - решать тебе.
Такой, многопроходный вариант составления дерева решения. (ОПЗ можно получить за один просмотр выражения с использованием стека)
Я могу даже тебе попробовать структуры нарисовать, но это будет не совсем правильно, т.к. задача поставлена для тебя :)

Ksenya
13-12-2011, 11:48
нет, не знаю.. исходя из основной программы для которой небоходимо написать опз, это сложная задача..поэтому в этом вопросе мне хотелось бы послушать другие варианты написания..вот к примеру: является ли это альтернативой: http://netobf.com/HtmlView.aspx?ItemId=88

lxa85
13-12-2011, 12:54
Ksenya, я тебя не понимаю. Напиши пожалуйста задание полностью.
ОПЗ - требование ТЗ?
Алгоритмов перевода обычной записи в опз - много.
Если взять стек, то на вскидку гугл сказал раз (http://www.vr-online.ru/content/obratnaja-polskaja-zapis-chast-1-169), два (http://www.interface.ru/home.asp?artId=1492).

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

Ksenya
13-12-2011, 13:31
задание - создать калькулятор (инженерный).(http://forum.oszone.net/post-1785298.html#post1785298).http://forum.oszone.net/post-1785298.html#post1785298 Со всеми его функциями и операциями. Ищу оптимизированные варианты для относительно не сложной реализации)
вот пример с опз из инета(код)
но вроде как со стеком, (ссылку на которого мне предложили) проще
как считаете, мне нужно ваше мнение, потому что я уже запарилась..

Ksenya
13-12-2011, 13:59
нет предложений по поводу того или иного?) мне бы хоть вектор какой-нибудь..сижу без дела, без действий..

lxa85
13-12-2011, 14:54
Ksenya, я дома Visual Studio Express C# установлю, я тебе скажу.
Код то вообще работает? ОПЗ получает?
А вообще так: Если делать нечего, выключи комп и займись чем-нибудь полезным. Погулять сходи, или ляг поспи, студент как никак - можно :)
Если спать невмоготу - напиши десяток примеров которые должен считать калькулятор.
Просто понятие "инженерный" слишком расплывчато, интересны конкретные тонкости его работы.
И как самый крайний случай - получи дерево выражения. Может это будет и не простой подготовительный этап, зато потом будет все намного проще.

Отдыхай, до вечера свободное время. :)

P.S. А! Так оказывается это я, тот самый негодяй, что сподвиг тебя на ОПЗ! Вот оно что... :blush:

Ksenya
13-12-2011, 15:11
ладно, чем-нибудь позанимаюсь, просто после корректировки входимых переменных, заметила что еще необходимо добавить дополнит. символы опреаций: '√', '1/x', 'Mod',.. для символьной переменнной данных их размер превышает допустимое, перевод в строковое - не покатит, структура опз помешает..

:) да, это моя старая проблема..и теперь или я сней расквитаюсь, или она со мной расквитается((

до вечера - всмысле скачивать прогу? :) можно проще - через http://nnm-club.ru/forum/

Ksenya
13-12-2011, 20:35
как там ваша установка?

Ksenya
13-12-2011, 21:59
похоже никак) ладно, сдамся пожалуй

lxa85
13-12-2011, 22:07
Ksenya, среду Visual C# Express развернул, копаюсь в приведенном тобой коде OPZ(2).zip
Я давно не брал в руки шашек, пока привыкаю к новым конструкциям.

Ksenya
13-12-2011, 23:15
я не знаю насколько код дееспособен..просто на мой взгляд это был наиболее оптимальный вариант..в нем я доработала несколько элементов.. я просто не знаю..как его можно связать с моей главной программой и включить в класс дополнит. действия ..если вы позволите привести главную программу в пример..

lxa85
14-12-2011, 13:22
Ksenya, посмотрел вчера исходник инженерного калькулятора. Если ты хочешь делать копию инженерного калькулятора MS, то прошу тебя подумать еще раз. Это очень неудобный калькулятор.
Далее говорю по виду Windows 7. Как было в XP я не вспомню.

По делу:
Я предлагаю тебе сначала сформировать строку выражения, а только затем ее обрабатывать. MS пошли дальше, они все время вычисляют промежуточные значения выражения. Иногда всего, а иногда то, что в скобках и не нарушает синтаксиса. Причем исправить выражение можно только набрав его заново.
Заметь, сложные вещи, например 1/x или e^x калькулятор заменяет словесным выражением.

В любом случае, что тебе сейчас надо сделать:
Тебе нужно сделать простейшую программу, которая тебе будет переводить строку выражения в ОПЗ.
Про основную форму калькулятора пока забываешь.
Договорись между собой о том, как ты будешь обозначать то или иное действие.
Обозначь порядок приоритетов (определение желательно вынести в функцию)
Приведенный тобою алгоритм опз, сразу пытается посчитать выражение, а это не то, что нужно.
Т.е. тебе надо полностью построить логику синтаксического анализатора.
Картинки будут вечером, и скорее всего от руки.

Ksenya
14-12-2011, 21:35
Ага. Хм, штука убийственная, да=)) ..вот по-поводу исходника..мне кажется, что он заменен на старый, в конце прошлой темы я предложила новый..но совсем не тот, который я выкладывала(проверяла)..
а вот по поводу логического построения действий опз .. не знаю даже каким боком ее можно связать с моей главной программой) без какого-либо вектора задумки..первоначально с некоторыми доработками мне показалось, что переменные чисел и операций без скобок, не перекроют их аналогов, но со скобками..
на мой взгляд, лучше если я приведу в пример действительно ту прогу, на которой я остановилась и класс опз, с некоторыми доработками
..на куда-нибудь..вам на почту.) сайт популярен=) и известен не тока мне)




© OSzone.net 2001-2012