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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2008, 00:37   #1
Artinka
 
Аватар для Artinka
 
Регистрация: 16.03.2008
Сообщений: 5
Вопрос VB6. Программа зависает при выполнении.

Здравствуйте!
Пишу программу на VB6. Тема: вычиление определенных интегралов.
Вроде написала чтото, все логично, продуманно. Но возникла проблема.
Я в вижу нижний предел интегрирования,верхний,....нажимаю кнопку.........и комп зависает, приложение не отвечает....спасает ctrl-alt-del
что делать? почему так происходит?
вот мой код?
Кто захочет помочь но ничего из кода не поймет,могу прислать проект.
Спасибо Вам заранее.


Вот мой код:
Option Explicit

Sub Command4_Click()
Call Shell("NOTEPAD.EXE C:\Documents and Settings\Настёна\Рабочий стол\КР\О программе.txt")
End Sub
Private Sub cmdexit_click()
End
End Sub
Private Sub Command3_Click()
Dim A As Double
Dim B As Double
Dim Eps As Double
Dim S As Double
A = Val(Text1.Text)
B = Val(Text2.Text)
Eps = Val(Text4.Text)
S = Trap(A, B, Eps)
MsgBox ("Интеграл от a=" & Format(A, "000.00") & " до b=" & Format(B, "000.00") & " равен " & Format(S, "000.00"))
End Sub

Private Function F(ByVal X As Double) As Double
F = X * X * X + 2 * (X * X) - 3 * X - 8
End Function

Private Function Trap(ByVal A As Double, ByVal B As Double, ByVal Eps As Double) As Double
Dim H As Double
Dim S As Double
Dim S0 As Double
Dim S1 As Double
Dim Sn As Double
Dim I As Integer
Dim N As Integer
S = 1
Sn = 101
N = 4
S0 = (F(A) + F(B)) / 2
S1 = F((A + B) / 2)
Do While (Math.Abs(S - Sn) > Eps)
Sn = S
H = (B - A) / N
I = 0
Do While I < N / 2
S1 = S1 + F(A + (2 * I + 1) * H)
Loop
S = H * (S0 + S1)
N = N * 2
Loop
Trap = S
End Function
Artinka вне форума Ответить с цитированием
Старый 02.04.2008, 03:02   #2
byte916
Пользователь
 
Регистрация: 04.03.2008
Сообщений: 75
По умолчанию

Помойму проблема вот тут:
Код:
Do While (Math.Abs(S - Sn) > Eps) 
Sn = S 
H = (B - A) / N 
I = 0 
Do While I < N / 2 
S1 = S1 + F(A + (2 * I + 1) * H) 
Loop 
S = H * (S0 + S1) 
N = N * 2 
Loop
Цикл уходит в бесконечность, потому что ни I, ни S, ни Sn не изменяется в этом цикле. Ведь N = 4, а I = 0, то Do While I < N / 2 всегда true, и будет выполнятся бесконечно. А переменные S и Sn внутри цикла изменяются таким образом, что цикл при определенные обстоятельствах может уйти в бесконечность.
Если исправить это, то в дальнейшем может возникнуть проблема в предпоследней строчке - Trap = S, переменная trap у вас не объявлена, и её нужно обьявить, но так как она нигде не используется, то эту строчку можно просто удалить.

ps: краткий ответ: проблема заключается в том, что Do While I < N / 2 уходит в цикл, изза того что I всегда меньше N (I=0, N=4).
byte916 вне форума Ответить с цитированием
Старый 03.04.2008, 00:06   #3
Artinka
 
Аватар для Artinka
 
Регистрация: 16.03.2008
Сообщений: 5
По умолчанию

..дааа...точно.... i=i+1........
спасибо большое вам!)))))))
теперь все работает!!

а можно еще вопросик:
вот смотрите, я создала функцию F, в которой могу вводить разные функции , которые впоследствии у меня выступают подынтегральными выражениями. А могу ли я как -нить так сделать, чтобы функцию не задавать внутри программы, а вводить с клавиатуры?
Artinka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
После подключения dll комп зависает!!! Irat Помощь студентам 1 07.02.2008 21:18
Пауза в выполнении программы Иллидан Общие вопросы Delphi 6 24.01.2008 16:56
Странная ошибка при выполнении okolobaxa Общие вопросы Delphi 2 03.07.2007 00:47
Ошибка при выполнении запроса Elena БД в Delphi 3 14.06.2007 15:13
Ошибка при выполнении запроса Elena БД в Delphi 2 25.05.2007 16:19