L1B/main.cpp
2024-08-28 22:32:24 -06:00

72 lines
No EOL
2.1 KiB
C++

/* CSCI 200: Lab 1B (Random Classification): Tyler Beckman
*
* Author: Tyler Beckman
*
* A program to generate a random number between user inputted bounds
* (inclusive), and classify it by quartile. In addition, more than one random
* number in the same range can be generated if the user wishes.
*/
#include <chrono>
#include <iostream>
#include <limits>
#include <random>
#include <cmath>
float input_float(std::string prompt) {
float 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<std::streamsize>::max(), '\n');
std::cout << "Invalid number, please make sure your number is formatted "
"correctly."
<< std::endl;
} else {
break;
}
}
return out;
}
int main(void) {
float min = input_float("Please input the minimum value"),
max = input_float("Please input the maximum value");
std::mt19937 mt(std::chrono::steady_clock::now().time_since_epoch().count());
std::uniform_real_distribution<float> realDist(
min, std::nextafter(max, std::numeric_limits<float>::max()));
while (true) {
float randomNumber = realDist(mt);
std::cout << "The random value is: " << randomNumber << std::endl;
float quartileSize = (max - min) / 4.0f;
if (randomNumber < (min + quartileSize)) {
std::cout << "This number is in the first quartile" << std::endl;
} else if (randomNumber < (min + quartileSize) * 2) {
std::cout << "This number is in the second quartile" << std::endl;
} else if (randomNumber < (min + quartileSize) * 3) {
std::cout << "This number is in the third quartile" << std::endl;
} else {
std::cout << "This number is in the fourth quartile" << std::endl;
}
char runAgainInput = 'N';
std::cout << "Do you want another random value? (Y/N) ";
std::cin >> runAgainInput;
if (runAgainInput == 'N') {
std::cout << "Have a nice day!" << std::endl;
break;
}
}
}