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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 15.01.2011, 23:25
Аватар для Farruhjon
Farruhjon Farruhjon вне форума
Прохожий
 
Регистрация: 15.01.2011
Адрес: р.Узбекистан г.Фергана
Сообщения: 13
Репутация: 12
По умолчанию

Я читал ети стати. По моему он возврашает строку в порядка выполненыя выражении. Так ? После етого как можеш его выполныт.
Ответить с цитированием
  #17  
Старый 15.01.2011, 23:41
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

если есть строка вида
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  
Старый 16.01.2011, 00:03
Аватар для Farruhjon
Farruhjon Farruhjon вне форума
Прохожий
 
Регистрация: 15.01.2011
Адрес: р.Узбекистан г.Фергана
Сообщения: 13
Репутация: 12
По умолчанию

Если строка будет в виду sinx*x-x нужен как понимат.
Ответить с цитированием
  #19  
Старый 16.01.2011, 00:16
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Тут уже зависит от приоритетов. Например, моя реализация преобразует
sinx*x-x
к виду
x sin x * x -
Однако если поставить приоритет синуса меньше, чем * - то будет иначе.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #20  
Старый 16.01.2011, 00:28
Аватар для Farruhjon
Farruhjon Farruhjon вне форума
Прохожий
 
Регистрация: 15.01.2011
Адрес: р.Узбекистан г.Фергана
Сообщения: 13
Репутация: 12
По умолчанию

Зайдите в delphisources.ru/pages/faq/base/to_opn.html . Там резултат возврашается в виду строка.
Ответить с цитированием
  #21  
Старый 16.01.2011, 00:34
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Да. Он возвращает строку. Строка будет такая:
'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  
Старый 16.01.2011, 11:58
Аватар для Моклев
Моклев Моклев вне форума
Новичок
 
Регистрация: 27.02.2009
Адрес: Лен. обл., г. Коммунар
Сообщения: 53
Версия Delphi: 7 и 2010
Репутация: 16
По умолчанию

Лично я делал примерно так:
1) Находил скобки, вычислял их рекурсивно и заменял на получившееся число
2) Находил функции, вычислял, заменял на числа
3) Находил возведение в степень, аналогично
4) Всё оставшееся делил на группы по знакам (внутри группы только умножение или деление: 2*3-1*4/2 -> 2*3 и -1*4/2
5) Вычислял значение каждой группы
6) Складывал все группы
Кстати, тоже делал для построителя графиков)
Ответить с цитированием
  #23  
Старый 17.01.2011, 12:03
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

если совсем лень самому писать, то:
(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

__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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