![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Есть переменная типа string, в которой записана формула типа y=f(x) (без "у=", то есть sin(x) или sqr(x)). Как использовать эту формулу для вычисления у, она же стринг? Массив не нужен, каждое вычисленное в цикле значение будем выводить в нем же сразу. х - это значения цикла, от -50 до 50, например.
|
|
#2
|
||||
|
||||
|
велосипед давно изобретен:
Код:
var
ScriptControl: IScriptControl;
begin
ScriptControl:=CreateComObject(CLASS_ScriptControl) as IScriptControl;
ScriptControl.Language:='javascript';
Memo1.Lines.Add(ScriptControl.Eval('(2*5+90+Math.abs(-900))/10'));
end;![]() http://www.delphisources.ru/forum/sh...00&postcount=8 |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
SHIFT999 (20.11.2012)
| ||
|
#3
|
|||
|
|||
|
и как это работает?
|
|
#4
|
||||
|
||||
|
Не вникай в подробности, это обыкновенная магия
![]() Ну, а если серьёзно - гугл в помощь. |
|
#5
|
|||
|
|||
|
ну спасибо, на защите курсовика так и скажу
серьезно, помогите пожалуйста |
|
#6
|
|||
|
|||
|
Цитата:
Просто создается COM-объект для работы со скриптовыми языками. В данном случае используется JavaScript. Ему передается выражение и он вычисляет его. Результат передается обратно в программу. |
|
#7
|
|||
|
|||
|
На CreateComObject ошибка Undeclarated identifier. И еще я не понял где тут ввод.
|
|
#8
|
||||
|
||||
|
Цитата:
|
| Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
SHIFT999 (20.11.2012)
| ||
|
#9
|
|||
|
|||
|
Так, складывать, умножать и делить я его научил, а как быть с более сложными функциями? Выражения типа sqrt(2) он просто не принимает ('Предполагается наличие объекта').
Понял: "Math." перед функцией и все работает. Последний раз редактировалось SHIFT999, 19.11.2012 в 23:52. |
|
#10
|
||||
|
||||
|
Цитата:
Код:
var
ScriptControl: IScriptControl;
begin
CoInitialize(nil);
ScriptControl:=CreateComObject(CLASS_ScriptControl) as IScriptControl;
ScriptControl.Language:='javascript';
// add const
ScriptControl.AddCode('var E = Math.E');
ScriptControl.AddCode('var LN2 = Math.LN2');
ScriptControl.AddCode('var LN10 = Math.LN10');
ScriptControl.AddCode('var LOG2E = Math.LOG2E');
ScriptControl.AddCode('var LOG10E = Math.LOG10E');
ScriptControl.AddCode('var PI = Math.PI');
ScriptControl.AddCode('var SQRT2 = Math.SQRT2');
ScriptControl.AddCode('var SQRT1_2 = Math.SQRT1_2');
// add function
ScriptControl.AddCode('function abs(x){return Math.abs(x)}');
ScriptControl.AddCode('function acos(x){return Math.acos(x)}');
ScriptControl.AddCode('function asin(x){return Math.asin(x)}');
ScriptControl.AddCode('function atan(x){return Math.atan(x)}');
ScriptControl.AddCode('function cos(x){return Math.cos(x)}');
ScriptControl.AddCode('function exp(x){return Math.exp(x)}');
ScriptControl.AddCode('function log(x){return Math.log(x)}');
ScriptControl.AddCode('function pow(x, y){return Math.pow(x, y)}');
ScriptControl.AddCode('function random(){return Math.random()}');
ScriptControl.AddCode('function sin(x){return Math.sin(x)}');
ScriptControl.AddCode('function sqrt(x){return Math.sqrt(x)}');
ScriptControl.AddCode('function tan(x){return Math.tan(x)}');
// meandr - графиком функции является сигнал прямоугольной формы
ScriptControl.AddCode('function meandr(n, x){'
+'var result = 0;'
+'for(var i = 0; i < n; i++){'
+'var a = i * 2 + 1;'
+'result = result + Math.sin(a * x) / a;'
+'}'
+'return result;'
+'}');
// add msg
ScriptControl.AddCode('function alert(msg){var WScriptShell = new ActiveXObject("WScript.Shell"); WScriptShell.Popup(msg, 60, "Script Control")}');
// demo
Memo1.Lines.Add(ScriptControl.Eval('sin(PI/2)'));
Memo1.Lines.Add(ScriptControl.Eval('cos(PI)'));
Memo1.Lines.Add(ScriptControl.Eval('abs(-255)'));
Memo1.Lines.Add(ScriptControl.Eval('random()*10'));
Memo1.Lines.Add(ScriptControl.Eval('random()*10'));
Memo1.Lines.Add(ScriptControl.Eval('random()*10'));
Memo1.Lines.Add(ScriptControl.Eval('random()*10'));
Memo1.Lines.Add(ScriptControl.Eval('random()*10'));
Memo1.Lines.Add(ScriptControl.Eval('random()*10'));
Memo1.Lines.Add(ScriptControl.Eval('random()*10'));
Memo1.Lines.Add(ScriptControl.Eval('random()*10'));
ScriptControl.ExecuteStatement('alert("Hello, Delphi")');
ScriptControl.ExecuteStatement('alert((3+7)*25.5)');
end; |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
SHIFT999 (20.11.2012)
| ||
|
#11
|
|||
|
|||
|
Но если это курсовик, то как было сформулировано задание?
Взять готовый вычислитель формул или написать самому? |
|
#12
|
|||
|
|||
|
Цитата:
icWasya, сказали можно и скачать, главное понимать код, но я хочу сам написать ![]() |
|
#13
|
|||
|
|||
|
еще вопрос, немного не по теме: как заставить цикл for проходить по дробным значениям вещественного типа (-10.0,-9.9,-9.8, ... ,9.9,10.0)?
|
|
#14
|
||||
|
||||
|
Цитата:
|