![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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,|| Последний раз редактировалось Bargest, 15.01.2011 в 23:46. |
|
#18
|
||||
|
||||
|
Если строка будет в виду sinx*x-x нужен как понимат.
|
|
#19
|
||||
|
||||
|
Тут уже зависит от приоритетов. Например, моя реализация преобразует
sinx*x-x к виду x sin x * x - Однако если поставить приоритет синуса меньше, чем * - то будет иначе. |
|
#20
|
||||
|
||||
|
Зайдите в delphisources.ru/pages/faq/base/to_opn.html . Там резултат возврашается в виду строка.
|
|
#21
|
||||
|
||||
|
Да. Он возвращает строку. Строка будет такая:
'x 2 + y * 12 /' ((x+2*y)/12) между отдельными элементами пробелы. По ней уже можно считать. Да, кстати. Если будешь синусы там добавлять и прочее - имхо лучше сделать, чтоб они заменялись предварительно какими-нибудь символами, например sin = #1, cos = #2, tg = #3 ... Последний раз редактировалось 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 ![]() |