![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
||||
|
||||
![]() Я читал ети стати. По моему он возврашает строку в порядка выполненыя выражении. Так ? После етого как можеш его выполныт.
|
#17
|
||||
|
||||
![]() если есть строка вида
x 15 + y - (т.е. x+15-y) то ничего сложного в том, чтобы ее посчитать: берем текущее значение x, пишем в a[0]. 15 в a[1]. дальше идет знак +. Это означает, что надо сложить текущий и предыдущий элементы, и записать в предыдущий, т.е. a[0]:=a[0]+a[1]. текущим становится a[0]. Дальше в a[1] пишется y, и так же вычитается: a[0]:=a[0]-a[1]. Я так делал. Все работает на ура. Сделал там +,-,*,/,^,sin,cos,tg,log,h,|| jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 15.01.2011 в 23:46. |
#18
|
||||
|
||||
![]() Если строка будет в виду sinx*x-x нужен как понимат.
|
#19
|
||||
|
||||
![]() Тут уже зависит от приоритетов. Например, моя реализация преобразует
sinx*x-x к виду x sin x * x - Однако если поставить приоритет синуса меньше, чем * - то будет иначе. jmp $ ; Happy End! The Cake Is A Lie. |
#20
|
||||
|
||||
![]() Зайдите в delphisources.ru/pages/faq/base/to_opn.html . Там резултат возврашается в виду строка.
|
#21
|
||||
|
||||
![]() Да. Он возвращает строку. Строка будет такая:
'x 2 + y * 12 /' ((x+2*y)/12) между отдельными элементами пробелы. По ней уже можно считать. Да, кстати. Если будешь синусы там добавлять и прочее - имхо лучше сделать, чтоб они заменялись предварительно какими-нибудь символами, например sin = #1, cos = #2, tg = #3 ... jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 16.01.2011 в 00:37. |
#22
|
||||
|
||||
![]() Лично я делал примерно так:
1) Находил скобки, вычислял их рекурсивно и заменял на получившееся число 2) Находил функции, вычислял, заменял на числа 3) Находил возведение в степень, аналогично 4) Всё оставшееся делил на группы по знакам (внутри группы только умножение или деление: 2*3-1*4/2 -> 2*3 и -1*4/2 5) Вычислял значение каждой группы 6) Складывал все группы Кстати, тоже делал для построителя графиков) |
#23
|
||||
|
||||
![]() если совсем лень самому писать, то:
(WebBrowser.Document as IHTMLDocument2).parentWindow.execScript('var r='+Edit.Text+'; document.write(r+"<br>");', 'javascript'); список математических функций: http://www.spravkaweb.ru/jscript/objects/math/ Код:
unit Unit1; interface uses MSHTML, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, StdCtrls, ExtCtrls, OleCtrls, SHDocVw; type TFormMain = class(TForm) WebBrowser: TWebBrowser; Panel: TPanel; Edit: TEdit; Button: TButton; Memo: TMemo; procedure FormCreate(Sender: TObject); procedure ButtonClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var FormMain: TFormMain; implementation {$R *.dfm} procedure TFormMain.FormCreate(Sender: TObject); begin if WebBrowser.Document=nil then WebBrowser.Navigate('about:blank'); while WebBrowser.Document=nil do Application.ProcessMessages; end; procedure TFormMain.ButtonClick(Sender: TObject); begin (WebBrowser.Document as IHTMLDocument2).body.innerText:=''; (WebBrowser.Document as IHTMLDocument2).parentWindow.execScript('var r='+Edit.Text+'; document.write(r+"<br>");', 'javascript'); Memo.Lines.Insert(0, (WebBrowser.Document as IHTMLDocument2).body.innerText); end; end. http://data.cod.ru/84745 ![]() Пишу программы за еду. __________________ |