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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2015, 18:52   #1
_Душка_
 
Регистрация: 10.06.2015
Сообщений: 5
Вопрос Найти х методом хорд. VBA Basic

Вечер добрый.
Дано уравнение 8*SINX-3/X=0
Требуется найти х методом хорд. Х найти один, самый первый.
Сделана табуляция (по значения 1,2,3,4,5) и по ней построен график, видится что х=3.
Я понимаю как найти х вручную. Я худо-бедно могу разобрать блок-схему. Но прога вообще не выдает результата. Никакого. Ошибку я найти самостоятельно не в состоянии. Ибо программист я так себе...
Преподаватель сказал использовать цикл Do While....Loop
Код:
Sub Lab()
Dim a As Double, b As Double, E As Double, x As Double, x0 As Double
E = 0.005
a = Range("A1").Value
b = Range("A5").Value
x0 = b
fa = 8 * Sin(a) - 3 / (a)
fb = 8 * Sin(b) - 3 / (b)
fx0 = 8 * Sin(x0) - 3 / (x0)
Do While Abs(fx0 > E)
If fa * fb < 0 Then
b = x0
End If
fa = 8 * Sin(a) - 3 / (a)
x0 = (a + b) / 2
fx0 = 8 * Sin(x0) - 3 / (x0)
Loop
x0 = b

End Sub

Последний раз редактировалось _Душка_; 26.10.2015 в 23:10.
_Душка_ вне форума Ответить с цитированием
Старый 27.10.2015, 21:59   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,378
По умолчанию

Вот одно из предложений:
Код:
Function f(x)
f = 8 * Sin(x) - 3 / x ' Тут Ваша функция, но можно и другую
End Function

Sub Lab1()
Dim a As Double, b As Double, Eps As Double
a = Cells(1, 1)
b = Cells(1, 2)
Eps = Cells(1, 3)
While Abs(b - a) > Eps
   a = b - (b - a) * f(b) / (f(b) - f(a))
   b = a - (a - b) * f(a) / (f(a) - f(b))
   Cells(1, 4) = a
Wend
Cells(1, 5) = b
End Sub
В Вашем коде разбираться не стал ...
Введите, на листе Excel, начиная с первого столбца, в первую строку левую границу, затем правую. Далее вводите точность. Думаю, что справитесь.
PS: Переделка кода из С/Си++ на VBA, приведённого на Википедии:
https://ru.wikipedia.org/wiki/%D0%9C...BE%D1%80%D0%B4

Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 28.10.2015, 21:43   #3
_Душка_
 
Регистрация: 10.06.2015
Сообщений: 5
По умолчанию

Виктор, спасибо, но необходимо использовать цикл Do While....Loop(
_Душка_ вне форума Ответить с цитированием
Старый 28.10.2015, 21:50   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Дык замени WHILE на DO WHILE и wend на loop
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу решения уравнения методом дихотомии, комбинированным методом секущих хорд, методом простых итераций (на C++) Bloody_Mary Помощь студентам 0 14.05.2014 21:05
Найти корень уравнения методом хорд alilar Помощь студентам 0 18.08.2012 16:39
Найти корень уравнения методом хорд ju1sick Помощь студентам 3 13.11.2011 14:42
найти корень методом хорд на с++ Вика 13 Помощь студентам 3 31.10.2010 19:55
найти корень методом хорд в C++ Shikarmo4000 Помощь студентам 2 23.05.2010 14:03