Страница: 1 |
Вопрос: Помогите пожалуйста найти ошибку в массивах | Добавлено: 06.06.11 22:42 |
Автор вопроса: ![]() |
Помогите пожалуйста найти ошибку в массивах и в поиске экстремумов
:-) 'Описание переменных
Dim x(), y(), Ei(), Run(), Ob() As Single Private x0, xk, y0 As Single Rem описание функции,график которой необходимо построить Function f(a As Single, b As Single) As Single f = b * (1 / Tan(a)) End Function 'Метод Эйлера Private Sub Eiler() ReDim x(n + 1) ReDim Ei(n + 1) Ei(0) = y0 For i = 0 To n x(i) = Round(x0 + (i * h), 4) Ei(i + 1) = Round(Ei(i) + h * f(x(i), Ei(i)), 4) Next i End Sub 'Метод Рунге-кутта Private Sub RungeKutta() ReDim x(n + 1) ReDim Run(n + 1) Run(0) = y0 For i = 0 To n x(i) = Round(x0 + i * h, 4) k1 = h * f(x(i), Run(i)) k2 = h * f(x(i) + (h / 2), Run(i) + (k1 / 2)) k3 = h * f(x(i) + (h / 2), Run(i) + (k2 / 2)) k4 = h * f(x(i) + h, Run(i) + k3) k = (k1 + 2 * k2 + 2 * k3 + k4) / 6 Run(i + 1) = Round(Run(i) + k, 4) Next i End Sub 'Общее решение Private Sub Obhee() ReDim x(n + 1) ReDim Ob(n + 1) For i = 0 To n x(i) = Round(x0 + i * h, 4) Ob(i) = Sin(x(i)) Next i End Sub Rem ввод данных Private Sub Command1_Click() x0 = Val(Text1.Text) y0 = Val(Text2.Text) xk = Val(Text3.Text) h = Val(Text4.Text) Rem расчет количества отрезков табулирования n = Round((xk - x0) / h) Rem переопределение динамических массивов ReDim x(n), y(n) Rem расчет количества строк в столбце MSFlexGrid1.Cols = 4 MSFlexGrid1.Rows = n + 2 Rem подписи заголовка таблицы MSFlexGrid1.TextMatrix(0, 0) = "x" MSFlexGrid1.TextMatrix(0, 1) = "Общее рещение" MSFlexGrid1.TextMatrix(0, 2) = "Эйлер" MSFlexGrid1.TextMatrix(0, 3) = "Рунге-Кутт" Rem формирование массивов и поиск экстремумов Eiler RungeKutta Obhee Max = f(x0) Min = f(x0) For i = 0 To n x(i) = x0 + i * h Ob(i) = Round(f(x(i), Ob(i)), 5) Ei(i) = Round(f(x(i), Ei(i)), 5) Run(i) = Round(f(x(i), Run(i)), 5) If Min < Ei(i) Then Min = Ei(i) If Max > Ei(i) Then Max = Ei(i) If Min < Run(i) Then Min = Run(i) If Max > Run(i) Then Max = Run(i) If Min < Ob(i) Then Min = Ob(i) If Max > Ob(i) Then Max = Ob(i) MSFlexGrid1.TextMatrix(i + 1, 0) = Str(x(i)) MSFlexGrid1.TextMatrix(i + 1, 1) = Str(Ob(i)) MSFlexGrid1.TextMatrix(i + 1, 2) = Str(Ei(i)) MSFlexGrid1.TextMatrix(i + 1, 3) = Str(Run(i)) Next i Rem очистка картинки Picture1.Cls Rem расчет коэффициэнтов масштабирования kx = (Picture1.Width - 1200) / (xk - x0) ky = (Picture1.Height - 1000) / (Max - Min) Rem запись значений экстремумов на шаблон графика Label4.Caption = Str(Min) Label5.Caption = Str(Max) Label6.Caption = Str(x0) Label7.Caption = Str(xk) Rem расчет экранных координат и построение графика функции Picture1.DrawWidth = 1 For i = 0 To n - 1 z1 = Round(720 + (x(i) - a) * kx) z2 = Round(5400 - (Ei(i) - Min) * ky) z3 = Round(720 + (x(i + 1) - a) * kx) z4 = Round(5400 - (Ei(i + 1) - Min) * ky) Picture1.Line (z1, z2)-(z3, z4), RGB(0, 0, 9999) Next i Picture1.DrawWidth = 2 For i = 0 To n - 1 z1 = Round(720 + (x(i) - a) * kx) z2 = Round(5400 - (Run(i) - Min) * ky) z3 = Round(720 + (x(i + 1) - a) * kx) z4 = Round(5400 - (Run(i + 1) - Min) * ky) Picture1.Line (z1, z2)-(z3, z4), RGB(0, 9999, 0) Next i Picture1.DrawWidth = 3 For i = 0 To n - 1 z1 = Round(720 + (x(i) - a) * kx) z2 = Round(5400 - (Ob(i) - Min) * ky) z3 = Round(720 + (x(i + 1) - a) * kx) z4 = Round(5400 - (Ob(i + 1) - Min) * ky) Picture1.Line (z1, z2)-(z3, z4), RGB(9999, 0, 0) Next i End Sub Это решение ДУ методами Эйлера и рунге-кутта ПОМОГИТЕ ПОЖАЛУЙСТА |
Ответы | Всего ответов: 7 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 06.06.11 23:28 |
Отступы. Их нет. Плохое оформление кода отбивает желание его читать у кого угодно |
Номер ответа: 2 Автор ответа: ![]() ![]() Вопросов: 0 Ответов: 140 |
Профиль | Цитата | #2 | Добавлено: 06.06.11 23:37 |
Все тактично молчат, наверное не могут подобрать мягкие выражения, глядя на это.
Начинай с первой же строки. Поставь Option Expliit. Посыпится шквал сообщеий об ошибках.
Половина, нет, больше половины переменных не объявлены вовсе. И бейсик по умолчанию подставляет variant.
Что должен означать такой ее вызов: Max = f(x0) ??? Короче, в каждой строчке ошибки. Хочешь чтобы ТАКОЕ исправили, предложи оплату. ![]() |
Номер ответа: 3 Автор ответа: ![]() ![]() ICQ: 582888880 Вопросов: 5 Ответов: 13 |
Профиль | Цитата | #3 | Добавлено: 07.06.11 09:03 |
По моему вместо Max = f(x0)
Должно быть Max = f(x0,y0)
|
Номер ответа: 4 Автор ответа: ![]() ![]() ICQ: 582888880 Вопросов: 5 Ответов: 13 |
Профиль | Цитата | #4 | Добавлено: 07.06.11 09:08 |
Это курсовая работа. Тут на методичке есть пример. Я все делал по примеру. |
Номер ответа: 5 Автор ответа: ![]() ![]() ICQ: 582888880 Вопросов: 5 Ответов: 13 |
Профиль | Цитата | #5 | Добавлено: 07.06.11 19:58 |
http://file.qip.ru/file/ov99ROCi/Исправить.html вот сама прога. попробуйте исправить. если исправите пишите в аську. ничего дополнять и тем более делать все заново не надо. В архиве есть проект, методичка по которой делал. за исправление 100 рублей кину на счет(напишете свой номер телефона в аське). 100 р , по моему, нормальная цена за исправление. Жду! |
Номер ответа: 6 Автор ответа: ![]() ![]() ICQ: 582888880 Вопросов: 5 Ответов: 13 |
Профиль | Цитата | #6 | Добавлено: 07.06.11 20:00 |
http://file.qip.ru/file/ov99ROCi/Исправить.html |
Номер ответа: 7 Автор ответа: ![]() ![]() ICQ: 582888880 Вопросов: 5 Ответов: 13 |
Профиль | Цитата | #7 | Добавлено: 08.06.11 09:36 |
Все![]() |
Страница: 1 |
|