/* CSCI 200: Lab 1A (Math Equation Solver): Tyler Beckman * * Author: Tyler Beckman * * A C++ program to interactively solve 10 different mathmatical equations, * using the appropriate constants where relevant. I decided to implement all 10 * rather than just 2 because it sounded interesting and I wanted to challenge * myself. It also will keep prompting for the equation to solve until you * explicitly respond with a 0 or CTRL+C it, rather than just exit once the * equation is calculated. */ #include #include double const MOLAR_GAS_CONSTANT = 8.314'462'618'153'24; double const GRAVITATIONAL_CONSTANT = 0.000'000'000'066'740'8; double const SPHERE_VOLUME_RATIO = 4.0 / 3; double const VACUUM_PERMITTIVITY = 0.000'000'000'008'854'187'818'8; double ideal_gas_law(double moles, double gas_absolute_temperature, double volume) { return (moles * MOLAR_GAS_CONSTANT * gas_absolute_temperature) / volume; } double average_acceleration(double pos_start, double pos_end, double time_start, double time_end) { return (pos_end - pos_start) / std::pow(time_end - time_start, 2); } double ohms_law(double voltage, double resistance) { return voltage / resistance; } double universal_gravitation(double mass_one, double mass_two, double distance) { return GRAVITATIONAL_CONSTANT * ((mass_one * mass_two) / std::pow(distance, 2)); } double pythagorean_theorem(double x, double y) { return std::sqrt(std::pow(x, 2) + std::pow(y, 2)); } double sphere_volume(double radius) { return SPHERE_VOLUME_RATIO * M_PI * std::pow(radius, 3); } double deflection(double weight, double length, double elasticity_modulus, double moment_of_inertia) { return (weight * std::pow(length, 3)) / (3 * elasticity_modulus * moment_of_inertia); } double heat_transfer_rate(double transfer_coefficient, double surface_area, double temperature_change) { return transfer_coefficient * surface_area * temperature_change; } double stress(double force, double area) { return force / area; } double shear_stress(double sigma_x, double sigma_y, double tau_xy, double theta) { return -0.5 * (sigma_x - sigma_y) * sin(2 * theta) + tau_xy * cos(2 * theta); } double coulombs_law(double charge_1, double charge_2, double relative_static_permittivity, double distance) { return std::fabs(charge_1 * charge_2) / (4 * M_PI * VACUUM_PERMITTIVITY * relative_static_permittivity * std::pow(distance, 2)); } double input_double(std::string prompt) { double out; while (true) { std::cout << prompt + ": "; std::cin >> out; if (std::cin.fail()) { // The clear and ignore are necessary because otherwise it seems to keep // reusing the first input a person enters std::cin.clear(); std::cin.ignore(std::numeric_limits::max(), '\n'); std::cout << "Invalid number, please make sure your number is formatted " "correctly." << std::endl; } else { break; } } return out; } int main() { while (true) { std::cout << "[0] Quit program" << std::endl << "[1] Ideal gas law" << std::endl << "[2] Average acceleration" << std::endl << "[3] Ohm's law" << std::endl << "[4] Universal gravitation" << std::endl << "[5] Pythagorean theorem" << std::endl << "[6] Sphere volume" << std::endl << "[7] Deflection" << std::endl << "[8] Heat transfer rate" << std::endl << "[9] Stress" << std::endl << "[10] Shear Stress" << std::endl << "[11] Coulomb's law" << std::endl; int equation_choice = input_double("Which equation would you like to calculate?"); double calculated_value; switch (equation_choice) { case 0: return 0; case 1: calculated_value = ideal_gas_law( input_double("Please enter amount of moles"), input_double("Please enter the gas absolute temperate"), input_double("Please enter the volume")); break; case 2: calculated_value = average_acceleration( input_double("Please enter the starting position"), input_double("Please enter the ending position"), input_double("Please enter the starting time"), input_double("Please enter the ending time")); break; case 3: calculated_value = ohms_law(input_double("Please input the voltage"), input_double("Please input the resistance")); break; case 4: calculated_value = universal_gravitation( input_double("Please input the mass of object 1"), input_double("Please input the mass of object 2"), input_double("Please input the distance between objects")); break; case 5: calculated_value = pythagorean_theorem(input_double("Please input the x distance"), input_double("Please input the y distance")); break; case 6: calculated_value = sphere_volume(input_double("Please input the sphere radius")); break; case 7: calculated_value = deflection(input_double("Please input the force of weight"), input_double("Please input the length"), input_double("Please input the elasticity modulus"), input_double("Please input the moment of inertia")); break; case 8: calculated_value = heat_transfer_rate( input_double("Please input the transfer coefficient"), input_double("Please input the surface area"), input_double("Please input the change in temperature")); break; case 9: calculated_value = stress(input_double("Please input the amount of force"), input_double("Please input the surface area")); break; case 10: calculated_value = shear_stress( input_double("Please enter σ_x"), input_double("Please enter σ_y"), input_double("Please enter τ_xy"), input_double("Please enter θ (in radians)")); break; case 11: calculated_value = coulombs_law( input_double("Please input the first charge"), input_double("Please input the second charge"), input_double("Please input the relative static permittivity"), input_double("Please input the distance between charges")); break; default: std::cout << "That is not a valid equation choice. Please try again." << std::endl; continue; } std::cout << "The result of that calculation is: " << calculated_value << std::endl; } }