Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //• ВАРИАНТ РЕШЕНИЯ ЗАДАЧИ О ДОЗАПРАВКЕ САМОЛЁТА С ГРУЗОМ
- /*
- ПОСТАНОВКА ЗАДАЧИ
- Cамолет должен пролететь с грузом из пункта А в пункт С через пункт В. Емкость бака у самолета – 300 литров. Потребление топлива на 1 км в зависимости от веса груза следующее:
- — до 500 кг, включительно : 1 литров / км
- — до 1000 кг, включительно : 4 литров / км
- — до 1500 кг, включительно : 7 литров / км,
- — до 2000 кг, включительно : 9 литров / км.
- — более 2000 кг самолет не поднимает.
- Пользователь вводит расстояние между пунктами А и В, расстояние между пунктами В и С, а также вес груза.
- Программа должна рассчитать какое минимальное количество топлива необходимо для дозаправки самолету в пункте В, чтобы долететь из пункта А в пункт С. В случае невозможности преодолеть любое из расстояний – вывести ERROR.
- Формальное решение:
- 1. ВХОДНЫЕ ДАННЫЕ
- Ёмкость бака capacityMax = 300 (л) — константа
- Массив потребления q[] = {1, 4, 7, 9} — расход топлива (в л/км)
- Остаток топлива rest = capacityMax (л)
- Массив расстояний d[] — вводится пользователем (в км)
- Вес груза weight вводится пользователем (в кг)
- 2. ФОРМУЛЫ
- WI = (ceil(weight) - 1) / 500 — индекс весовой категории (деление целочисленное!)
- fuelCalculation = q[WI] * d[i] — расход топлива на отрезке пути (л)
- 3. АЛГОРИТМ
- вычисляем индекс весовой категории WI. Если WI > 3, то ERROR (ПЕРЕГРУЗКА)
- летим из А в В: расчёт fuelCalculation = q[WI] * d[0] — потребность в топливе на пути АВ
- сравнить rest и fuelCalculation. Если rest < fuelCalculation, то ERROR (НЕ ДОЛЕТИТ ДО В), иначе rest -= fuelCalculation
- летим из В в С: расчёт fuelCalculation = q[WI] * d[1] — потребность в топливе на пути ВС
- сравнить rest и fuelCalculation. Если rest < fuelCalculation, то ДОЗАПРАВКА, иначе вывод 0 и конец (ДОЛЕТЕЛИ ДО С)
- ДОЗАПРАВКА: если fuelCalculation > capacityMax, то ERROR (НЕ ДОЛЕТИТ ДО С), иначе вывод fuelCalculation - rest
- конец
- */
- #include <iostream>
- #include <iomanip>
- #include <cstdlib>
- #include <cmath> // используется функция ceil() — округление вверх
- #define ERROUT { cout << "ERROR"; return 0; }
- using namespace std;
- int main(){
- /* Объявление данных */
- const double capacityMax = 300.0; // вместимость бака
- double q[] = {1, 4, 7, 9}; // потребление топлива на 1 км
- double d[2], weight; // длина пути AB, длина пути BC, вес груза
- double rest = capacityMax; // остаток топлива в баке
- /* Обработка */
- setlocale(LC_ALL, "rus");
- cin >> d[0] >> d[1] >> weight;
- int WI = (ceil(weight) - 1) / 500; // индекс весовой категории: 0, 1, 2, 3 …
- if (WI > 3) ERROUT // перегрузка — выход из программы
- double fuelCalculation = d[0] * q[WI]; // расход топлива на пути AB
- if (rest < fuelCalculation) ERROUT // не долетит до В — выход из программы
- rest -= fuelCalculation; // остаток топлива в городе В
- fuelCalculation = d[1] * q[WI]; // расход топлива на пути BC
- if (rest < fuelCalculation) // если остаток меньше потребности …
- {
- if (fuelCalculation > capacityMax) ERROUT // не долетит до C — выход из программы
- cout << fixed << setprecision(2) << fuelCalculation - rest; // минимум дозаправки
- }
- else {cout << "0.00"; return 0;} // дозаправка не требуется
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement