#include <cmath>#include <iostream>#include <set>#include <cstdlib>#include <ctime>#include <climits>void generate1000Rand(std::set<int>* numbers, int xlow, int xhigh) { for (int i = 0; i < 100; i++) { numbers->insert(xlow + rand() % (xhigh + 1)); }}long double average(std::set<int>* numbers) { long long unsigned sum = 0; for ( std::set<int>::iterator it = numbers->begin(); it != numbers->end() ; it++ ) { sum += *it; } return sum / 1000;}double rms( std::set<int>* numbers ) { long long unsigned sum = 0; for ( std::set<int>::iterator it = numbers->begin(); it != numbers->end() ; it++ ) { sum += pow((*it), 2); } return sqrt(0.001*(sum));}long double geometricMean(std::set<int>* numbers) { long long unsigned product = 1; for ( std::set<int>::iterator it = numbers->begin(); it != numbers->end() ; it++ ) { product *= *it; } return pow(product, 0.001);}long double harmonicMean( std::set<int>* numbers ) { long double sum = 1; for ( std::set<int>::iterator it = numbers->begin(); it != numbers->end() ; it++ ) { sum += (long double)1/(*it); } return 1000/sum;}int main() { srand(time(NULL)); std::set<int>* numbers = new std::set<int>(); int xlow, xhigh; std::cout << "Please input lower and upper limit." << std::endl; std::cin >> xlow >> xhigh; if ( xlow > xhigh ) { std::cout << "Wrong input. Lower limit got to be smaller than upper "<< std::endl; return 0; } generate1000Rand(numbers, xlow, xhigh); std::cout << "RMS: " << rms(numbers) << std::endl; std::cout << "Average: " << average(numbers) << std::endl; std::cout << "Geometric Mean: " << geometricMean(numbers) << std::endl; std::cout << "Harmonic Mean: " << harmonicMean(numbers) << std::endl; return 0;}
Comments