![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Всем привет. Хочу сделать калькулятор, который позволит решать строковым методом (т.е. записал полностью пример и тебе решили). Есть два способа: с кнопками, при каждом нажатии цифры она переносится в текстовый файл, когда нажимаешь знак он заносится в другой текстовый файл, после с помощью команды Read (a,b,c...) все объединяется через Write (a+b+c...) и результат записывается, допустим в Label. И оба файла уничтожаются. Второй способ: работа со строками. Допустим, 2+2, знак + заменяется пробелом и выносится также в текстовый файл то же самое с цифрами (2 2). Подскажите плиз какой способ лучше и помогите реализовать хотя бы 2+2.
|
#2
|
|||
|
|||
![]() Кто может знает получше идеи. Только попрошу пожалуйста не предлагать польские записи.
|
#3
|
|||
|
|||
![]() Посмотри как это реализовано в модуле rxParsing.pas из RxLib.
|
#4
|
||||
|
||||
![]() По поводу "write(a+b+c)" - имена переменных после компиляции не существуют, и эта запись будет бессмысленной, нужно сначала распихать нужные числа по переменным. К тому же скобки и другие знаки (кроме +) такой подход не переварит. Так что если планируется использование только +, то достаточно идти по строке и все числа сразу прибавлять к первому.
Если нужен полноценный калькулятор, то либо польская нотация, либо другие подобные методы. Кстати второй предложенный алгоритм уже близок к польской нотации, только без поддержки приоритетов (поэтому опять же не работающий со скобками и часто неверно переваривающий * и /, например в выражении 1+2*3) и с жестоким обращением с HDD. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 14.04.2012 в 15:29. |
#5
|
|||
|
|||
![]() Цитата:
|
#6
|
|||
|
|||
![]() http://www.koders.com/delphi/fidA6A4...A9BE9818E.aspx
калькулятор для обучения делается, или для использования? |
#7
|
||||
|
||||
![]() Ужас какой, такой индусской фантазии ниогда не видел. Читаем, что такое польская обратная нотация.
Чем тебе польская запись не нравится? С помощью неё кулькулятор делается как два пальца об сфальт. |
#8
|
||||
|
||||
![]() велосипед давно изобретен:
Код:
var ScriptControl: IScriptControl; begin ScriptControl:=CreateComObject(CLASS_ScriptControl) as IScriptControl; ScriptControl.Language:='javascript'; Memo1.Lines.Add(ScriptControl.Eval('(2*5+90+Math.abs(-900))/10')); end; ![]() Пишу программы за еду. __________________ |
#9
|
|||
|
|||
![]() Цитата:
Последний раз редактировалось megaprogrammer, 17.04.2012 в 09:02. |
#10
|
|||
|
|||
![]() Цитата:
|
#11
|
|||
|
|||
![]() Цитата:
|
#12
|
||||
|
||||
![]() Цитата:
Здесь, на этом сайте, в разделе исходники, как минимум 4 таких калькулятора есть (с синусами, секансами, экспонентами), один даже паскаль подобные макросы интерпретирует. |
#13
|
||||
|
||||
![]() Польская нотация - это просто когда сначала операнды, потом знак. Что мешает сделать так же, сначала операнд, потом знак синуса?
Я делал построитель графиков через польскую нотацию. Никаких проблем с функциями от 1 и 2 аргументов не возникало. От 3х и более не пробовал. ![]() jmp $ ; Happy End! The Cake Is A Lie. |