using System;
class Program
{
static void Main(string[] args)
{
// Запрашиваем у пользователя данные для расчета тормозного пути
Console.WriteLine("Введите скорость транспортного средства (км/ч):");
double speed = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Выберите вид транспортного средства:\n" +
"1. Мопед\n" +
"2. Мотоцикл\n" +
"3. Легковой автомобиль\n" +
"4. Грузовой автомобиль до 12 тонн\n" +
"5. Грузовой автомобиль свыше 12 тонн или автобус");
int vehicleType = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Выберите вид дорожного покрытия:\n" +
"1. Сухой асфальт\n" +
"2. Обледенение\n" +
"3. Дождь");
int roadCondition = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Введите время восприятия опасности водителем (секунды):");
double perceptionTime = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Введите время реакции водителя (секунды):");
double reactionTime = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Введите уклон дороги (%):");
double slope = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Выберите направление движения в случае уклона:\n" +
"1. Вверх\n" +
"2. Вниз");
int slopeDirection = Convert.ToInt32(Console.ReadLine());
// Рассчитываем тормозной путь
double brakingDistance = CalculateBrakingDistance(speed, vehicleType, roadCondition, perceptionTime, reactionTime, slope, slopeDirection);
// Выводим результат
Console.WriteLine($"Тормозной путь: {brakingDistance} метров");
Console.WriteLine("Нажмите любую клавишу для выхода...");
Console.ReadKey();
}
static double CalculateBrakingDistance(double speed, int vehicleType, int roadCondition, double perceptionTime, double reactionTime, double slope, int slopeDirection)
{
// Коэффициенты для расчета тормозного пути в зависимости от типа транспортного средства и дорожного покрытия
double vehicleCoefficient = 0;
double roadCoefficient = 0;
switch (vehicleType)
{
case 1: // Мопед
vehicleCoefficient = 0.5;
break;
case 2: // Мотоцикл
vehicleCoefficient = 0.7;
break;
case 3: // Легковой автомобиль
vehicleCoefficient = 0.8;
break;
case 4: // Грузовой автомобиль до 12 тонн
vehicleCoefficient = 1.2;
break;
case 5: // Грузовой автомобиль свыше 12 тонн или автобус
vehicleCoefficient = 1.5;
break;
default:
Console.WriteLine("Неправильно выбран вид транспортного средства.");
break;
}
switch (roadCondition)
{
case 1: // Сухой асфальт
roadCoefficient = 0.7;
break;
case 2: // Обледенение
roadCoefficient = 1.5;
break;
case 3: // Дождь
roadCoefficient = 1.2;
break;
default:
Console.WriteLine("Неправильно выбран вид дорожного покрытия.");
break;
}
// Рассчитываем тормозной путь в метрах
double brakingDistance = (speed / 3.6 * perceptionTime) +
(speed / 3.6 * reactionTime) +
(Math.Pow(speed / 3.6, 2) / (2 * 9.8 * (vehicleCoefficient + roadCoefficient)));
// Корректируем тормозной путь для уклона дороги
if (slopeDirection == 2) // Если движение вниз по уклону
{
brakingDistance += Math.Abs((Math.Pow(speed / 3.6, 2) / (2 * 9.8)) * Math.Sin(Math.Atan(slope / 100)));
}
return brakingDistance;
}
}