Помощь - Поиск - Пользователи - Календарь
Полная версия: Упростить программу
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Pautina
Нас интересует, сколько времени будет падать парашютист с высоты 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. Помогите, пожалуйста!
Lapp
Цитата(Pautina @ 24.05.2007 17:27) *

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

Pautina, я не совсем понимаю - из-за пары строк арифметических действий нужно брать всю программу и переделывать?? Переделывать придется практически все - и ввод данных, и графику, и классы... Не проще ли сделать с нуля? Неужели так трудно запрограммировать умножение и сложение? blink.gif
Неужели велосипед нельзя собрать просто так, а обязательно нужно переделывать из атомобиля?
Если согласна с начала - я помогу.
Если нужно обязательно переделывать - я пас..
Pautina
Lapp, я особо с физикой не дружу, поэтому не совсем понимаю, что требуется сделать, вот и пришлось искать хоть какой-то исходник. Прогу надо сдать на паскале. Очень надеюсь на твою помощь! буду рада даже алгоритму решения! Спасибо!
Lapp
Цитата(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
Pautina, у меня к тебе просьба:
М
исправь, пожалуйста, название темы

- сделай что-то типа "Моделирование свободного падения в воздухе" - ладно?
И постарайся не переделывать программы, а писать их - уверяю тебя, это намного проще и интереснее smile.gif
Pautina
Спасибо огромное! ты мне очень помог! а как я могу изменить тему? что-то не выходит..
Lapp
Цитата(Pautina @ 27.05.2007 16:33) *

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

Редактируй первый пост. Там увидишь
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.