Добрый вечер. Можете помочь решить задачу.Скрин условия задачи прикрепил.С этими методом я знаком, но меня что-то немного смущает точность.Можете помочь пожалуйста
Добрый вечер. Можете помочь решить задачу.Скрин условия задачи прикрепил.С этими методом я знаком, но меня что-то немного смущает точность.Можете помочь пожалуйстаAaron18
Ну хорошо, давайте так. Алгоритм прямо по тексту задания Все, что не совсем ясно - сначала в справку, затем в поиск и только если все равно не понятно, то спрашиваете с приложением ссылок на изученный материал 1. InputBox-ом спрашиваете у пользователя по очереди а, b и точность 1.1. k=2 2. Цикл Do-Loop с условием проверки (5) на Loop 3. Вычисляем d 3.1. Z1=Z 4. Цикл i от 0 до k-1 4.1. Вычисляем xi 4.2. Вычисляем yi 4.3. Проводим оценку интеграла Z 5. Сравниваем Z и Z1 (это в Loop), если больше точности, то k=k+1 продолжается (2)
Подождите, там написано, что все это в виде функции. Тогда не Sub, а Function, но сувать в функцию InputBox как-то не очень. Не, можно, но редко такой изврат встретишь. А в аргументы функции а, b и точность тоже не поставишь, в условии задачи четко написано, что они "должны запрашиваться". Ну ладно, пусть будет так, если им так хочется
Вот, собственно, и всё
Ну хорошо, давайте так. Алгоритм прямо по тексту задания Все, что не совсем ясно - сначала в справку, затем в поиск и только если все равно не понятно, то спрашиваете с приложением ссылок на изученный материал 1. InputBox-ом спрашиваете у пользователя по очереди а, b и точность 1.1. k=2 2. Цикл Do-Loop с условием проверки (5) на Loop 3. Вычисляем d 3.1. Z1=Z 4. Цикл i от 0 до k-1 4.1. Вычисляем xi 4.2. Вычисляем yi 4.3. Проводим оценку интеграла Z 5. Сравниваем Z и Z1 (это в Loop), если больше точности, то k=k+1 продолжается (2)
Подождите, там написано, что все это в виде функции. Тогда не Sub, а Function, но сувать в функцию InputBox как-то не очень. Не, можно, но редко такой изврат встретишь. А в аргументы функции а, b и точность тоже не поставишь, в условии задачи четко написано, что они "должны запрашиваться". Ну ладно, пусть будет так, если им так хочется
Значение Z мы пока не вычисляли и поэтому мы присваиваем Z1 по сути пустое значение. Сделал подобное(скрин прикрепил).Но он работает некорректноAaron18
Конечно некорректно. Чему равно z-z1 при k=2? И там еще И k>2. Пробегитесь пошагово по макросу через F8 и все увидите сами Не хотите работать с пустым z1, ну посчитайте его до цикла Do для k=0, а потом цикл по i не с 0, а с 1
И да, с картинками - это на форум по фотошопу
Конечно некорректно. Чему равно z-z1 при k=2? И там еще И k>2. Пробегитесь пошагово по макросу через F8 и все увидите сами Не хотите работать с пустым z1, ну посчитайте его до цикла Do для k=0, а потом цикл по i не с 0, а с 1
И да, с картинками - это на форум по фотошопу_Boroda_
Совершенно верно. Так зачем Вы их приравняли? Где я писал, что при первом проходе мы делаем z1=z ПОСЛЕ расчета z? Нет у меня такого, это вы уже сами придумали
Совершенно верно. Так зачем Вы их приравняли? Где я писал, что при первом проходе мы делаем z1=z ПОСЛЕ расчета z? Нет у меня такого, это вы уже сами придумали_Boroda_
Совершенно верно. Так зачем Вы их приравняли? Где я писал, что при первом проходе мы делаем z1=z ПОСЛЕ расчета z? Нет у меня такого, это вы уже сами придумали
Можете помочь пожалуйста с решением.Я уже пару часов сижу мучаюсь над задачей
Совершенно верно. Так зачем Вы их приравняли? Где я писал, что при первом проходе мы делаем z1=z ПОСЛЕ расчета z? Нет у меня такого, это вы уже сами придумали
Можете помочь пожалуйста с решением.Я уже пару часов сижу мучаюсь над задачейAaron18
Sub s() Dim k As Integer Dim n, Z, Z1, d, x, y, s, a, b As Double k = 2
a = InputBox("") b = InputBox("") n = InputBox("") a = CDbl(a) b = CDbl(b) n = CDbl(n)
s = 0
Do d = (b - a) / k s = 0 Z1 = Z For i = 0 To k - 1 x = a + i * d y = Exp(x ^ 2) s = s + y Next i Z = s * d k = k + 1 Loop While Z - Z1 >= n MsgBox Z1 MsgBox k MsgBox Z MsgBox s
End Sub
[/vba]
[vba]
Код
Sub s() Dim k As Integer Dim n, Z, Z1, d, x, y, s, a, b As Double k = 2
a = InputBox("") b = InputBox("") n = InputBox("") a = CDbl(a) b = CDbl(b) n = CDbl(n)
s = 0
Do d = (b - a) / k s = 0 Z1 = Z For i = 0 To k - 1 x = a + i * d y = Exp(x ^ 2) s = s + y Next i Z = s * d k = k + 1 Loop While Z - Z1 >= n MsgBox Z1 MsgBox k MsgBox Z MsgBox s
Sub tt() Dim k As Integer Dim n, Z, Z1, d, x, y, s, a, b As Double 'Димок сами потом перепишите, только почитайте сначала как это правильно делается On Error GoTo AAA a = CDbl(InputBox("Введите начало отрезка")) b = CDbl(InputBox("Введите окончание отрезка")) n = CDbl(InputBox("Введите точность")) On Error GoTo 0 k = 2 Z = Exp(a ^ 2) On Error GoTo BBB Do Z1 = Z d = (b - a) / k For i = 1 To k - 1 y = y + Exp((a + i * d) ^ 2) Next i Z = y * d k = k + 1 y = 0 Loop While Z - Z1 >= n MsgBox "Интеграл равен " & Z Exit Sub AAA: 'если введены не числа MsgBox "Ошибка ввода" BBB: 'если получается очень много или очень мало MsgBox "Переполнение. Введите числа поменьше" End Sub
Sub tt() Dim k As Integer Dim n, Z, Z1, d, x, y, s, a, b As Double 'Димок сами потом перепишите, только почитайте сначала как это правильно делается On Error GoTo AAA a = CDbl(InputBox("Введите начало отрезка")) b = CDbl(InputBox("Введите окончание отрезка")) n = CDbl(InputBox("Введите точность")) On Error GoTo 0 k = 2 Z = Exp(a ^ 2) On Error GoTo BBB Do Z1 = Z d = (b - a) / k For i = 1 To k - 1 y = y + Exp((a + i * d) ^ 2) Next i Z = y * d k = k + 1 y = 0 Loop While Z - Z1 >= n MsgBox "Интеграл равен " & Z Exit Sub AAA: 'если введены не числа MsgBox "Ошибка ввода" BBB: 'если получается очень много или очень мало MsgBox "Переполнение. Введите числа поменьше" End Sub
Можно заранее поставить ограничения на а и b, но вообще-то GoTo BBB как раз для этого и написано. У меня не крашится, задумывается и потом ругается "Переполнение. Введите числа поменьше"
Можно заранее поставить ограничения на а и b, но вообще-то GoTo BBB как раз для этого и написано. У меня не крашится, задумывается и потом ругается "Переполнение. Введите числа поменьше"_Boroda_