Полет тела, брошенного под углом к горизонту - Pascal ABC
Формулировка задачи:
Реализация модели «Полет тела, брошенного под углом к горизонту»
Помогите,пожалуйста, переделать код на Паскаль ABC.
Решение задачи: «Полет тела, брошенного под углом к горизонту»
textual
Листинг программы
Program PodUglom; Uses Crt, GraphABC; Type G = Array[1..4] Of Real; Const A = 0; B =0.1; {ГЇГ*Г°Г*ìåòðû ìîäåëè} Al = Pi / 4; {óãîë - ГЇГ*Г°Г*ìåòð ìîäåëè} H = 0.001; Hpr = 0.1; {ГёГ*ГЈ ГЁГ*òåãðèðîâГ*Г*ГЁГї ГЁ ГёГ*ГЈ âûâîäГ* ðåçóëüòГ*òîâ} Var N, I, J, M, L, K : Integer; Y0, Y : G; X0, X, Xpr, A1, B1, Cosinus, Sinus : Real; LS : String; Function Ff(I : Integer; X : Real; Y : G) : Real; {îïèñГ*Г*ГЁГҐ ГЇГ°Г*âûõ Г·Г*Г±ГІГҐГ© äèôôåðåГ*öèГ*ëüГ*ûõ ГіГ°Г*ГўГ*ГҐГ*ГЁГ©} Begin Case I Of 1: Ff:=-A1*Sinus*Y[l]-B1*Sinus*Sqrt(Sqr(Y[1])+Sqr(Y[2]))*Y[1]; 2: Ff:=-Sinus-A1*Sinus*Y[1]-B1*Sinus*Sqrt(Sqr(Y[1])+Sqr(Y[2]))*Y[2]; 3: Ff:=Y[1]/(2*Cosinus); 4: Ff:=2*Y[2]/Sinus; End; End; Procedure Runge_Kut (N: Integer; Var X: Real; Y0: G; Var Y: G; ГЌ : Real); {ìåòîä ГђГіГ*ГЈГҐ-ГЉГіГІГІГ* ÷åòâåðòîãî ïîðÿäêГ*} Var I : Integer; Z, K1, K2, ГЉГ‡, ГЉ4 : G; Procedure Right(X : Real; Y : G; Var F : G) ; {âû÷èñëåГ*ГЁГҐ ГЇГ°Г*âûõ Г·Г*Г±ГІГҐГ© äèôôåðåГ*öèГ*ëüГ*ûõ ГіГ°Г*ГўГ*ГҐГ*ГЁГ©} Var I : Integer; Begin For I := 1 To N Do F[I] := Ff(I, X, Г“); End; Begin Right(X, Y0, K1); X := X + ГЌ / 2; For I := 1 To N Do Z[I]:=Y0[I]+H*K1[I]/2; Right(X, Z, K2); For I := 1 To N Do Z[I]:=YO[I]+H*K2[I]/2; Right(X, Z, ГЉГ‡); Г•:=Г•+ГЌ/2; For I := 1 To N Do Z[I] := Y0[I] + H * ГЉГ‡ [I]; Right (X, Z, ГЉ4); For I := 1 To N Do Y[I]:=Y0[I]+H*(K1[I]+2*K2[I]+2*K3[I]+K4[I])/6; End; {ñëåäóþùèé áëîê - äëÿ ïîëó÷åГ*ГЁГї ÷èñëåГ*Г*ûõ ðåçóëüòГ*òîâ ïðè îäГ*îì Г*Г*áîðå ГЇГ*Г°Г*ìåòðîâ} Begin Sinus := Sin(Al); Cosinus := Cos(Al); Al := A; Bl := B; ClrScr; N:=4; X0:=0; Y0[l]:=Cosinus; Y0[2]:=Sinus; Y0[3]:=0; Y0[4]:=0; WriteLn(' âðåìÿ, ñêîðîñòü êîîðäèГ*Г*ГІГ»'); WriteLn; X := Г•0; Xpr := 0; Y[4] := Y0[4]; While Y[4] >= 0 Do Begin If X >= Xpr Then Begin WriteLn ('t=', X : 6 : 3, ' Vx='. Y0[l] : 6 : 3, ' Vy=', Y0[2] : 6 : 3. ' X=', y0[3] : 6 : 3, ' Y=', Y0[4] : ГЎ : 3) ; Xpr := Xpr + Hpr; End; Runge_Kut(N, X, Y0, Y, H); Y0 := Y ; End; WriteLn; WriteLn('äëÿ ïðîäîëæåГ*ГЁГї Г*Г*æìèòå ëþáóþ ГЄГ«Г*ГўГЁГёГі'); Repeat Until KeyPressed End; {ñëåäóþùèé áëîê - äëÿ èçîáðГ*æåГ*ГЁГї ГІГ°Г*åêòîðèé ïðè Г*åñêîëüêèõ Г*Г*áîðГ*Гµ ГЇГ*Г°Г*ìåòðîâ} Begin DetectGraph (J, M); InitGraph (J, M, ''); L := 1; Al := A; Bl := Г‚; Sinus := Sin(Al); Cosinus := Cos(Al); While L < 5 Do Begin N := 4; {Êîëè÷åñòâî ГіГ°Г*ГўГ*ГҐГ*ГЁГ© Гў ñèñòåìå} Г•0 := 0; Y0[l] := Cosinus; {ГЌГ*Г·Г*ëüГ*ûå óñëîâèÿ} Y0[2] := Sinus; Y0[3] := 0; Y0[4] := 0: SetColor(L); Line(400, 50 + 20 * (L - 1), 440, 50 + 20 * (L - 1)); OutTextXY(450, 50 + 20 * (L - 1), '1 = '); Str(L, LS); OutTextXY(480, 50+20*(L-l), LS); X:=X0; Y[4]:=Y0[4]; While Y[4] >= 0 Do Begin Runge_Kut(N, X, Y0, Y, H); Y0 := Y; PutPixel(Abs(Trunc(Y0[3]*500)), GetMaxY-Abs(Trunc(Y0[4]*500)), L) ; End; Bl := Bl * 10; L := L + 1; End; OutTextXY(10, 50, 'äëÿ ïðîäîëæåГ*ГЁГї Г*Г*æìèòå ëþáóþ ГЄГ«Г*ГўГЁГёГі'); Repeat Until KeyPressed; CloseGraph; End.
Объяснение кода листинга программы
- В начале кода объявлены переменные и константы:
- N, I, J, M, L, K - целочисленные переменные
- Y0, Y - массивы из 4 элементов для хранения значений функции
- X0, X, Xpr, A1, B1, Cosinus, Sinus - вещественные переменные
- LS - строковая переменная для хранения результата вычисления функции
- A, B, Al, Bl - константы с значениями 0, 0.1, Pi/4, 0.001 соответственно
- Затем определена функция Ff, которая принимает два аргумента: I (целое число) и X (вещественное число), и возвращает вещественное число. Функция Ff используется в процедуре Runge_Kut.
- Процедура Runge_Kut принимает три аргумента: N (целое число), X (вещественное число) и Y0 (массив из 4 элементов). Она использует функцию Ff для вычисления значений функции на каждом шаге и обновления массива Y.
- В основной части кода определены начальные значения переменных, включая значения функции Y0 и X0. Затем происходит итерационный процесс, в котором значения функции Y обновляются с помощью процедуры Runge_Kut.
- В процессе итераций значение переменной Y[4] уменьшается от 0 до 0, и когда оно достигает 0, процесс итераций завершается.
- После завершения итераций выводится график функции с помощью процедуры DetectGraph и InitGraph. График рисуется с помощью функции Line и OutTextXY.
- В конце кода выводится строка
äëÿ ïðîäîëæåГ*ГЁГї Г*Г*æìèòå ëþáóþ ГЄГ«Г*ГўГЁГёГі
, которая представляет собой график функции. - Код повторяется до тех пор, пока не будет нажата клавиша, и завершается с помощью функции CloseGraph.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д