#include
#include
using namespace std;
class RocketEngine {
public:
string fuelType;
double stageVolumes[3];
double stageSpeeds[3];
double stageTimes[3];
RocketEngine(string fuel, double volumes[3], double speeds[3], double times[3]) {
fuelType = fuel;
copy(volumes, volumes + 3, stageVolumes);
copy(speeds, speeds + 3, stageSpeeds);
copy(times, times + 3, stageTimes);
}
void speedAtTime(double time) {
double speed = 0;
for (int i = 0; i < 3; ++i) {
if (time <= stageTimes[i]) {
speed = stageSpeeds[i] / stageTimes[i] * time;
cout << "Скорость через " << time << " секунд: " << speed << endl;
return;
}
time -= stageTimes[i];
speed = stageSpeeds[i];
}
cout << "Скорость через " << time + stageTimes[0] + stageTimes[1] + stageTimes[2] << " секунд: " << speed << endl;
}
void timeToOrbit(double orbitSpeed) {
// Логику упростил
double totalTime = 0;
for (int i = 0; i < 3; ++i) {
if (orbitSpeed <= stageSpeeds[i]) {
totalTime += orbitSpeed / stageSpeeds[i] * stageTimes[i];
cout << "Время до выхода на орбиту: " << totalTime << " секунд" << endl;
return;
}
totalTime += stageTimes[i];
orbitSpeed -= stageSpeeds[i];
}
cout << "Время до выхода на орбиту: не достижима" << endl;
}
void currentStage(double time) {
if (time <= stageTimes[0]) {
cout << "Работает 1-я ступень" << endl;
} else if (time <= stageTimes[0] + stageTimes[1]) {
cout << "Работает 2-я ступень" << endl;
} else if (time <= stageTimes[0] + stageTimes[1] + stageTimes[2]) {
cout << "Работает 3-я ступень" << endl;
} else {
cout << "Орбитальный полёт. Время полета: " << time - stageTimes[0] - stageTimes[1] - stageTimes[2] << " секунд" << endl;
}
}
~RocketEngine() {}
};
int main() {
double volumes[3] = {1000, 500, 250};
double speeds[3] = {3000, 5000, 7000};
double times[3] = {120, 180, 240};
RocketEngine engine("Liquid Hydrogen", volumes, speeds, times);
engine.speedAtTime(200);
engine.timeToOrbit(6000);
engine.currentStage(500);
return 0;
}
Функции-элементы:
-создание и инициализация (конструктор),
-выдать сообщение о скорости ракеты через определенное время (заданное в аргументе), считая, что скорость растет линейно,
-выдать сообщение о том, сколько времени должно пройти к моменту выхода на заданную орбиту,
-выдать сообщение о том, какая ступень работает в данный момент (время – в аргументе), если все ступени уже отключились, то выдать сообщение об орбитальном полете и времени такого полета,
-деструктор