Ввод функций в программе!

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
PORTER
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 18.11.2004 (Чт) 0:09
Откуда: Новороссийск

Ввод функций в программе!

Сообщение PORTER » 24.11.2004 (Ср) 23:34

Приветствую!

Нужна помощь...

Имеется программа, позволяющая вводить данные и , в соответствии с ними, строить какие-то функции, но данные функции заранее записаны в программном коде, пользователь меняет лишь координаты, а как сделать так, чтобы пользователь мог вводить и функции для вычисления?
Спасибо заранее!

Public x1, x2, y1, y2 As Single

Private Sub Command2_Click()

‘Выход из формы с помощью кнопки Выход

МояВтораяФорма.Hide

End Sub

Private Sub Form_Load()

Dim fam, im, otch As String

‘Создание окна ввода фамилии
fam = InputBox(“Введите свою фамилию:”, “Окно ввода фамилия”, “Красильников”)
Debug.Print “Фамилия:”; fam

‘Создание окна ввода имени
im = InputBox(“Введите своё имя:”, “Окно ввода имени”, “Дмитрий”)
Debug.Print “Имя:”; im

‘Создание окна ввода отчества
otch = InputBox(“Введите своё отчество:”, “Окно ввода отчество”, “Валерьевич”)
Debug.Print “Отчество:”; otch

‘Создание окна ввода координаты x1
x1 = Val(InputBox(“Введите значение x1 левой границы интервала, на котором следует построить графики:”, “Окно ввода координаты x1”, “-10”))
Debug.Print “x1=”; x1

'Создание окна ввода координаты x2
x2 = Val(InputBox("Введите значение x2 левой границы интервала, на котором следует построить графики:", "Окно ввода координаты x2", "10"))
Debug.Print "x2="; x2

'Создание окна ввода координаты y1
y1 = Val(InputBox("Введите значение y1 нижней границы интервала, на котором следует построить графики:", "Окно ввода координаты y1", "-5"))
Debug.Print "y1="; y1

'Создание окна ввода координаты y2
y2 = Val(InputBox("Введите значение y2 верхней границы интервала, на котором следует построить графики:", "Окно ввода координаты y2", "5"))
Debug.Print "y2="; y2

'Ввод фамилии в текстовое поле экранной формы
Text1.Text = fam

'Ввод имени в текстовое поле экранной формы
Text2.Text = im

'Ввод отчества в текстовое поле экранной формы
Text3.Text = otch



'Ввод координаты x1 в текстовое поле экранной формы
Text4.Text = x1

'Ввод координаты y1 в текстовое поле экранной формы
Text5.Text = y1

'Ввод координаты x2 в текстовое поле экранной формы
Text6.Text = x2

'Ввод координаты y2 в текстовое поле экранной формы
Text7.Text = y2

End Sub


Private Sub ПостроитьГрафикиФункций_Click()

'Размер графического поля
ГрафическоеПоле.Scale (x1, y2)-(x2, y1)

'Вычерчивание выртикальных линий сетки
For i = x1 To x2
ГрафическоеПоле.Line (i, y1)-(i, y2), vbYellow
Next i

'Вычерчивание горизонтальных линий сетки
For j = y1 To y2
ГрафическоеПоле.Line (x1, j)-(x2, j), vbYellow
Next j

'Вычерчивание оси Ox
ГрафическоеПоле.Line (x1, 0)-(x2, 0), vbBlack

'Вычерчивание оси Oy
ГрафическоеПоле.Line (0, y1)-(0, y2), vbBlack

'Печать координат на оси Ox
For i = x1 To x2
ГрафическоеПоле.PSet (i, 0), vbBlack
ГрафическоеПоле.Print i
Next i

'Печать координат на оси Oy
For i = y1 To y2
ГрафическоеПоле.PSet (0, i), vbBlack
ГрафическоеПоле.Print i
Next i

'Построение графиков трёх функций
For x = x1 To x2 Step 0.01
y = x ^ 2 - 3
ГрафическоеПоле.PSet (x, y), vbRed
y = Sin(x) * 2
ГрафическоеПоле.PSet (x, y), vbGren
y = Log(Abs(x - 1))
ГрафическоеПоле.PSet (x, y), vbBlue
Next x

End Sub


Просьба помочь!!!
Где наша не пропадала, везде пропадала...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 25.11.2004 (Чт) 10:28

Уф...
Ох-ох-ох...
Lasciate ogni speranza, voi ch'entrate.

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 25.11.2004 (Чт) 17:00

А на вопрос так и не ответили( Мне вот тоже интересно, как задать в текст бокс формулу, а как ее нарисовать он и сам знает, помойму!
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 25.11.2004 (Чт) 18:32

Я вот подумал: можно написать универсальную формулу типа y=k1*x^n+k2*x^m +k3* log(x)+k4*sin(x).... и т.д. и анализировать то что ввел пользователь, подставляя коээфициенты. Мож кто че другое придумает))
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.11.2004 (Пт) 9:58

Это ты классно придумал. А если x меньше нуля?
Lasciate ogni speranza, voi ch'entrate.

Gloom
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 200
Зарегистрирован: 23.11.2004 (Вт) 15:57
Откуда: СПб

Сообщение Gloom » 26.11.2004 (Пт) 10:24

Вот примерчик:
A simple expression evaluator

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 27.11.2004 (Сб) 18:17

А чем может помешать х меньше нуля? В тех функциях в которых есть корень можно и проверку поставить.
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.11.2004 (Сб) 19:36

Логарифму помешает.
Изображение

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 28.11.2004 (Вс) 4:35

Темыч, ты придираешься. Это все можно проверкой обойти - если юзер сказал, что нужен логарифм, значит, обломится с отрицательной частью диапазона значений. :)
На самом деле, такое написать практ. нереально. В смысле, функцию такую. Как быть, например, с выражением типа:
Код: Выделить всё
Y = Sin(Log(X/K1) * Abs(X/K2))^PI * Atn(X)

Да тут зачкаешься все возможные уровни вложенности учитывать.

В то же время, в книжке Б. Страуструпа "Язык программирования С++", посвященной выходу final draft'a стандарта ANSI для этого языка, был не очень сложный пример по написанию собственного калькулятора, причем там он был без кнопочек, а с лексическим анализатором вводимого текста. Так что нет ничего невозможного...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 28.11.2004 (Вс) 10:45

Дыкачё, мы на первом курсе такой "анализатор" писали в классе, ибо меньше чем на час работы...

Фишка-то вот в чём: нужно или компилировать выражение в Native Code, что нетривиально, либо заново распарсивать всю структуру выражения для каждой точки графика, что очень тормозно.
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList