![]() |
|
|
Регистрация | << Правила форума >> | 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
|
||||
|
||||
![]() Не вникай в подробности, это обыкновенная магия
![]() Ну, а если серьёзно - гугл в помощь. Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#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
|
||||
|
||||
![]() Цитата:
|