Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.12.2011, 23:19
Hetrue Hetrue вне форума
Прохожий
 
Регистрация: 11.10.2011
Сообщения: 46
Репутация: -241
По умолчанию calc

здравствуйте, кодеры!
я бы хотел узнать, у меня задание сделать калькулятор, НО необходимо сделать в нём СКОБКИ, не могли бы вы как то помочь, мне с этим. Заранее благодарю!
Ответить с цитированием
  #2  
Старый 04.12.2011, 23:36
m1sclick m1sclick вне форума
Начинающий
 
Регистрация: 04.07.2011
Адрес: Украина
Сообщения: 186
Версия Delphi: 2010
Репутация: 2094
По умолчанию

Что именно подразумевается под словом СКОБКИ?
Ответить с цитированием
  #3  
Старый 04.12.2011, 23:41
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

Цитата:
здравствуйте, кодеры!
Спасибо за такое уважение...
Как вариант парсить выражение и находить парные скобки. Вычислять их значение, складывать его куда-нибудь. Потом просто вычислять слева-направо, и дойдя до скобки брать ранее посчитанное и использовать
Ответить с цитированием
  #4  
Старый 05.12.2011, 00:23
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

ИМХО самое простое решение - т.н. "Обратная польская нотация". Реализация есть в интернете.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 05.12.2011, 08:37
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

легко считает даже функции "(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;
http://data.cod.ru/134562
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 05.12.2011, 14:23
Hetrue Hetrue вне форума
Прохожий
 
Регистрация: 11.10.2011
Сообщения: 46
Репутация: -241
По умолчанию

Благодарю всех за помощь!
Ответить с цитированием
  #7  
Старый 05.12.2011, 15:10
Hetrue Hetrue вне форума
Прохожий
 
Регистрация: 11.10.2011
Сообщения: 46
Репутация: -241
По умолчанию

Цитата:
Сообщение от NumLock
легко считает даже функции "(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;
http://data.cod.ru/134562

а зачем мне при этом веб браузер?)
Ответить с цитированием
  #8  
Старый 05.12.2011, 15:27
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Затем, что разбирает ваше выражение и считает именно он.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 05.12.2011, 15:34
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Ну, не совсем он. Считает выражение JavaScript, встроенный в Internet Explorer, экземпляр которого и создаётся.
Кстати, как раз вчера хотел предложить аналогичное решение...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #10  
Старый 05.12.2011, 15:35
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от Hetrue
а зачем мне при этом веб браузер?)
а его все-равно не будет на экране, так что никто не догадается кто на самом деле будет высчитывать выражение к тому же у такого калькулятора будет несомненный плюс: можно сказать что он программируемый

добавлено позже

вот здесь можно посмотреть на все функции:
http://www.delphisources.ru/forum/sh...3&postcount=23
__________________
Пишу программы за еду.
__________________

Последний раз редактировалось NumLock, 05.12.2011 в 15:43.
Ответить с цитированием
  #11  
Старый 05.12.2011, 16:29
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

можно еще 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.
Вложения
Тип файла: rar MSScriptControl.rar (1.2 Кбайт, 1 просмотров)
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #12  
Старый 05.12.2011, 23:04
Hetrue Hetrue вне форума
Прохожий
 
Регистрация: 11.10.2011
Сообщения: 46
Репутация: -241
По умолчанию

Цитата:
Сообщение от NumLock
можно еще 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.

я благодарю вас за помощь, но проблема в том что я практически ничего здесь не понимаю
Ответить с цитированием
  #13  
Старый 06.12.2011, 09:32
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

тут вообще все просто: в Expression вводишь выражение, можно со скобками, которое нужно вычислить, в Eval получаешь результат. на остальные строки не обращай внимания
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter