#include #include using namespace std; enum PlanetT {NO_PLANET, MERCURY, VENUS, EARTH, MOON, MARS, JUPITER, SATURN, URANUS, NEPTUNE, PLUTO}; float GetWeightOnEarth(); float ConversionFactor(PlanetT planet); PlanetT GetPlanet(); PlanetT ValidatePlanet(string response); string CleanString(string phrase); string PlanetName(PlanetT planet); float CalculateWeight(PlanetT planet, float weightOnEarth); int main() { PlanetT destination = NO_PLANET; float weightOnEarth; float weightOnDest; destination = GetPlanet(); weightOnEarth = GetWeightOnEarth(); weightOnDest = CalculateWeight(destination, weightOnEarth); cout << "You will travel to " << PlanetName(destination) << endl; cout << "There you will weight " << weightOnDest << endl; return 0; } float ConversionFactor(PlanetT planet) { float factor = 0.0; switch (planet) { case MERCURY: factor = 0.4155f; break; case VENUS: factor = 0.8975f; break; case EARTH: factor = 1.0f; break; case MOON: factor = 0.1666f; break; case MARS: factor = 0.3507f; break; case JUPITER: factor = 2.5374f; break; case SATURN: factor = 1.0677f; break; case URANUS: factor = 0.8947f; break; case NEPTUNE: factor = 1.1794f; break; case PLUTO: factor = 0.0899f; break; case NO_PLANET: factor = 0.0f; break; } return factor; } float CalculateWeight(PlanetT planet, float weightOnEarth){ float newWeight; newWeight = weightOnEarth * ConversionFactor(planet); return newWeight; } float GetWeightOnEarth() { float weight = -1; do { cout << "Enter your weight on Earth : " ; cin >> weight; } while (weight < 0); return weight; } string CleanString(string phrase) { string rv; size_t i; for(i = 0; i < phrase.size(); i++) { if (isalpha(phrase[i])) { rv += char(tolower(phrase[i])); } } return rv; } string PlanetName(PlanetT planet) { string name = "Unknown"; switch(planet) { case MERCURY: name = "Mercury"; break; case VENUS: name = "Venus"; break; case EARTH: name = "Earth"; break; case MOON: name = "Moon"; break; case MARS: name = "Mars"; break; case JUPITER: name = "Jupiter"; break; case SATURN: name = "Saturn"; break; case NEPTUNE: name = "Neptune"; break; case URANUS: name = "Uranus"; break; case PLUTO: name = "Pluto"; break; default: name = "Unknown"; } return name; } PlanetT ValidatePlanet(string response) { PlanetT planet = NO_PLANET; response = CleanString(response); if (response == "mercury") { planet = MERCURY; } else if (response == "venus") { planet = VENUS; } else if (response == "earth") { planet = EARTH; } else if (response == "moon") { planet = MOON; } else if (response == "mars") { planet = MARS; } else if (response == "jupiter") { planet = JUPITER; } else if (response == "saturn") { planet = SATURN; } else if (response == "uranus") { planet = URANUS; } else if (response == "neptune") { planet = NEPTUNE; } else if (response == "pluto") { planet = PLUTO; } return planet; } PlanetT GetPlanet(){ PlanetT planet; string response; do { cout << "Enter the name of your destination planet : "; getline(cin, response); planet = ValidatePlanet(response); if (planet == MARS) { cout << "You can't go to Mars" << endl; planet = NO_PLANET; } } while (planet == NO_PLANET); return planet; }