Задача на итерационный цикл

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

Задача на итерационный цикл

Сообщение Ruslan_M » 27.12.2012 (Чт) 13:13

Нужно найти сумму бесконечного ряда с точностью до E

Код: Выделить всё
Sub variant4()
Dim n As Double, A As Double, E As Double, S As Double
E = InputBox("Введите E")
n = 1
A = (2 * n - 1) / 2 ^ n
Do While A >= E
S = S + A
n = n + 1
A = (2 * n - 1) / 2 ^ n
Loop
MsgBox ("S=" & S)
End Sub


Что не так?
1.jpg
1.jpg (22.66 Кб) Просмотров: 4616


[Хакер] :: В следующий раз оформляй код тегом [code]!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Задача на итерационный цикл

Сообщение Хакер » 27.12.2012 (Чт) 13:47

Вообще-то всё так, за исключением отвратительнейшего невыносимого (но по крайней мере работающего) кода.
К сведению: Ода лени.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Ruslan_M
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 27.12.2012 (Чт) 13:10

Re: Задача на итерационный цикл

Сообщение Ruslan_M » 27.12.2012 (Чт) 14:01

Я не ленивый. У меня профессия инженер, а не программист, все что нам в университете дают, это задания. Говорят разберетесь сами. В VBA работаю первый раз, поэтому и коды такие глупые. Изучаю все сам.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Задача на итерационный цикл

Сообщение Хакер » 27.12.2012 (Чт) 14:19

Ruslan_M писал(а):У меня профессия инженер, а не программист,

Программист — это частный случай инженера.
Здесь нужно думать с инженерным подходом.

У тебя задача решается в лоб и без задних мыслей.

И, если всё-таки подумать, решается неправильно, потому что при вводе единицы она даёт ответ 0.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 27.12.2012 (Чт) 14:35

Хакер писал(а):И, если всё-таки подумать, решается неправильно, потому что при вводе единицы она даёт ответ 0.

Потому что 1/2<1. Этот алгоритм приводится во всех методичках с заданиями, которые я видел. Это скорее их составителям надо по башке надавать за такое отношение к математике. Ну неужели нельзя придумать нормальное задание на цикл while?

Ruslan_M писал(а):Что не так?

А что собственно не так? Выглядит абсолютно стандартно.

Хакер писал(а):К сведению: Ода лени.

Неужели 2^n никак не оптимизируется?
Хотя, член действительно можно пересчитывать из предыдущего. Вполне возможно, что в примере так и сделано.

UPDATE: N надо делать целым.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Задача на итерационный цикл

Сообщение Хакер » 27.12.2012 (Чт) 14:37

Qwertiy писал(а):Потому что 1/2<1

Я знаю, почему. Считает-то оно неправильно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 27.12.2012 (Чт) 14:45

Хакер писал(а):Считает-то оно неправильно.

Оно так и должно считать по задумке составителей.
К тому же, иначе ты вообще не сможешь посчитать в задачах, где ряд расходится, а таких там полно.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Задача на итерационный цикл

Сообщение Хакер » 27.12.2012 (Чт) 14:49

Qwertiy писал(а):Оно так и должно считать по задумке составителей.

Как? При введённой точности «1» выдавая ноль, при том, что реально сумма этого бесконечно ряда = 3?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 27.12.2012 (Чт) 18:20

Хакер писал(а):Как? При введённой точности «1» выдавая ноль, при том, что реально сумма этого бесконечно ряда = 3?

Это надо говорить составителям методичек с заданиями:
part of page 35.png
info.png

Shurrik
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 110
Зарегистрирован: 20.05.2004 (Чт) 5:35
Откуда: Керчь, Крым

Re: Задача на итерационный цикл

Сообщение Shurrik » 28.12.2012 (Пт) 8:29

Не понимаю, о чем спор? Скопировал код в VBA. Запустил. Все работает! Подумал, что неправильно считает. Проверил. Все правильно! Автор вопроса, что тебе не устраивает?
Колесо: Хочешь жить? Умей вертеться.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Задача на итерационный цикл

Сообщение Хакер » 28.12.2012 (Пт) 10:13

Shurrik писал(а):Не понимаю, о чем спор? Скопировал код в VBA. Запустил. Все работает! Подумал, что неправильно считает. Проверил. Все правильно! Автор вопроса, что тебе не устраивает?

Неправильно оно считает.
Правильный, абсолютно точный ответ = 3. При введённой точности «1», должно выдаваться число от 2 до 3, а выводится 0.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 28.12.2012 (Пт) 10:51

Хакер писал(а):Правильный, абсолютно точный ответ = 3. При введённой точности «1», должно выдаваться число от 2 до 3, а выводится 0.

Ну, во-первых, от 2 до 4 :)
А во-вторых, я уже сказал, что оно так и должно считать по задумке составителей задания.

Shurrik писал(а):Автор вопроса, что тебе не устраивает?

Вот мне тоже интересно. Что не устраивает Хакера, понятно. А вот почему вообще тут вопрос возник - нет...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Задача на итерационный цикл

Сообщение Хакер » 28.12.2012 (Пт) 10:58

Qwertiy писал(а):А во-вторых, я уже сказал, что оно так и должно считать по задумке составителей задания.

А я написал, но почему-то не отправил сообщение, что у составителей совершенно другая задача с совершенно другой последовательностью (убывающей не всём протяжении, в то время как наша последовательность сначала возрастает, потом убывает).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 28.12.2012 (Пт) 13:52

С точки зрения матанализа это всё равно не верно. Например, sum {i in 1 to INF} of (1/i) = INF, но этот ряд вполне подходит под приведённые рассуждения.


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

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

Сейчас этот форум просматривают: SemrushBot и гости: 55

    TopList