Другие языки программирования и технологии

Срочно нужна помощь. помогите пожалуйста найти ошибку

Rem Описание переменных
Dim x(), y(), Ei(), Run(), Ob() As Single
Private n, i As Integer
Private x0, xk, y0, h, minx, maxx, miny, maxy As Single
Rem Описание функции
Function f(a, b) As Single
f = b * (1 / Tan(a))
End Function
Rem Метод Эйлера
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
Rem Метод Рунге-кутта
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
Rem Общее решение
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
Private Sub Command1_Click()
Rem Ввод данных
x0 = 3.14 / 2
y0 = 1
xk = 3 * 3.14 / 4
h = 3.14 / 20
Text1.Text = x0
Text2.Text = y0
Text3.Text = xk
Text4.Text = h
Rem Расчет количества отрезков табулирования
n = Round((xk - x0) / h)
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

For i = 0 To n
minx = x0
maxx = xk
miny = y0
maxy = Run(i)
If Ei(i) < Ob(i) Then miny = Ei(i)
If Run(i) < Ob(i) Then maxy = Run(i)
If Ei(i) > Run(i) Then maxy = Ei(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 = Round((Picture1.Height - 1200) / (xk - x0), 4)
ky = Round((Picture1.Width - 1000) / (maxy - miny), 4)
Rem Запись значений экстремумов на шаблон графика
Label16.Caption = Str(miny)
Label15.Caption = Str(maxy)
Label17.Caption = Str(minx)
Label18.Caption = Str(maxx)
Rem Расчет экранных координат, построение графика и определение цвета
Picture1.DrawWidth = 1
For i = 0 To n - 1
z1 = 720 + (x(i) - x0) * kx
z2 = 5400 - (Ei(i) - miny) * ky
z3 = 720 + (x(i + 1) - x0) * kx
z4 = 5400 - (Ei(i + 1) - miny) * 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) - x0) * kx)
z2 = Round(5400 - (Run(i) - miny) * ky)
z3 = Round(720 + (x(i + 1) - x0) * kx)
z4 = Round(5400 - (Run(i + 1) - miny) * ky)
Picture1.Line (z1, z2)-(z3, z4), RGB(0, 9999, 0)
Next i
Picture1.DrawWidth = 1
For i = 0 To n - 1
z1 = 720 + (x(i) - x0) * kx
z2 = 5400 - (Ob(i) - miny) * ky
z3 = 720 + (x(i + 1) - x0) * kx
z4 = 5400 - (Ob(i + 1) - miny) * ky
Picture1.Line (z1, z2)-(z3, z4), RGB(9999, 0, 0)
Next i
End Sub

Это решение дифференциального уравнения в среде VISUAL BASIK 6.0
помогите найти ошибку в формировании массивов и в поиске экстремумов.
Денис Чусов
Денис Чусов
1 266
Option Explicit
Option Base 0
Const RX As Integer = 4 ' округление
Dim x0 As Single, xk As Single, y0 As Single, h As Single ' входные параметры
Dim kfx As Single, kfy As Single ' коэффиценты сжатия графика
Dim max As Single, min As Single ' экстремумы
Dim i As Integer

'описание функции, график которой необходимо построить
Function f(a As Single, b As Single) As Single
f = b * (1 / Tan(a))
End Function

'Метод Эйлера
Private Sub Eiler(ARR() As Single, XAR() As Single)
ARR(0) = y0
For i = 0 To UBound(ARR) - 1
ARR(i + 1) = Round(ARR(i) + h * f(XAR(i), ARR(i)), RX)
Next
End Sub

'Метод Рунге-кутта
Private Sub RungeKutta(ARR() As Single, XAR() As Single)
Dim k1 As Single, k2 As Single, k3 As Single, k4 As Single, k As Single
ARR(0) = y0
For i = 0 To UBound(ARR) - 1
k1 = h * f(XAR(i), ARR(i))
k2 = h * f(XAR(i) + h / 2, ARR(i) + k1 / 2)
k3 = h * f(XAR(i) + h / 2, ARR(i) + k2 / 2)
k4 = h * f(XAR(i) + h, ARR(i) + k3)
k = (k1 + 2 * k2 + 2 * k3 + k4) / 6
ARR(i + 1) = Round(ARR(i) + k, RX)
Next
End Sub

' Общее решение
Private Sub Obhee(ARR() As Single, XAR() As Single)
For i = 0 To UBound(ARR)
ARR(i) = Round(Sin(XAR(i)), RX)
Next
End Sub

Private Sub Command1_Click()
Dim n As Integer
Picture1.Cls ' очистка картинки
' ввод данных
x0 = Val(Text1.Text)
y0 = Val(Text2.Text)
xk = Val(Text3.Text)
h = Val(Text4.Text)
' расчет количества отрезков
n = (xk - x0) / h
If n <= 0 Then Exit Sub '
' расклад таблицы
With MSFlexGrid1
.Cols = 4
.Rows = n + 2
.TextMatrix(0, 0) = "x"
.TextMatrix(0, 1) = "Общее"
.TextMatrix(0, 2) = "Эйлер"
.TextMatrix(0, 3) = "Рунге-Кутт"
End With

' определение динамических массивов
ReDim X(n) As Single, Ei(n) As Single, Run(n) As Single, Ob(n) As Single
' заполнить массив X
For i = 0 To n
X(i) = x0 + (i * h)
Next
' формирование массивов
Eiler Ei, X
RungeKutta Run, X
Obhee Ob, X

' заполнение таблицы и поиск экстремумов
max = Ob(0): min = Ob(0) ' произвольное из существующих значений
FlexFill X, 0, False ' массив, столбец, искать экстремум
FlexFill Ob, 1, True ' ...
FlexFill Ei, 2, True ' ...
FlexFill Run, 3, True ' ...
' расчет коэффициэнтов масштабирования
' привязка к габаритам линий абциссы и ординаты (250 - это поправка на концевые стрелки)
If X(n) <> X(0) Then kfx = (LineAbsciss.X2 - LineOrdinat.X1 - 250) / (X(n) - X(0))
If max <> min Then kfy = (LineAbsciss.Y2 - LineOrdinat.Y1 - 250) / (max - min)
' запись значений экстремумов на шаблон графика
minXlabel.Caption = x0
maxXlabel.Caption = xk
minYlabel.Caption = min
maxYlabel.Caption = max
' построение графика функций
Picture1.DrawWidth = 3
DrawGrapf Ob, X, RGB(255, 0, 0)
Picture1.DrawWidth = 2
DrawGrapf Ei, X, RGB(0, 0, 255)
Picture1.DrawWidth = 1
DrawGrapf Run, X, RGB(0, 255, 0)
End Sub
' заполнение таблицы и поиск экстремумов
Private Sub FlexFill(ARR() As Single, column As Integer, exc As Boolean) ' exc - false - не выполнять поиск
For i = 0 To UBound(ARR)
MSFlexGrid1.TextMatrix(i + 1, column) = Format(ARR(i), "0." & String(RX, "0"))
If exc And min > ARR(i) Then min = ARR(i)
If exc And max < ARR(i) Then max = ARR(i)
Next
End Sub

' рисование графика
Private Sub DrawGrapf(ARR() As Single, XAR() As Single, clr As OLE_COLOR)
Dim z1 As Single, z2 As Single, z3 As Single, z4 As Single
For i = 0 To UBound(ARR) - 1
z1 = LineOrdinat.X1 + (XAR(i) - x0) * kfx
z2 = LineAbsciss.Y2 - (ARR(i) - min) * kfy
z3 = LineOrdinat.X1 + (XAR(i + 1) - x0) * kfx
z4 = LineAbsciss.Y2 - (ARR(i + 1) - min) * kfy
Picture1.Line (z1, z2)-(z3, z4), clr
Next
End Sub
Дима Подоляка
Дима Подоляка
331
Лучший ответ
для меня это сложно
Zhakshylyk Kenesh Uulu
Zhakshylyk Kenesh Uulu
55 667
Скинь ка прогу?? ? Подумаем!!!:)))
Maksi Baisary
Maksi Baisary
62 119
Денис Чусов Ссылка для скачивания файла Курсовая(25 вариант).rar
http://file.qip.ru/file/-kGMWeNj/Курсовая_25_вариант_.html ( 317,79 Кб )
запусти в пошаговом режиме отладки и ищи ошибку.. . где непонятно что происходит - выводи на экран содержимое переменных, индексов массивов и тд если отладчик такой инфы не даёт на лету при наведении курсора на переменную в тексте программы в режиме отладки.
АУ
Ардимат Ууу
37 344
Работает все. Проверил. Скидывать не надо. Уже сам скинул. Не стоит пугать людей из деревни и рабочих заводов, которые программный код впервые в жизни видят. А то не дай бог челюсть отвиснет до самого пола от шока.
Андрей Пар
Андрей Пар
31 781
Вот так вот читаешь, читаешь.... Чем больше читаешь, тем большим дибилом себе кажешься Оо
что за неведома ёбана хрень? Х)
Artur Zolotoy
Artur Zolotoy
13 858
и что же не так?
Лучше обратиться на сайт с нужной тематикой, здесь не все такие умные.
это расчёт самГонного аппарата....
Бог поможет.
сбрось исходник на мыло посмотрю

Ну, я думаю.. . думаю... не торопи!
Синхрофазатрон!
Georgi Kirsanidis
Georgi Kirsanidis
1 306
не фига не поняла... вам никто не ответит...
Ceргей Рассадников Считаешь себя самой умной во вселенной?
нужно обработать исключения. там в 3 строке ошибка
Erik Atoyan
Erik Atoyan
893
Скинь прогу
Думаю, лучше задать вопрос на тематическом форуме