Помощь - Поиск - Пользователи - Календарь
Полная версия: Полёт снаряда
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Virus
Надо расчитать полёт снаряда, вылетевшего из пушки, методом Рунге-Кутты 4-го порядка. В расчетах надо учитывать силу сопротивления, равную C*V*V*V, где С-постоянный коэффициент. Заранее спасибо!
Дож
Вот здесь посмотри FAQ

А здесь решение твоей задачи летящий камень (правда на C)
Altair

Дож,
Цитата
4. Не предлагайте свои решения на других языках, кроме Паскаля. (Исключение только с согласия модератора.)

...
модератор предупрежден ? wink.gif
volvo
Цитата
А здесь решение твоей задачи "летящий камень" (правда на 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 отличий..." Кстати, вполне работоспособная программа, только что проверил.
Дож
Это какой паскаль?
Цитата

operator * (const a: tvector; const f: double) v: tvector;

shok.gif

Free?
klem4
Цитата(Дож @ 19.01.2006 20:18) *

Это какой паскаль?

shok.gif

Free?


yes2.gif

А ты наверное думал что Паскаль, увидев код на C по твоей ссылке, встанет в сторонку и будет нервно курить ?) blum.gif
Дож
Цитата

А ты наверное думал что Паскаль, увидев код на C по твоей ссылке, встанет в сторонку и будет нервно курить ?)

Нет, тот код простой, я б скорее удивился бы если бы в паскале не было бы средств его переписать.

Но по поводу определения функций +,- (и т.п.) я и вправду думал, что паскаль стоит в стронке и нервно курит. rolleyes.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.