Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2009, 17:16   #1
Incognitoal
Пользователь
 
Регистрация: 02.03.2009
Сообщений: 24
По умолчанию Найти функцию через ВБА

F(x)=ctgx+ 1


Есть пример, как делали F(x)=1/2 sin x/4 +1
Код:
Public Sub prog2()
Dim a As Single, b As Single, c As Single, e As Single
Dim x As Single
a = Cells(4, 3).Value
b = Cells(4, 4).Value
x = Cells(4, 2).Value
If F(a) * F(b) >= 0 Then
MsgBox "Между этими значениями нет корня"
Exit Sub
End If
Do
c = (a + b) / 2
If F(c) * F(b) < 0 Then a = c Else b = c
Loop Until b - a < e
Cells(4, 1).Value = c
End Sub
Private Function F(x As Single) As Single
F = 1 / 2 * Sin(x / 4) + 1
End Function

Последний раз редактировалось Stilet; 05.03.2009 в 08:28.
Incognitoal вне форума Ответить с цитированием
Старый 05.03.2009, 08:31   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я немножко не есть понять причем тут "Между этими значениями нет корня", но тебе всего-то поменять конец прожки:
Код:
Private Function F(x As Single) As Single
 F = 1/tan(x)+1
End Function
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.03.2009, 09:24   #3
Incognitoal
Пользователь
 
Регистрация: 02.03.2009
Сообщений: 24
По умолчанию

Наверно препод требовал проверку на корень...
Я правильно понял, что надо тот пример который я скопировал, просто заменить последнюю строку:
Private Function F(x As Single) As Single
F = 1 / 2 * Sin(x / 4) + 1

и всё?

п.с. сейчас просто нету возможности проверить
Incognitoal вне форума Ответить с цитированием
Старый 07.03.2009, 15:33   #4
Incognitoal
Пользователь
 
Регистрация: 02.03.2009
Сообщений: 24
По умолчанию

ctgx = -1 / sin^2(x) - разве производная не этому равна? 0-о и ^ -этот знак - степень ?

Я попытался вставить :
F = -1 / Sin^2(x) + 1 - Syntax error

что не так сделал, подскажите плз.
Incognitoal вне форума Ответить с цитированием
Старый 07.03.2009, 16:44   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Private Function F(x As Single) As Single
    F = -1 / (Sin(x)) ^ 2     ' no more Syntax error
End Function
EducatedFool вне форума Ответить с цитированием
Старый 07.03.2009, 17:39   #6
Incognitoal
Пользователь
 
Регистрация: 02.03.2009
Сообщений: 24
По умолчанию

Да, больше Sytax error нету, но появилось
Run Time Eror '11' Division vy zero
в этой же строке ошибка
F = -1 / (Sin(x)) ^ 2
Incognitoal вне форума Ответить с цитированием
Старый 07.03.2009, 18:50   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Так и должно быть, если у тебя в одной из ячеек
a = Cells(4, 3).Value
b = Cells(4, 4).Value
находится ноль (или значение отсутствует)

В функцию (строкой If F(a) * F(b) >= 0 Then) передаётся нулевое значение, синус нуля тоже равен нулю,
соответственно, происходит деление на 0, и вылетает эта ошибка.
EducatedFool вне форума Ответить с цитированием
Старый 08.03.2009, 14:04   #8
Incognitoal
Пользователь
 
Регистрация: 02.03.2009
Сообщений: 24
По умолчанию

Спасибо я понял...
Вопрос, а оно точно всё правильно, как вы думаете, скажите пожалуйста, а то для меня это далеко всё...
Incognitoal вне форума Ответить с цитированием
Старый 09.03.2009, 12:29   #9
Incognitoal
Пользователь
 
Регистрация: 02.03.2009
Сообщений: 24
По умолчанию

Мне кажется это же не нормально, что при любом раскладе оно должно выбивать нет корня...или всё правильно скажите...пожалуйста
Incognitoal вне форума Ответить с цитированием
Старый 09.03.2009, 12:55   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Мне кажется это же не нормально, что при любом раскладе оно должно выбивать нет корня...
Ты вообще что пытаешься подсчитать?

Если у тебя функция F до сих пор имеет вид
Код:
Private Function F(x As Single) As Single
    F = -1 / (Sin(x)) ^ 2     ' no more Syntax error
End Function
то ты всегда будешь видеть сообщение "Между этими значениями нет корня"

Мог бы и сам чуточку поразмыслить - ведь уже который день решаешь эту задачку, а там делов-то на 2 минуты...

Твоя функция F всегда возвращает отрицательное значение (попробуй сам догадаться, почему),
а в коде есть строка If F(a) * F(b) >= 0 Then MsgBox "Между этими значениями нет корня"
Произведение 2-х отрицательных чисел всегда положительно...
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Надо найти функцию, По вводимой в ячейку дате рождения показать название соответствующего знака Зодиака. Incognitoal Microsoft Office Excel 13 03.03.2009 08:18
Как создать через редактор Visual Basic функцию в Excel Dima007 Microsoft Office Excel 2 04.11.2008 20:04
Какую API функцию следует использовать чтобы найти Handle бутона SeRhy Общие вопросы Delphi 4 21.10.2008 23:43
Как в 2007 из ВБА добавить кнопку на панель быстрого доступа IgorGO Microsoft Office Excel 2 30.09.2008 13:52
копирование таблиц надо решение на ВБА kievlyanin Microsoft Office Excel 36 13.05.2008 10:47