2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Задача по VBA (цикл)
Сообщение15.05.2011, 22:00 
В общем нужно подсчитать сумму ряда например от 1 до 13 по такой ф-ле $\sum\limits_{n=k}^i\frac{(n+3)^2}{(n-5)(n-7)}$ Проблема в том, что когда n доходит до 5 или 7 очевидно выходит деление на ноль, скажите как зделать так, что-бы при n=5; n=7 член ряда был равен нулю. Вот мой код:
код: [ скачать ] [ спрятать ]
Используется синтаксис Visual Basic
Sub ариф_цикл()


k = Val(InputBox("ввести k"))
i = Val(InputBox("ввести i"))
Y = 0

For N = k To i

Y = Y + (N + 3) ^ 2 / (N - 5) * (N - 7)


Next N

MsgBox ("Y =" & Y)
 

 
 
 
 Re: Задача по VBA (цикл)
Сообщение15.05.2011, 23:10 
Поставьте условие на $n$!

 
 
 
 Re: Задача по VBA (цикл)
Сообщение16.05.2011, 10:06 
Аватара пользователя
caesarus в сообщении #446241 писал(а):
Y = Y + (N + 3) ^ 2 / (N - 5) * (N - 7)

Я в языках программирования ничего не понимаю, но тут явно $(n-7)$ не на своём месте.
caesarus в сообщении #446241 писал(а):
что-бы при n=5; n=7 член ряда был равен нулю

А почему бы не говорить правду? То есть, если 5 и 7 находятся между $k$ и $i$, говорить "сумма расходится" или, ещё лучше, "сумма не определена из-за деления на 0".

 
 
 
 Re: Задача по VBA (цикл)
Сообщение08.06.2011, 10:48 
caesarus
Примените select case n c else. На 5,7 ничего не делайте, в остальных случаях изменяйте сумму. С уважением,

 
 
 
 Re: Задача по VBA (цикл)
Сообщение08.06.2011, 15:59 
Зачем Case, когда можно обойтись Ifом?

 
 
 
 Re: Задача по VBA (цикл)
Сообщение09.06.2011, 09:27 
arseniiv в сообщении #455696 писал(а):
Зачем Case, когда можно обойтись Ifом?

Совершенно случайно, мне пришлось писать на VBA. Постановщик задачи пояснил, что реализация Case работает шустрее. В хелпах же пишут, что они подобны, но Case намного читабельнее и проще в сопровождении разработки.
С уважением.

(Оффтоп)

Не в службу, а в дружбу. Не задавайте, пожалуйста, вопрос безадресно, может я постчу невпопад и недостаточно обдуманно. :?

 
 
 
 Re: Задача по VBA (цикл)
Сообщение09.06.2011, 11:37 
Ну, во-первых, у интерпретируемого (а вроде это именно так, по сравнению с VB и VB.NET) VBA будет мало разницы в скорости If и Case, и насчёт удобности чтения я сомневаюсь в таком простом условии. Только вот автор темы, скорее всего, давно уже её не смотрит. :?

 
 
 
 Re: Задача по VBA (цикл)
Сообщение09.06.2011, 13:24 
arseniiv в сообщении #456012 писал(а):
будет мало разницы в скорости If и Case, и насчёт удобности чтения я сомневаюсь в таком простом условии


В таком простом случае задача оптимизации не нужна. Продукты с префиксом Arc от фирмы Esri широко распространенные ГИС-системы, базовый язык VBA. С уважением,

 
 
 
 Re: Задача по VBA (цикл)
Сообщение09.06.2011, 15:03 
Не надо говорить, что я не смотрю тему, прост задачку я решил, а то, что вы здесь обсуждаете выходит за моё понимание)))
к стати, вот работающая программа:
код: [ скачать ] [ спрятать ]
Используется синтаксис Visual Basic
Sub àðèô_öèêë()


 k = Val(InputBox("ââåñòè k"))
 i = Val(InputBox("ââåñòè i"))
 Y = 0

For n = k To i
If (n - 5) * (n - 7) <> 0 Then

 Y = Y + (n + 3) ^ 2 / ((n - 5) * (n - 7))

End If

Next n

 MsgBox ("Y =" & Y)

End Sub
 

 
 
 
 Re: Задача по VBA (цикл)
Сообщение10.06.2011, 00:15 
caesarus в сообщении #456098 писал(а):
If (n - 5) * (n - 7) <> 0 Then


Вот видите, что дает уверенность в своих силах.
Все таки можно написать и так
  1. Select Case n 
  2. Case 5,7: 
  3. Case Else: 
  4. Y = Y + (n + 3) ^ 2 / ((n - 5) * (n - 7)) 
  5. End Select 

С уважением,

 
 
 
 Re: Задача по VBA (цикл)
Сообщение10.06.2011, 08:48 
Тоже неплохо смотрится...
Используется синтаксис Visual Basic
denom = (n - 5) * (n - 7)
If denom <> 0 Then
    Y = Y + (n + 3) ^ 2 / denom
End If
 

 
 
 
 Re: Задача по VBA (цикл)
Сообщение12.06.2011, 09:29 
А можно вообще без явных проверок обойтись. Просто написав On Error Resume Next в начала программы... :)

 
 
 [ Сообщений: 12 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group