Цитата
А здесь решение твоей задачи "летящий камень" (правда на C)
Ты думаешь, оно на паскале сильно будет отличаться? Сравни:
{$mode objfpc} type tvector = object public x, y, vx, vy: double; constructor init(ax: double = 0; ay: double = 0; avx: double = 0; avy: double = 0); end; constructor tvector.init(ax: double = 0; ay: double = 0; avx: double = 0; avy: double = 0); begin x := ax; vx := avx; y := ay; vy := avy; end; operator + (const a, b: tvector) v: tvector; begin v.init(); v.x := a.x + b.x; v.y := a.y + b.y; v.vx := a.vx + b.vx; v.vy := a.vy + b.vy; end; operator - (const a, b: tvector) v: tvector; begin v.init(); v.x := a.x - b.x; v.y := a.y - b.y; v.vx := a.vx - b.vx; v.vy := a.vy - b.vy; end; operator * (const a: tvector; const f: double) v: tvector; begin v.init(); v.x := a.x * f; v.y := a.y * f; v.vx := a.vx * f; v.vy := a.vy * f; end; operator * (const f: double; const a: tvector) v: tvector; begin v.init(); v := a * f; end; function F(const U: tvector; T: double): tvector; var res: tvector; const g = 9.81; begin res.init(U.vx, U.vy, 0, - g); result := res; end; var T: double = 0; dT: double = 0.05; x: double = 0; vx: double = 1; y: double = 0; vy: double = 2; U, k1, k2, k3, k4: tvector; begin U.init(x, y, vx, vy); while U.y >= 0 do begin k1 := F(U, t) * dt; k2 := F(U + 0.5*k1, t+0.5*dt)*dt; k3 := F(U + 0.5*k2, t+0.5*dt)*dt; k4 := F(U + k3, T+dT)*dT; U := U + 1.0 / 6.0 * (k1 + 2*k2 + 2*k3 + k4); T := T + dT; writeln('t=', T:10:6, ' x=', U.x:10:6, ' y=', U.y:10:6); end; end.
Называется "найди 10 отличий..." Кстати, вполне работоспособная программа, только что проверил.