Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Помогите пожалуйста найти ошибку в массивах Добавлено: 06.06.11 22:42  

Автор вопроса:  Яблоко | ICQ: 582888880 
Помогите пожалуйста найти ошибку в массивах и в поиске экстремумов
:-)
'Описание переменных
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
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #1
Добавлено: 06.06.11 23:28
Отступы. Их нет. Плохое оформление кода отбивает желание его читать у кого угодно

Ответить

Номер ответа: 2
Автор ответа:
 Ким Чен Ир



Вопросов: 0
Ответов: 140
 Профиль | | #2 Добавлено: 06.06.11 23:37
Все тактично молчат, наверное не могут подобрать мягкие выражения, глядя на это.
Начинай с первой же строки. Поставь Option Expliit. Посыпится шквал сообщеий об ошибках.
  1. Dim x(), y(), Ei(), Run(), Ob() As Single
- Это у тебя объявления массивов. Все кроме последнего имеют не верный тип (variant). Надо так:
  1. Dim x() As Single, y() As Single, ...

Половина, нет, больше половины переменных не объявлены вовсе. И бейсик по умолчанию подставляет variant.
  1. Function f(a As Single, b As Single) As Single
- Объявлена функция с двумя параметрами single
Что должен означать такой ее вызов: 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 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам