Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Упростить программу

Автор: Pautina 24.05.2007 20:27

Нас интересует, сколько времени будет падать парашютист с высоты H (например, H=1000м), если у него не раскроется парашют?
Экспериментально установлено, что сила сопротивления воздуха пропорциональна квадрату скорости, а коэффициент зависит от формы тела. Поэтому ускорение падающего тела имеет вид a=g-k*v2, здесь k – зависящий от массы и формы тела коэффициент (пусть k=0.004). Т.к. мы не знаем формулы, выражающей время падения от массы и формы, применим метод дискретизации непрерывных процессов. При дискретизации обычно время разбивается на небольшие интервалы времени. Считается, что на протяжении одного интервала ничего не происходит, зато по истечении этого интервала параметры, используемые в модели, скачком изменяются (в данном случае уменьшается высота и увеличивается скорость парашютиста), затем все повторяется. Плавно уменьшающаяся высота парашютиста, например, при этом оказывается замененной на последовательность значений высот в моменты времени t=0, t=0.01, t=0.02, … , если интервал дискретизации Δt=0.01. При моделировании таких дискретных процессов на ЭВМ компьютерная модель описывает состояние процесса в один из моментов времени, а состояние в следующий момент времени рассчитывается по реккурентным соотношениям.
Пусть g=10, для некоторого момента времени t известны высота h и скорость тела v. Тогда ускорение a=g-k*v2.
Высота и скорость тела через промежуток времени Δt равны:
Ht+ Δt=Ht-Vt* Δt (считаем, что v не меняется)
Vt+ Δt=Vt+at* Δt (считаем, что a не меняется)
Очевидно, что оба эти равенства тем точнее, чем меньше Δt. Приведенные соотношения и являются реккурентными, выражающими следующее состояние через предыдущее. Необходимо составить программу для проведения экспериментов с ней.


Дана программа на Delphi, а нужно упростить для Pascal. Помогите, пожалуйста!


Прикрепленные файлы
Прикрепленный файл  Parachute.rar ( 175.03 килобайт ) Кол-во скачиваний: 133

Автор: Lapp 25.05.2007 12:25

Цитата(Pautina @ 24.05.2007 17:27) *

Дана программа на Delphi, а нужно упростить для Pascal. Помогите, пожалуйста!

Pautina, я не совсем понимаю - из-за пары строк арифметических действий нужно брать всю программу и переделывать?? Переделывать придется практически все - и ввод данных, и графику, и классы... Не проще ли сделать с нуля? Неужели так трудно запрограммировать умножение и сложение? blink.gif
Неужели велосипед нельзя собрать просто так, а обязательно нужно переделывать из атомобиля?
Если согласна с начала - я помогу.
Если нужно обязательно переделывать - я пас..

Автор: Pautina 26.05.2007 3:03

Lapp, я особо с физикой не дружу, поэтому не совсем понимаю, что требуется сделать, вот и пришлось искать хоть какой-то исходник. Прогу надо сдать на паскале. Очень надеюсь на твою помощь! буду рада даже алгоритму решения! Спасибо!

Автор: Lapp 26.05.2007 8:35

Цитата(Pautina @ 26.05.2007 0:03) *

Lapp, я особо с физикой не дружу, поэтому не совсем понимаю, что требуется сделать,

Я понимаю, что ты не понимаешь smile.gif.
Но на самом деле все очень просто!
Посмотри, вот минимальная прога, которая моделирует движение тела на основании описанного у тебя итерационного процесса. Разберись с ней, пожалуйста, задавай вопросы, если непонятно.
Впоследствии в эту программу можно вставить графику..
{simulating of a free falling in air}
{by Lapp for Pautina}
const
g=9.8;
var
t,h,v,dt,k:real;

begin
WriteLn('Введите данные:');
Write('высота падения в метрах, h = ');
ReadLn(h);
Write('коэффициент сопротивления воздуха, k = ');
ReadLn(k);
Write('шаг по времени, dt = ');
ReadLn(dt);
v:=0;
t:=0;
WriteLn('Полетели..');
while h>0 do begin
h:=h-v*dt;
v:=v+(g-k*Sqrt(v))*dt;
t:=t+dt;
{раскомментировать следующую строку для вывода промежуточных результатов}
{WriteLn('t=',t:8:4,'h=',h:8:4,'v=',v:8:4);}
end;
WriteLn('Ваш полет продолжался ',t:8:4,' секунд');
v:=v*3.6;
WriteLn('Скорость приземления равна ',v:8:4,' км/ч');
WriteLn('Приятных переломов!');
ReadLn
end.


Автор: Lapp 26.05.2007 9:11

Pautina, у меня к тебе просьба:
М
исправь, пожалуйста, название темы

- сделай что-то типа "Моделирование свободного падения в воздухе" - ладно?
И постарайся не переделывать программы, а писать их - уверяю тебя, это намного проще и интереснее smile.gif

Автор: Pautina 27.05.2007 19:33

Спасибо огромное! ты мне очень помог! а как я могу изменить тему? что-то не выходит..

Автор: Lapp 28.05.2007 2:44

Цитата(Pautina @ 27.05.2007 16:33) *

как я могу изменить тему? что-то не выходит..

Редактируй первый пост. Там увидишь