http://www.stroustrup.com/Programming/PPP2code/std_lib_facilities.h
Chapter 8 // Exercise 11
11. Write a function that finds the smallest and the largest element of a vector argument and also computes the mean and median. Do not use global variables. Either return a struct containing the results or pass them back through reference arguments. Which of the two ways of returning several result values do you prefer and why?
#include "stdafx.h"
#include "std_lib_facilities.h"
struct stats
{
double smallest;
double largest;
double mean;
double median;
};
//print vectors to the screen
void print(const vector<double>& price)
{
for (int i = 0; i < price.size(); ++i)
{
cout << price[i] << endl;
}
cout << "--------------------------------" << endl;
}
//print struct
void print(const stats& s)
{
cout << "Largest: " << s.largest << endl;
cout << "Smallest: " << s.smallest << endl;
cout << "Mean: " << s.mean << endl;
cout << "Median: " << s.median << endl;
}
stats findVectorStats(const vector<double>& v, vector<double> v_copy, stats& stat)
{
//initialise values
stat.largest = v[0];
stat.smallest = v[0];
stat.mean = v[0];
stat.median = v[0];
//if vector only has 1 value return that
if (v.size() == 1)
return stat;
for (int i = 0; i < v.size(); ++i)
{
//if next value is bigger than last, make that new largest
if (stat.largest < v[i])
stat.largest = v[i];
//if next value is smaller than last, make than new min
else if (stat.smallest > v[i])
stat.smallest = v[i];
//add numbers together for mean calculation
stat.mean += v[i];
}
//find mean
stat.mean = stat.mean / v.size();
//find median by sorting to find middle number
sort(v_copy.begin(), v_copy.end()); //put in ascending order
//if vector has odd number of items
if (v_copy.size() % 2 != 0)
{
stat.median = v_copy[(v_copy.size() / 2)];
}
//if vector has even number of items
else
{
stat.median = (v_copy[v_copy.size() / 2 - 1] + v_copy[v_copy.size() / 2]) / 2;
}
//return struct
return stat;
}
int main()
{
vector<double> numbers = { 1, -9, 2, 3, 3, 3, 1500 };
stats findStats;
findVectorStats(numbers, numbers, findStats);
print(findStats);
keep_window_open();
return 0;
}
I really wanted to separate all the different operations into their own functions however Bjarne said to create just one. I also decided to return a struct of all the values to save having four separate variables in main().
No comments:
Post a Comment