calculates the standard devation and variances of the given data set and determines whether a number is an outlier in the set
#include <iostream>
#include <cstdarg>
#include <vector>
#include <cmath>
using namespace std;
struct sd
{
sd();
sd(int,...);
~sd(){s.clear();}
public:
int t;
vector<double> s;
double sum;
double var(){
double avg = mean(),to = 0;
for(vector<double>::iterator start = s.begin();start<s.end();start++)
to += pow(avg - *start,2);
return to/t;
}
double mean(){return (sum/t);}
double std(){return sqrt(var());}
bool isOutlier(double x){
double s = std()*3,avg = mean();
return (x>(avg-s)&&x<(avg+s)?true:false);
};
};
sd::sd()
{
int c;
double x;
sum = 0;
cout << "Enter number of data sets: ";
cin >> t;
if(!cin)
cerr << "You must enter an integer!";
else
{
vector<double> m(t);
c = t;
cout << "Enter data sets:\n";
do
{
cin >> x;
m[t-c] = x;
sum+=x;
} while(--c>0);
s = m;
m.clear();
}
}
sd::sd(int h,...)
{
sum = 0;
va_list vl;
va_start(vl,h);
double val;
t = h;
vector<double> m(h);
for (int i=0;i<h;i++)
{
m[i] = double(val=va_arg(vl,double));
sum+=val;
}
s = m;
m.clear();
va_end(vl);
}
int main()
{
sd test(5,600.0, 470.0, 170.0, 430.0, 300.0);
cout << test.var() << endl; // returns variance
cout << test.std() << endl; // returns standard deviation
cout << test.isOutlier(450.0); // returns true if 450 is an outlier
return 0;
}