Объясните код - VB
Формулировка задачи:
короче закомментируйте плз код мне ,чтобы было понятно , что делает каждая строка ( если лень каждую, то хотя бы основные )код очень большой,если так не понятно , то ниже сама программа<3
Option Explicit Dim X As Single Dim Y As Single Dim kol As Integer Dim I As Integer Dim T As Single Const N As Long = 10 'количество шариков Dim Time As Integer Dim tikcir(N) As Boolean 'флажки попадания в мишень Dim CoStop As Long, CoCurr As Long 'Для подсчёта количества частица и контроля над таймером Dim TiStop As Long, TiCurr As Long 'Для подсчёта времени и контроля над таймером Dim TiCo As Boolean Const D As Double = 15 ' размер шариков; переменная для начальных координат стартового шарика Dim VX(N) As Double, VY(N) As Double, V(N) As Double Dim a_X(N) As Double, a_Y(N) As Double 'координаты шариков Dim TN As Double, tik As Long Dim II As Integer, JJ As Integer Dim vXij As Double, vYij As Double Private Sub Command3_Click(Index As Integer) 'Аргумент Index имеет тип Integer и указывает индекс того элемента управления, к которому применяется данная процедура For I = 0 To N 'цикл,удаляющий шарики Shape1(I).Visible = False 'шарики становятся невидимыми Next I Label4.Caption = "Время: 0 Частиц: 0" 'сброс значений времени и количества частиц End Sub Private Sub Form_Load() Randomize ' Show Label4.Caption = "Время: 0 Частиц: 0" Picture1.Scale (0, 0)-(400, 400) 'метод,который задаёт систему координат Dim I As Integer, J As Integer Timer1.Enabled = False 'остановка таймера Me.ScaleWidth = 400 'Область , на которой может происходить движение шариков Me.ScaleHeight = 400 'Область , на которой может происходить движение шариков Shape1(0).Height = D 'начальное положение стартового шарика на оси Y Shape1(0).Width = D ' начальное положение стартового шарика на оси X Shape1(0).Top = a_X(1) 'X Shape1(0).Left = a_Y(1) 'Y VX(0) = 110 VY(0) = 40 For I = 1 To N 'цикл ,выводящий массив объектов в хаотичном положении Load Shape1(I) 'загрузка экзампляра shape1 With Shape1(I) 'блок для установки свойств объекта shape1(I) .Visible = True .Shape = 3 .Width = D .Height = D a_X(I) = Int(Rnd * 300 + D) 'a_X(I - 1) + 50 .Top = a_X(I) a_Y(I) = Int(Rnd * 300 + D) .Left = a_Y(I) End With Next I For I = 0 To N 'проверка начальной позиции, с условие попадания в мишень при расстановке частиц Dim cX As Long 'позиция центра частицы на экране Dim cY As Long 'позиция центра частицы на экране cX = Shape1(I).Width / 2 + Shape1(I).Left cY = Shape1(I).Height / 2 + Shape1(I).Top Dim mX As Long 'позиция центра мишени на экране Dim mY As Long 'позиция центра мишени на экране Dim mR As Long 'радиус мишени mX = Shape2.Width / 2 + Shape2.Left mY = Shape2.Height / 2 + Shape2.Top mR = Shape2.Width / 2 If ((cX - mX) * (cX - mX) + (cY - mY) * (cY - mY) <= mR * mR) Then 'стандартное условие попадения в центр окружности (x-a)^2+(y-b)^2=R^2, где a и b - центр окружности tikcir(I) = True Else tikcir(I) = False End If Next I kol = Val(Text1.Text) Time = Val(Text2.Text) Text1.SetFocus End Sub Sub Timer1_Timer() Dim I As Long, J As Long Dim K As Double, dX As Double, dY As Double Dim VIR As Double, VJR As Double Dim cX As Long 'позиция центра частицы на экране Dim cY As Long 'позиция центра частицы на экране Dim mX As Long 'позиция центра мишени на экране Dim mY As Long 'позиция центра мишени на экране Dim mR As Long 'радиус мишени Dim Work As Boolean Dim Ghost As Integer 'так как отлов ведётся на выходе из мишени, то в эту переменную будет подсчитыватся сумма в частиц в кругу на данный момент Work = False 'проверяем на условия окончания If (CoCurr + Ghost < CoStop) And (TiCurr < TiStop) Then Work = True Else Work = False End If If Work Then tik = tik + 1 If tik > TN Then K = TN + 1 - tik For I = 0 To N 'тут распишем условие попадания cX = Shape1(I).Width / 2 + Shape1(I).Left cY = Shape1(I).Height / 2 + Shape1(I).Top mX = Shape2.Width / 2 + Shape2.Left mY = Shape2.Height / 2 + Shape2.Top mR = Shape2.Width / 2 If ((cX - mX) * (cX - mX) + (cY - mY) * (cY - mY) <= mR * mR) Then 'стандартное условие попадения в центр окружности (x-a)^2+(y-b)^2=R^2, где a и b - центр окружности ' попадает на данном такте tikcir(I) = True Else If tikcir(I) Then ' был на мишени в прошлом такте CoCurr = CoCurr + 1 End If tikcir(I) = False End If Label4.Caption = "Время: " + Str(TiStop - TiCurr) + " Частиц: " + Str(CoCurr + Ghost) a_Y(I) = a_Y(I) + VY(I) * K: Shape1(I).Left = a_Y(I) a_X(I) = a_X(I) + VX(I) * K: Shape1(I).Top = a_X(I) Next I Select Case JJ Case -1: VX(II) = -VX(II) Case -2: VY(II) = -VY(II) Case Else dX = (a_X(II) - a_X(JJ)) / D dY = (a_Y(II) - a_Y(JJ)) / D vXij = VX(JJ) - VX(II) vYij = VY(JJ) - VY(II) VIR = (dY * vYij + dX * vXij) VJR = (dX * vYij - vXij * dY) VX(JJ) = VX(II) - VJR * dY VY(JJ) = VY(II) + VJR * dX VX(II) = VX(II) + VIR * dX VY(II) = VY(II) + VIR * dY End Select near_Bac Else For I = 0 To N 'тут распишем условие попадания cX = Shape1(I).Width / 2 + Shape1(I).Left cY = Shape1(I).Height / 2 + Shape1(I).Top mX = Shape2.Width / 2 + Shape2.Left mY = Shape2.Height / 2 + Shape2.Top mR = Shape2.Width / 2 If ((cX - mX) * (cX - mX) + (cY - mY) * (cY - mY) <= mR * mR) Then 'стандартное условие попадения в центр окружности (x-a)^2+(y-b)^2=R^2, где a и b - центр окружности ' попадает на данном такте tikcir(I) = True Else If tikcir(I) Then ' был на мишени в прошлом такте CoCurr = CoCurr + 1 End If tikcir(I) = False End If Label4.Caption = "Время: " + Str(TiStop - TiCurr) + " Частиц: " + Str(CoCurr + Ghost) a_Y(I) = a_Y(I) + VY(I): Shape1(I).Left = a_Y(I) a_X(I) = a_X(I) + VX(I): Shape1(I).Top = a_X(I) Next I End If Timer1.Enabled = True Timer1.Interval = 10 Time = 0 For I = 1 To Time Time = Time + 1 Label4.Caption = Time Ghost = 0 For J = 0 To N If tikcir(J) Then Ghost = Ghost + 1 End If Next J Next I Else Ghost = 0 For I = 0 To N If tikcir(0) Then Ghost = Ghost + 1 End If Next I Timer1.Enabled = False Label4.Caption = "Время: " + Str(TiStop - TiCurr) + " Частиц: " + Str(CoCurr) If (CoCurr <= CoStop) And (TiCurr = TiStop) Then MsgBox "В объектив не попало заданное число частиц", vbInformation Else MsgBox "В объектив попало заданное число частиц", vbInformation End If End If End Sub Private Sub Command1_Click(Index As Integer) For I = 0 To N Shape1(I).Visible = True Next I CoStop = Val(Text1.Text) TiCurr = 0 TiStop = Val(Text2.Text) CoCurr = 0 Timer2.Interval = 1000 Timer2.Enabled = True Call Timer1_Timer End Sub Private Sub Command2_Click(Index As Integer) Timer1.Enabled = False Timer2.Enabled = False End Sub Sub near_Bac() Dim I As Integer, J As Integer, T As Double Dim V As Double, xn As Double, yn As Double Dim dX As Double, dY As Double TN = 1.79769313486231E+308 For I = 0 To N - 1 For J = I + 1 To N vXij = VX(J) - VX(I) vYij = VY(J) - VY(I) If vXij <> 0 Or vYij <> 0 Then T = 1.79769313486231E+308 dX = a_X(I) - a_X(J) dY = a_Y(I) - a_Y(J) V = Sqr(vXij * vXij + vYij * vYij) yn = (dX * vYij - vXij * dY) / V If Abs(yn) <= D Then xn = (dX * vXij + vYij * dY) / V If xn >= 0 Then T = (xn - Sqr(D * D - yn * yn)) / V End If If T < TN Then TN = T: II = I: JJ = J End If Next J Next I For I = 0 To N If VX(I) > 0 Then T = (Me.ScaleHeight - a_X(I) - D) / VX(I): If T < TN Then II = I: JJ = -1: TN = T ElseIf VX(I) < 0 Then T = -a_X(I) / VX(I): If T < TN Then II = I: JJ = -1: TN = T End If If VY(I) > 0 Then T = (Me.ScaleWidth - a_Y(I) - D) / VY(I): If T < TN Then II = I: JJ = -2: TN = T ElseIf VY(I) < 0 Then T = -a_Y(I) / VY(I): If T < TN Then II = I: JJ = -2: TN = T End If Next I tik = 0 End Sub Sub Timer2_Timer() TiCurr = TiCurr + 1 I = I + 1 End Sub Private Sub Timer3_Timer() If (Text1.Text = "") Or (Text2.Text = "") Then Frame2.Enabled = False Else Frame2.Enabled = True End If End Sub
Решение задачи: «Объясните код»
textual
Листинг программы
Dim X As Single 'объявляем X как урезанную вещественную Dim Y As Single 'объявляем Y как урезанную вещественную и т.д.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д