Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 02.04.2008, 00:37   #1
Artinka
 
Аватар для Artinka
 
Регистрация: 16.03.2008
Адрес: СПб
Сообщений: 5
Репутация: 10
Вопрос 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
Репутация: 65
По умолчанию

Помойму проблема вот тут:
Код:
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
Репутация: 10
По умолчанию

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

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

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
После подключения dll комп зависает!!! Irat Помощь студентам 1 07.02.2008 22:18
Пауза в выполнении программы Иллидан Общие вопросы Delphi 6 24.01.2008 17: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


23:01.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.