Вам выдан жёсткий механический чёрный ящик~— контейнер массой~$m_1$. Внутри контейнера находится груз массой~$m_2$, который подвешен на лёгкой пружине жёсткостью~$k_1$ к потолку ящика. Второй груз массой~$m_3$ подвешен к грузу~$m_2$ другой лёгкой пружиной жёсткостью~$k_2$. В~системе есть небольшое вязкое трение, которое зависит от~скоростей тел. Ускорение свободного падения~$g = 9.81~м/с^2$ параллельно боковым стенкам ящика.
Ящик может перемещаться вверх или вниз с кусочно-заданным постоянным ускорением. Эта зависимость задается длительностью (в секундах) и ускорением (в $м/с^2$) для каждого отрезка. Симуляция показывает в «реальном времени» значение силы~$F$, которую нужно приложить к ящику, чтобы реализовать заданное ускорение в текущий момент времени, а также показывает значение времени. Программа также сохранит расчет в текстовый файл, который расположен там же, где и файл программы. Все симуляции всегда начинаются с одинаковыми начальными конфигурациями тел.
\textit{Примечание}: Каждое измерение силы~$F$ обладает небольшой случайной погрешностью. Пружины можно считать линейными для разумно малых деформаций. Для больших деформаций пружины нелинейны. $k_1$~и~$k_2$~— жесткости каждой пружины для малых деформаций вблизи положения равновесия, когда ящик находится в состоянии покоя. Сил~ $F$ и~ускорение считаются положительными, если они направлены вверх. Длина стороны ящика равна $0.6~м$, и~ящик изначально находится в середине комнаты высотой $3~м$. Эксперимент автоматически заканчивается, если ящик достигает потолка или пола или если любая из масс сталкивается с ящиком или другой массой. На рисунке не соблюдён масштаб.
Вначале программа запрашивает последовательность входных действий. Вы можете сделать следующие операции:
- Чтобы добавить участок в схему ускорений, введите два числа и нажмите $\textbf{Enter}$, например: $\texttt{1.5 -0.4}$. Первое число~— это $\textbf{длительность}$ участка в~секундах (должно быть кратным $0.01~c$), а второе число~— $\textbf{ускорение}$ в~$м/с^2$ (должно быть от~$-30$ до~$30$).
- Введите $\texttt{repeat}$, целое число и нажмите $\textbf{Enter}$ для повторения действий, например:
$\texttt{repeat 10}$
Целое число~— это $\textbf{сколько раз}$ вы хотите повторять действия. Каждое повторенное действие должно заканчиваться командой
$\texttt{endrepeat}$.
- Введите $\texttt{endrepeat}$, чтобы завершить повторение действий. При выполнении эксперимента, все действия между $\texttt{repeat}$ и $\texttt{endrepeat}$ будут повторены заданное число раз. Вы не можете повторять действия внутри другого повторения.
- Чтобы изменить интервал времени между последовательными измерениями, введите $\texttt{sample}$ и число, нажмите $\textbf{Enter}$, например: $\texttt{sample 0.4}$. Это число будет новым значением $\textbf{времени между последовательными измерениями}$, т.е. с таким интервалом времени результаты расчетов будут записаны в файл. Значение времени между последовательными измерениями должно быть кратно $0.01~с$. Значение по умолчанию~— $0.01~с$.
- Чтобы завершить последовательность действий и начать эксперимент, введите $\texttt{begin}$.
Вы можете также записать инструкции одной строкой и затем нажать $\textbf{Enter}$. Например, Вы можете ввести
$\texttt{sample 0.4 repeat 10 1.5 0.4 1.5 -0.4 endrepeat begin}$
таким образом запустится расчет со временем между последовательными измерениями равным $0.4 с$ и соответствующими ускорениями ящика $a=0.4~м/с^2$ и $a=-0.4~м/с^2$ 10 раз.
Если ввести некорректные данные, вы получите одно из следующих сообщений об ошибке и можете попытаться ввести данные снова.
- Если ускорение вне диапазона: $\texttt{Acceleration is out of range.}$
- Если длительность действия ускорения вне диапазона: $\texttt{Duration is out of range.}$
- Если время между последовательными измерениями вне диапазона: $\texttt{Sampling time is out of range.}$
- Если число повторений вне диапазона: $\texttt{Number of repeat times is out of range.}$
- Если вы пытаетесь запустить цикл внутри другого цикла действий: $\texttt{Cannot repeat actions inside another repeat.}$
- Если вы пишите $\texttt{endrepeat}$, не задав сначала $\texttt{repeat}$: $\texttt{Cannot end repeat outside repeat.}$
- Во всех остальных случаях: $\texttt{Invalid entry.}$
После того, как Вы ввели $\texttt{begin}$, программа просит задать имя выходного файла $\texttt{Enter name for output file (e.g. "{}results"{}).}$
Введите имя файла и нажмите $\textbf{Enter}$. Вам рекомендуется использовать в имени только латинские буквы и цифры (в противном случае данные могут быть не сохранены). Данные будут сохранены в файле $\texttt{.txt}$ с заданным именем в той же папке, что и файл программы.
После этого программа покажет $\texttt{Begin experiment.}$ и начнёт расчет. Программа будет показывать текущее время от начала эксперимента ($\texttt{Time (s)}$), измеренную величину силы~$F$ ($\texttt{Force (N)}$) и ускорение ящика ($\texttt{Accel (m/s\^{}2)}$). Эти же данные будут также записаны в~текстовый файл.
Затем программа выведет одно из следующих сообщений.
- Если эксперимент успешно закончен: $\texttt{Experiment ended successfully.}$
- Если ящик достиг потолка: $\texttt{The box hit the ceiling. Experiment ended.}$
- Если ящик достиг пола: $\texttt{The box hit the floor. Experiment ended.}$
- Если массы внутри ящика столкнулись или одна из масс внутри ящика столкнулась с ящиком: $\texttt{Masses and/or the box collided. Experiment ended.}$
После окончания эксперимента можно начать следующий.