Примеры использования циклов для решения физических задач
Пример 5. Вычислить и объем параболоида вращения, полученного с помощью вращения параболы вокруг оси OZ. Высота параболоида равна H. Разобьем параболоид на достаточно большое количество N дисков (цилиндров) радиусов и высотой dz. Очевидно, объем параболоида (V) равен сумме объемов цилиндров (dV), а центр масс лежит на оси OZ в точке, координата которой определяется по формуле
Задаем следующую заготовку
procedure TForm1.Button1Click(Sender: TObject);
Var
a,H,z,dz,r,V,dV,S,dS:real;
N,i:integer;
Begin //начало процедуры
a:=StrToFloat(Edit1.Text); // ввод параметра параболы
H:=StrToFloat(Edit2.Text); // высота параболоида
N:=StrToInt(Edit3.Text); // количество дисков (точность вычисления)
dz:=H/N; // высота диска
V:=0; // заводим ячейку памяти для вычисления объема
S:=0; // заводим ячейку памяти для вычисления суммы
for i:=1 to N do //открываем цикл (i – номер диска)
begin //начало тела цикла
z:=dz*i; // координата диска
r:=sqrt(z/a); // радиус диска
dV:=pi*r*r*dz; // объем диска
dS:=z*dV; // слагаемое суммы
V:=V+dV; // накапливаем объем
S:=S+dS; // накапливаем сумму
end; //конец тела цикла
Label4.Caption:='Объем параболоида'+#13
+'V= '+FloatToStr(V); // вывод результата объем
Label5.Caption:='Центр масс параболоида'+#13
+'Z= '+FloatToStr(S/V); // вывод результата центра масс
end; //конец процедуры
Пример 6. Составить программу для вычисления высоты и времени подъема шара массы m (кг) и радиуса r (cм), принимая, что сопротивление воздуха равно , где v- скорость движения, - площадь проекции тела на плоскость, перпендикулярную направлению его движения, и k- численный коэффициент, зависящий от формы тела и имеющий для шара значение 0,24 . Начальная скорость шара V0 (м/с).
Решение
Применим второй закон Ньютона. Ось координат ОХ направим вверх. Тогда ускорение определяется по формуле . Как видим, ускорение изменяется, поэтому в данной задаче нельзя применять обычные формулы равноускоренного движения. Компьютерный метод решения задачи следующий.
Рассмотрим достаточно малый промежуток времени dt, в течение которого скорость не успевает сильно измениться, поэтому на этом участке движение можно считать равноускоренным, поэтому возможно применение формул равноускоренного движения.
Алгоритм решения следующий
· Ввод констант k, g
· Вводится точность решения задачи (максимальное время расчета, шаг по времени и количество малых промежутков времени, на которых производится расчет). Очень важно выбрать правильный шаг по времени dt. Чем меньше dt, тем точнее результат, но увеличивается машинное время для проведения расчетов.
· Ввод данных массы, радиуса шара и начальной скорости через процедуры Edit
· Ввод начальных условий. Согласно принципу причинности, для полного определения движения частицы необходимо задать начальное положение и начальную скорость. Для нашей задачи x 0 и v V0
· Вычисление площади сечения
· Вычисление коэффициента
· Если рассматривать движение в достаточно малый промежуток времени, движение можно считать равноускоренным. Поэтому вводится цикл по времени и на каждом участке вычисляется ускорение по формуле .
· На каждом малом промежутке времени вычисляется новое значение скорости и координаты.
· Вывод значения времени и координаты
procedure TForm1.Button1Click(Sender: TObject);
Const
g=9.8; // ускорение свободного падения
k=0.24; // численный коэффициент
dt=0.001; // малый промежуток времени
Var
m,r,V0,S,f,t,V,x,a:real; // описание переменных
begin //начало процедуры
m:=StrToFloat(Edit1.Text); // ввод массы
r:=StrToFloat(Edit2.Text)*0.01; // ввод радиуса (в метрах)
V0:=StrToFloat(Edit3.Text); // ввод начальной скорости
S:=pi*r*r; // площадь
f:=k*S/m; // коэффициент сопротивления
t:=0; // начальное время
V:=V0; // начальная скорость
x:=0; // начальная координата
while V>=0 do //введение цикла с условием
begin //начало тела цикла
a:=-g-f*V*V; // ускорение
t:=t+dt; // пересчет времени
V:=V+a*dt; // пересчет скорости
x:=x+V*dt; // пересчет координаты
end; //конец тела цикла
Label7.Caption:='t= '+FloatToStr(t)+' c'+#13 // вывод времени
+'x= '+FloatToStr(x)+' м'; // вывод координаты
end; //конец процедуры