L1A/main.cpp
2024-08-25 19:11:50 -06:00

174 lines
No EOL
6.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* CSCI 200: Lab XX (_INSERT_LAB_HERE_): XXXX (_GIVE_BRIEF_DESCRIPTION_HERE_)
*
* Author: XXXX (_INSERT_YOUR_NAME_HERE_)
*
* More complete description here...
*/
#include <iostream>
#include <cmath>
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 = 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 * 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()) {
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "Invalid number, Please try again" << 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 = input_double("Which equation would you like to calculate?");
std::string output = "";
switch (equation) {
case 0:
return 0;
case 1:
output = 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:
output = 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:
output = ohms_law(input_double("Please input the voltage"),
input_double("Please input the resistance"));
break;
case 4:
output = 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:
output =
pythagorean_theorem(input_double("Please input the x distance"),
input_double("Please input the y distance"));
break;
case 6:
output = sphere_volume(input_double("Please input the sphere radius"));
break;
case 7:
output = 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:
output = 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:
output = stress(input_double("Please input the amount of force"),
input_double("Please input the surface area"));
break;
case 10:
output = shear_stress(
input_double("Please enter σ_x"), input_double("Please enter σ_y"),
input_double("Please enter τ_xy"), input_double("Please enter θ"));
break;
case 11:
output = 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 choice. Please try again."
<< std::endl;
continue;
}
std::cout << "The result of that calculation is: " << output << std::endl;
}
}