Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > График функции


Автор: Гость_NikoLLa 11.10.2005, 16:04
Народ. Есть такая проблема: необходимо вывести на экран график функции. Функция задаётся пользователем. Как это сделать???

Автор: Spawn™Production® 11.10.2005, 16:11
http://forum.vingrad.ru/index.php?act=module&module=vingradfaq&article_num=002858

Автор: boevik 11.10.2005, 16:20
использовать объэкт MSChart и вычисляя точки X и Y.

Автор: Kergan 11.10.2005, 17:53
Но с ПРОИЗВОЛЬНЫМ графиком (когда пользовотель задает ф-ию) - отдельная песня.
Я решал эту задачу ф-ией EbExecuteLine из библиотеки vba6.dll
Код

private Declare Function EbExecuteLine Lib "vba5.dll" (ByVal pStringToExec As Long, _
ByVal Foo1 As Long, ByVal Foo2 As Long, ByVal fCheckOnly As Long) As Long

Тут ведь в чем проблема - тебе задана ф-ия f(x)=log(cos(sin(x)))
Ты, значит, должен АНАЛИЗИРОВАТЬ выражение. А это почти так же сложно, как написать компилятор. Но есть выход. Забиваешь выражение в строку, и каждый проход заменяешь x ф-ией Replace на какое-то числовое значение.
А... теперь что? Теперь у нас в строке то же арифметическое выражение, но с числом.... Теперь:
Код

dim s as string
s = "log(sin(cos(2)))"
s = Ima_globalnoi_peremennoi_v_strokovom_vide & "=" & s &":"
EbExecuteLine StrPtr(s), 0&, 0&, False

и в глобальной переменной будет нужно тебе значение. Потом можешь забить все это в цикл и построить график ПРОИЗВОЛЬНОЙ функции!
ЗЫ Если надо подробнее, пиши, расскажу.
ЗЗЫ
Ima_globalnoi_peremennoi_v_strokovom_vide - например, у тебя ГЛОБАЛЬНАЯ переменная GLB. Тогда Ima_globalnoi_peremennoi_v_strokovom_vide = "GLB".

Автор: Exception 11.10.2005, 19:01
Цитата(Kergan @ 11.10.2005, 18:53)
Я решал эту задачу ф-ией EbExecuteLine из библиотеки vba6.dll

она вроде вне среды не работает...

Автор: зашедший_на_свет 11.10.2005, 19:43
почему же? Ebexecuteline Очень даже работает, я пробовал.
To kergan: и такой алгоритм реально функционирует?

Автор: Exception 11.10.2005, 21:40
у меня не работала..
проверю.

Автор: Guest 12.10.2005, 09:21
Цитата(Kergan @ 11.10.2005, 17:53)
А это почти так же сложно, как написать компилятор.
- Ерунда, делать нечего! Я такую программку использую в учебных целях. Можешь взять и посмотреть ее на suwor.narod.ru, а если надо код то кинь мне свой мэйл на suvor52@mail.ru

Автор: NikoLLa 13.10.2005, 16:37
Kergan Не объяснишь, что это за ф-ия EbExecuteLine? А по подробней бы не помешало, а то мало понятно если честно. smile
suvor52@mail.ru Я вам оставил свой мэйл(bez_del_nik@mail.ru)

Автор: Exception 13.10.2005, 17:41
Цитата(NikoLLa @ 13.10.2005, 17:37)
Не объяснишь, что это за ф-ия EbExecuteLine?

она динамически исполняет строку-программу на VB - он ведь интерпретатор smile

Автор: Kergan 15.10.2005, 11:50
Здрасте, люди. Про EbExecuteLine - вот хорошая статья.
http://mirpc.narod.ru/koding/stat/vb/74.htm
Только там не сказано, или не акцентировано внимание, на том, что EbExecuteLine может работать с глобальными переменными и вызывать глобальные функции. Очевидно, что это открывает принципиально новые возможности!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)