Полет тела, брошенного под углом к горизонту - 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.

Объяснение кода листинга программы

  1. В начале кода объявлены переменные и константы:
    • 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 соответственно
  2. Затем определена функция Ff, которая принимает два аргумента: I (целое число) и X (вещественное число), и возвращает вещественное число. Функция Ff используется в процедуре Runge_Kut.
  3. Процедура Runge_Kut принимает три аргумента: N (целое число), X (вещественное число) и Y0 (массив из 4 элементов). Она использует функцию Ff для вычисления значений функции на каждом шаге и обновления массива Y.
  4. В основной части кода определены начальные значения переменных, включая значения функции Y0 и X0. Затем происходит итерационный процесс, в котором значения функции Y обновляются с помощью процедуры Runge_Kut.
  5. В процессе итераций значение переменной Y[4] уменьшается от 0 до 0, и когда оно достигает 0, процесс итераций завершается.
  6. После завершения итераций выводится график функции с помощью процедуры DetectGraph и InitGraph. График рисуется с помощью функции Line и OutTextXY.
  7. В конце кода выводится строка äëÿ ïðîäîëæåГ*ГЁГї Г*Г*æìèòå ëþáóþ ГЄГ«Г*ГўГЁГёГі, которая представляет собой график функции.
  8. Код повторяется до тех пор, пока не будет нажата клавиша, и завершается с помощью функции CloseGraph.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5
Похожие ответы