![]() |
|
|
#1
|
|||
|
|||
|
здравствуйте, кодеры!
я бы хотел узнать, у меня задание сделать калькулятор, НО необходимо сделать в нём СКОБКИ, не могли бы вы как то помочь, мне с этим. Заранее благодарю! |
|
#2
|
|||
|
|||
|
Что именно подразумевается под словом СКОБКИ?
|
|
#3
|
|||
|
|||
|
Цитата:
Как вариант парсить выражение и находить парные скобки. Вычислять их значение, складывать его куда-нибудь. Потом просто вычислять слева-направо, и дойдя до скобки брать ранее посчитанное и использовать |
|
#4
|
||||
|
||||
|
ИМХО самое простое решение - т.н. "Обратная польская нотация". Реализация есть в интернете.
|
|
#5
|
||||
|
||||
|
легко считает даже функции "(Math.sqrt(9)+47)*100":
Код:
uses
ComObj,
type
TForm1 = class(TForm)
Button1: TButton;
Edit: TEdit;
procedure Button1Click(Sender: TObject);
procedure TForm1.Button1Click(Sender: TObject);
var
WebBrowser: OleVariant;
begin
WebBrowser:=CreateOleObject('InternetExplorer.Application');
WebBrowser.Navigate('about:blank');
WebBrowser.Document.parentWindow.execScript('var r='+Edit.Text+'; document.write(r);', 'javascript');
ShowMessage(WebBrowser.Document.body.innerText);
WebBrowser.Quit;
end; |
|
#6
|
|||
|
|||
|
Благодарю всех за помощь!
|
|
#7
|
|||
|
|||
|
Цитата:
а зачем мне при этом веб браузер?) |
|
#8
|
||||
|
||||
|
Затем, что разбирает ваше выражение и считает именно он.
|
|
#9
|
||||
|
||||
|
Ну, не совсем он. Считает выражение JavaScript, встроенный в Internet Explorer, экземпляр которого и создаётся.
Кстати, как раз вчера хотел предложить аналогичное решение... ![]() |
|
#10
|
||||
|
||||
|
Цитата:
к тому же у такого калькулятора будет несомненный плюс: можно сказать что он программируемый ![]() добавлено позже вот здесь можно посмотреть на все функции: http://www.delphisources.ru/forum/sh...3&postcount=23 Последний раз редактировалось NumLock, 05.12.2011 в 15:43. |
|
#11
|
||||
|
||||
|
можно еще IScriptControl использовать:
Код:
program Project1;
{$APPTYPE CONSOLE}
uses
ActiveX,
ComObj,
MSScriptControl in 'MSScriptControl.pas';
var
ScriptControl: IScriptControl;
Expression: OleVariant;
Eval: String;
begin
Expression:='Math.sqrt(9)*5+85';
OleInitialize(nil);
ScriptControl:=CreateComObject(CLASS_ScriptControl) as IScriptControl;
ScriptControl.Language:='javascript';
Eval:=ScriptControl.Eval(Expression);
Writeln(Expression+' = '+Eval);
Readln;
end. |
|
#12
|
|||
|
|||
|
Цитата:
я благодарю вас за помощь, но проблема в том что я практически ничего здесь не понимаю |
|
#13
|
||||
|
||||
|
тут вообще все просто: в Expression вводишь выражение, можно со скобками, которое нужно вычислить, в Eval получаешь результат. на остальные строки не обращай внимания
![]() |