Временная задержка, исполнение кода один раз за интервал времени - C (СИ)
Формулировка задачи:
Всем привет!
Программа имитирующую работу высотомера бомбы. Бамба падает с высоты Н, которая которая задается пользователем. В любой момент времени можно узнать пройденное расстояние по формуле
L = g(t*t)/2, где g = 9.81 m/(c*c)
Высотомер бомбы срабатывает раз в секунду и выводит на терминал текущее значение высоты над поверхностью земли h.
Помогите с кодом программы(дополните) , вот код Простой временной задержки:
# include <stdio.h>
# include <time.h>
# define REPEAT 5
# define DELAY 500
int main()
{
int i;
clock_t now,delay;
for(i=0;i<REPEAT;i++)
{
now=clock();
while(clock()<now+DELAY);
putchar(’\a’);
}
return 0;Решение задачи: «Временная задержка, исполнение кода один раз за интервал времени»
textual
Листинг программы
# include <stdio.h>
# include <time.h>
# define REPEAT 5
// CLOCKS_PER_SEC
# define DELAY CLOCKS_PER_SEC/10
const double dt=0.1;
const double g=9.81;
double y, x, t;
double vy, vy1, vx;
int main()
{
int i;
clock_t now,delay;
printf("Введи высоту падения");
scanf("%f", &y);
printf("Введи гор. скорость");
scanf("%f", &vx);
vy=0.0; vy1=0.0; t=0.0;
while(y>0.0)
{
vy1=vy-g*dt;
y=y+0.5*(vy1+vy)*dt;
vy=vy1;
x=x+vx*dt;
t=t+dt;
now=clock();
printf("Время t=%f c Высота Y=%f м Дальность X=%f м гор.скорость Vx=%f м/с Верт.скорость Vy=%fм/с\n", t, y, x, vx, vy);
while(clock()<now+DELAY);
}
return 0;
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы со временем и вводом-выводом
- Определение переменной REPEAT, которая задает количество повторений движения
- Объявление константы dt, которая определяет временной шаг движения
- Объявление переменных y, x, t, vy, vy1, vx типа double для работы с числами с плавающей точкой
- Ввод начальных значений для переменных y и vx с помощью функции scanf
- Инициализация переменных vy и vy1 нулевыми значениями
- Установка начальное значение переменной t равным нулю
- Запуск цикла while, который будет выполняться до тех пор, пока значение переменной y больше нуля
- Внутри цикла вычисление новой вертикальной скорости vy1 на основе старой вертикальной скорости vy и ускорения свободного падения g, умноженного на временной шаг dt
- Обновление значения переменной y на основе новой вертикальной скорости vy1 и горизонтальной скорости vx, умноженных на временной шаг dt
- Обновление значения переменной vy на значение vy1
- Обновление значения переменной x на основе горизонтальной скорости vx, умноженной на временной шаг dt
- Обновление значения переменной t на значение временного шага dt
- Вывод на экран значений переменных t, y, x, vx и vy с помощью функции printf
- Запуск цикла while, который будет ожидать, пока текущее время не станет равным заданному времени задержки (DELAY) после предыдущего вывода на экран
- Код внутри цикла while выполняется только один раз за интервал времени DELAY
- По завершении цикла while выполнение программы продолжается
- Возврат значения 0, что означает успешное завершение программы
- Значение 0, возвращаемое функцией main, говорит о том, что программа успешно завершилась
- Значение 0, возвращаемое функцией main, говорит о том, что программа успешно завершилась