Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/10: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Николай Спешил
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
1

работа с формулами

19.12.2013, 17:29. Просмотров 1773. Ответов 24
Метки нет (Все метки)

Подскажите, можно ли в delphi сделать, так чтобы пользователь вносил некоторую формулу в поле, а программа её считала?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2013, 17:29
Ответы с готовыми решениями:

Работа с формулами
unit Unit3; interface uses Windows, Messages, SysUtils, Variants,...

Работа с формулами (вычисление значения выражения)
Выполняю практику, и тут хочется разобраться с формулами Вычислить выражение...

Подскажите с формулами
помогите, как реализовать эти 2 формулы? {\omega}_{k} =...

Программа работающая с формулами
Привет всем кто читает мою тему!!! Я бьюсь над разработкой следующей...

Как текст с формулами добавить в делфи
:wall:Как текст с формулами добавить в делфи??? В мемо не отображаються...

24
palva
3120 / 2249 / 453
Регистрация: 08.06.2007
Сообщений: 8,171
Записей в блоге: 4
19.12.2013, 17:32 2
Нужно использовать сторонний движок. Либо на делфи готовое найти, либо подсоединять какой-нибудь скриптовый, типа vbscript
0
Николай Спешил
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
19.12.2013, 21:55  [ТС] 3
а подробней можно, пример может
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26519 / 17808 / 7048
Регистрация: 22.10.2011
Сообщений: 31,338
Записей в блоге: 6
19.12.2013, 21:58 4
Ну вот пример: Калькулятор в delphi
0
FIL
Модератор
3422 / 2556 / 728
Регистрация: 19.09.2012
Сообщений: 7,926
19.12.2013, 21:59 5
График функции изменяемый вне кода
0
palva
3120 / 2249 / 453
Регистрация: 08.06.2007
Сообщений: 8,171
Записей в блоге: 4
19.12.2013, 22:34 6
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{$APPTYPE CONSOLE}
uses ComObj,ActiveX,Variants;
var
  Obj:OleVariant;
begin
  CoInitialize(nil);
  Obj:=CreateOleObject('MSScriptControl.ScriptControl');
  try
    Obj.Language := 'VBScript';
    WriteLn(Obj.Eval('3+10^2'));
  finally
    Obj:=Unassigned;
    CoUninitialize;
  end;
end.
0
Николай Спешил
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
19.12.2013, 22:35  [ТС] 7
Спасибо! Завтра попробую, потом отпишусь.
0
Николай Спешил
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
20.12.2013, 15:31  [ТС] 8
Можно ли сделать тоже самое, но для нескольких переменных.
Пробовал такой вариант:
Переменные х1 и х2 задаю в других полях edit присваиваю им тип real
Формулы для расчета переменных заношу в разные поля – edit1 и edit7
Результат заношу тоже в разные поля, в первом поле считает как надо, во втором только операции с конкретными числами выполняет, на переменную не обращая внимания
s := StringReplace(Edit1.Text,'x1',floattostr(x1),[rfReplaceAll, rfIgnoreCase]);
p := StringReplace(Edit7.Text,'x2',floattostr(x2),[rfReplaceAll, rfIgnoreCase]);
Edit2.Text := Script.Eval(s);
Edit5.Text := Script.Eval(p);
листинг моих экспериментов:
окно программы в документе Word
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,ComObj ;
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Edit3Change(Sender: TObject);
    procedure Edit4Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  x1,x2:real;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
  Script: Variant;
  s,p: String;
begin
  DecimalSeparator := '.';
  Script := CreateOleObject('MSScriptControl.ScriptControl');
  Script.Language :='VBScript';
  s := StringReplace(Edit1.Text,'x1',floattostr(x1),[rfReplaceAll, rfIgnoreCase]);
  p := StringReplace(Edit7.Text,'x2',floattostr(x2),[rfReplaceAll, rfIgnoreCase]);
  Edit2.Text := Script.Eval(s);
  Edit5.Text := Script.Eval(p);
end;
procedure TForm1.Edit3Change(Sender: TObject);
begin
x1:=strtofloat(edit3.text);
end;
procedure TForm1.Edit4Change(Sender: TObject);
begin
x2:=strtofloat(edit4.text);
end;
end.
0
Вложения
Тип файла: docx Можно ли сделать тоже самое.docx (21.2 Кб, 5 просмотров)
FIL
Модератор
3422 / 2556 / 728
Регистрация: 19.09.2012
Сообщений: 7,926
20.12.2013, 15:38 9
Попробуй так:
Delphi
1
2
3
  
  s := StringReplace(Edit1.Text,'x1',Edit3.Text,[rfReplaceAll, rfIgnoreCase]);
p := StringReplace(Edit7.Text,'x2',Edit4.Text,[rfReplaceAll, rfIgnoreCase]);
0
palva
3120 / 2249 / 453
Регистрация: 08.06.2007
Сообщений: 8,171
Записей в блоге: 4
20.12.2013, 15:40 10
В чем вопрос? Вы не опубликовали ни скрипта ни результата его работы. Ну наверно, у вас там где-то ошибка.
В любом случае вы получили от компьютера именно то, что вы ему приказали.
0
Николай Спешил
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
20.12.2013, 15:46  [ТС] 11
тот текст программы который написан работает, результат его работы в прикрепленном документе(просто не знаю как картинку выложить)

Добавлено через 3 минуты
он не работает со второй переменной
вообще мне нужно чтобы программа считала уравнения вида f(x)=2*X1+X1*x2+X2 ну или с тремя переменными. Т.е. я должен в поле edit заносить данную формулу, а на выходе получать результат - переменную, которой присвоен результат вычислений
0
palva
3120 / 2249 / 453
Регистрация: 08.06.2007
Сообщений: 8,171
Записей в блоге: 4
20.12.2013, 15:46 12
Скрипт и результат это тексты.
0
Николай Спешил
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
20.12.2013, 15:51  [ТС] 13
такой способ принес результат, считает обе переменные, сейчас бы как-то увязать, чтоб в одном поле можно было перемножать или складывать, скажем , эти переменные
1
palva
3120 / 2249 / 453
Регистрация: 08.06.2007
Сообщений: 8,171
Записей в блоге: 4
20.12.2013, 15:51 14
Цитата Сообщение от Николай Спешил Посмотреть сообщение
чтобы программа считала уравнения
Уравнение не считают, его решают. VBScript не будет решать уравнение. Это вам не Mathcad.
Еще раз. Чему равны s и p перед обращением, что вернула функция eval в каждом случае и что вы ожидали от нее?
0
Николай Спешил
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
20.12.2013, 15:52  [ТС] 15
ну подскажи как это сделать, я не знаю. То что было выложено по моей теме, я вставил в свою программу, подредактировал и вот что получил
0
Николай Спешил
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
20.12.2013, 15:55  [ТС] 16
ну тут смысл в том, что переменные известны, просто при решении их подставлять нужно. Я заношу формулу с переменными, а потом при вычислении программа подставляет различные значения, вместо этих переменных
0
palva
3120 / 2249 / 453
Регистрация: 08.06.2007
Сообщений: 8,171
Записей в блоге: 4
20.12.2013, 15:55 17
Николай Спешил, если это ко мне, то я не услышал вопроса.
Цитата Сообщение от Николай Спешил Посмотреть сообщение
как это сделать
что такое это?
0
FIL
Модератор
3422 / 2556 / 728
Регистрация: 19.09.2012
Сообщений: 7,926
20.12.2013, 15:58 18
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
var
  Script: Variant;
  s: String;
begin
  FormatSettings.DecimalSeparator := '.';
  Script := CreateOleObject('MSScriptControl.ScriptControl');
  Script.Language :='VBScript';
  s := StringReplace(Edit4.Text,'X1',Edit1.Text,[rfReplaceAll, rfIgnoreCase]);
  s := StringReplace(s,'X2',Edit2.Text,[rfReplaceAll, rfIgnoreCase]);
  s := StringReplace(s,'X3',Edit3.Text,[rfReplaceAll, rfIgnoreCase]);
  Edit5.Text := Script.Eval(s);
end;
1
Вложения
Тип файла: rar MSScriptControl.rar (1.4 Кб, 11 просмотров)
palva
3120 / 2249 / 453
Регистрация: 08.06.2007
Сообщений: 8,171
Записей в блоге: 4
20.12.2013, 15:58 19
Цитата Сообщение от Николай Спешил Посмотреть сообщение
Я заношу формулу с переменными
Тексты опубликуйте.
0
Николай Спешил
4 / 4 / 2
Регистрация: 22.10.2012
Сообщений: 78
20.12.2013, 16:17  [ТС] 20
))), я не верно вас понял. Можно не отвечать на этот вопрос

Добавлено через 17 минут
подогнал под свои поля, заработало. Спасибо, буду дальше ковырять. Надо ещё саму программу подстановки разных значений разобрать

Добавлено через 1 минуту
Может слышали о методах нулевого порядка при нахождении минимума функции?
0
20.12.2013, 16:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2013, 16:17

Ошибка при работе с формулами MS Excel
Здравствуйте, столкнулся на днях с проблемой ввода формул в ячейки эл. таблицы....

Как создать тестирующее приложение с математическими формулами?
как создать тестирующий приложение с математическими формулами. Формулы...

Получить массив, первая и вторая строка которой задается формулами, а каждая следующая - сумма двух предыдущих
Всем привет помогите сделать задачу в делфи Получить действительный массив A,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru