2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Задача по VBA (цикл)
Сообщение15.05.2011, 22:00 


02/04/11
44
Киев
В общем нужно подсчитать сумму ряда например от 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 
Заслуженный участник


27/04/09
28128
Поставьте условие на $n$!

 Профиль  
                  
 
 Re: Задача по VBA (цикл)
Сообщение16.05.2011, 10:06 
Заслуженный участник
Аватара пользователя


07/01/10
2015
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 


01/07/08
836
Киев
caesarus
Примените select case n c else. На 5,7 ничего не делайте, в остальных случаях изменяйте сумму. С уважением,

 Профиль  
                  
 
 Re: Задача по VBA (цикл)
Сообщение08.06.2011, 15:59 
Заслуженный участник


27/04/09
28128
Зачем Case, когда можно обойтись Ifом?

 Профиль  
                  
 
 Re: Задача по VBA (цикл)
Сообщение09.06.2011, 09:27 


01/07/08
836
Киев
arseniiv в сообщении #455696 писал(а):
Зачем Case, когда можно обойтись Ifом?

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

(Оффтоп)

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

 Профиль  
                  
 
 Re: Задача по VBA (цикл)
Сообщение09.06.2011, 11:37 
Заслуженный участник


27/04/09
28128
Ну, во-первых, у интерпретируемого (а вроде это именно так, по сравнению с VB и VB.NET) VBA будет мало разницы в скорости If и Case, и насчёт удобности чтения я сомневаюсь в таком простом условии. Только вот автор темы, скорее всего, давно уже её не смотрит. :?

 Профиль  
                  
 
 Re: Задача по VBA (цикл)
Сообщение09.06.2011, 13:24 


01/07/08
836
Киев
arseniiv в сообщении #456012 писал(а):
будет мало разницы в скорости If и Case, и насчёт удобности чтения я сомневаюсь в таком простом условии


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

 Профиль  
                  
 
 Re: Задача по VBA (цикл)
Сообщение09.06.2011, 15:03 


02/04/11
44
Киев
Не надо говорить, что я не смотрю тему, прост задачку я решил, а то, что вы здесь обсуждаете выходит за моё понимание)))
к стати, вот работающая программа:
код: [ скачать ] [ спрятать ]
Используется синтаксис 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 


01/07/08
836
Киев
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 


16/06/10
199
Тоже неплохо смотрится...
Используется синтаксис 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 
Заслуженный участник


26/07/09
1559
Алматы
А можно вообще без явных проверок обойтись. Просто написав On Error Resume Next в начала программы... :)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group