Показать полную графическую версию : [решено] Существуют ли способы определения функции скобок без ОПЗ для калькулятора на С#?
С использованием ОПЗ непонятности, ищу альтернативные варианты решения..сам калькулятор - инженерный на С#..возможен какой-нибудь подход, не относящийся к использованию добавления класса ОПЗ на С#? Интересно послушать варианты и постараться воплотить их в жизнь.
Delirium
13-12-2011, 01:00
Ничего не понял из текста сообщения. Что есть ОПЗ?
Delirium, ОПЗ - обратная польская запись (дальше я думаю ты знаешь :))
Ksenya, можешь попробовать создать класс "натурального" разбора строки. Т.е. повторить действия человека при решении примера. Т.е. следовать принятой логике установления приоритетов выполнения операций, и т.д. Насколько алгоритм будет рекурсивным - решать тебе.
Такой, многопроходный вариант составления дерева решения. (ОПЗ можно получить за один просмотр выражения с использованием стека)
Я могу даже тебе попробовать структуры нарисовать, но это будет не совсем правильно, т.к. задача поставлена для тебя :)
нет, не знаю.. исходя из основной программы для которой небоходимо написать опз, это сложная задача..поэтому в этом вопросе мне хотелось бы послушать другие варианты написания..вот к примеру: является ли это альтернативой: http://netobf.com/HtmlView.aspx?ItemId=88
Ksenya, я тебя не понимаю. Напиши пожалуйста задание полностью.
ОПЗ - требование ТЗ?
Алгоритмов перевода обычной записи в опз - много.
Если взять стек, то на вскидку гугл сказал раз (http://www.vr-online.ru/content/obratnaja-polskaja-zapis-chast-1-169), два (http://www.interface.ru/home.asp?artId=1492).
Я не знаю, насколько от вас требуют оптимизации вычисления выражения (от нас требовали) для применения параллельных решателей.
задание - создать калькулятор (инженерный).(http://forum.oszone.net/post-1785298.html#post1785298).http://forum.oszone.net/post-1785298.html#post1785298 Со всеми его функциями и операциями. Ищу оптимизированные варианты для относительно не сложной реализации)
вот пример с опз из инета(код)
но вроде как со стеком, (ссылку на которого мне предложили) проще
как считаете, мне нужно ваше мнение, потому что я уже запарилась..
нет предложений по поводу того или иного?) мне бы хоть вектор какой-нибудь..сижу без дела, без действий..
Ksenya, я дома Visual Studio Express C# установлю, я тебе скажу.
Код то вообще работает? ОПЗ получает?
А вообще так: Если делать нечего, выключи комп и займись чем-нибудь полезным. Погулять сходи, или ляг поспи, студент как никак - можно :)
Если спать невмоготу - напиши десяток примеров которые должен считать калькулятор.
Просто понятие "инженерный" слишком расплывчато, интересны конкретные тонкости его работы.
И как самый крайний случай - получи дерево выражения. Может это будет и не простой подготовительный этап, зато потом будет все намного проще.
Отдыхай, до вечера свободное время. :)
P.S. А! Так оказывается это я, тот самый негодяй, что сподвиг тебя на ОПЗ! Вот оно что... :blush:
ладно, чем-нибудь позанимаюсь, просто после корректировки входимых переменных, заметила что еще необходимо добавить дополнит. символы опреаций: '√', '1/x', 'Mod',.. для символьной переменнной данных их размер превышает допустимое, перевод в строковое - не покатит, структура опз помешает..
:) да, это моя старая проблема..и теперь или я сней расквитаюсь, или она со мной расквитается((
до вечера - всмысле скачивать прогу? :) можно проще - через http://nnm-club.ru/forum/
похоже никак) ладно, сдамся пожалуй
Ksenya, среду Visual C# Express развернул, копаюсь в приведенном тобой коде OPZ(2).zip
Я давно не брал в руки шашек, пока привыкаю к новым конструкциям.
я не знаю насколько код дееспособен..просто на мой взгляд это был наиболее оптимальный вариант..в нем я доработала несколько элементов.. я просто не знаю..как его можно связать с моей главной программой и включить в класс дополнит. действия ..если вы позволите привести главную программу в пример..
Ksenya, посмотрел вчера исходник инженерного калькулятора. Если ты хочешь делать копию инженерного калькулятора MS, то прошу тебя подумать еще раз. Это очень неудобный калькулятор.
Далее говорю по виду Windows 7. Как было в XP я не вспомню.
По делу:
Я предлагаю тебе сначала сформировать строку выражения, а только затем ее обрабатывать. MS пошли дальше, они все время вычисляют промежуточные значения выражения. Иногда всего, а иногда то, что в скобках и не нарушает синтаксиса. Причем исправить выражение можно только набрав его заново.
Заметь, сложные вещи, например 1/x или e^x калькулятор заменяет словесным выражением.
В любом случае, что тебе сейчас надо сделать:
Тебе нужно сделать простейшую программу, которая тебе будет переводить строку выражения в ОПЗ.
Про основную форму калькулятора пока забываешь.
Договорись между собой о том, как ты будешь обозначать то или иное действие.
Обозначь порядок приоритетов (определение желательно вынести в функцию)
Приведенный тобою алгоритм опз, сразу пытается посчитать выражение, а это не то, что нужно.
Т.е. тебе надо полностью построить логику синтаксического анализатора.
Картинки будут вечером, и скорее всего от руки.
Ага. Хм, штука убийственная, да=)) ..вот по-поводу исходника..мне кажется, что он заменен на старый, в конце прошлой темы я предложила новый..но совсем не тот, который я выкладывала(проверяла)..
а вот по поводу логического построения действий опз .. не знаю даже каким боком ее можно связать с моей главной программой) без какого-либо вектора задумки..первоначально с некоторыми доработками мне показалось, что переменные чисел и операций без скобок, не перекроют их аналогов, но со скобками..
на мой взгляд, лучше если я приведу в пример действительно ту прогу, на которой я остановилась и класс опз, с некоторыми доработками
..на куда-нибудь..вам на почту.) сайт популярен=) и известен не тока мне)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.