![]() |
|
|
|
|
#1
|
||||
|
||||
|
Решил спросить как можно соорудить калькулятор обрабатывающий задачу 3434+56-676*45 такого вида,
тобишь сразу строку даешь и подсчет, все исходники что видел типичные простые где вводишь по числу, а не ряд действий строкой. Думал насчет просмотра сначала на наличие * и /. Вырезать числа рядом с этими знаками и выполнять. Таким образом начиная от более приоритетных действий, только вопрос как можно вырезать числа рядом? |
|
#2
|
||||
|
||||
|
Цитата:
Чтобы это было в хорошем тоне, советую познакомиться с регулярными выражениями, синтаксическими анализаторами, с обратной польской записью и т.д. ![]() |
|
#3
|
||||
|
||||
|
рег выражениями пользовался, но они не думаю что тут помогут
|
|
#4
|
||||
|
||||
|
Цитата:
|
|
#5
|
||||
|
||||
|
Поищи слово "МАТЕМАТИКА" на странице. Или даже тут.
|
|
#6
|
||||
|
||||
|
Код:
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 ButtonClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormMain: TFormMain;
implementation
{$R *.dfm}
procedure TFormMain.ButtonClick(Sender: TObject);
begin
WebBrowser.Navigate('about:blank');
while WebBrowser.ReadyState<READYSTATE_INTERACTIVE do
Application.ProcessMessages;
(WebBrowser.Document as IHTMLDocument2).body.innerText:='';
(WebBrowser.Document as IHTMLDocument2).parentWindow.execScript('var r=3434+56-676*45; document.write(r);', 'javascript');
Memo.Lines.Insert(0, (WebBrowser.Document as IHTMLDocument2).body.innerText);
end;
end.естественно поддерживаются все математические функции. |
|
#7
|
||||
|
||||
|
NumLock, интересное решение не подозревал о таком, спасибо сгодится, интересна лишь рациональность такого использования (через TWebBrowser)
|
|
#8
|
||||
|
||||
|
Цитата:
|