Statistike
Napisati klasu stats koja računa osnovne statistike nad skupom brojeva. Implementirati sledeće metode:
template <typename T>
class stats {
public:
stats();
void add(const T &value);
size_t get_count() const;
double get_mean() const;
};Dodatno: Implementirati metodu get_variance() koja računa varijansu skupa brojeva, i metodu reset() koja resetuje statistike. Pored toga, implementirati dodatne statistike po želji (npr. standardna devijacija, minimum, maksimum, medijana, itd.).
Test
#include <iostream>
#include <vector>
#include <stdexcept>
namespace matf {
// Ovde ide vasa implementacija
} // namespace matf
int main(void)
{
std::vector<int> data = { 1, 2, 3, 4, 5 };
matf::stats<int> int_stats;
for (const auto &val : data) {
int_stats.add(val);
if (int_stats.get_count() < 2) {
std::cout << "Added: " << val
<< ", Count: " << int_stats.get_count()
<< ", Mean: " << int_stats.get_mean()
<< ", Variance: N/A"
<< std::endl;
continue;
}
std::cout << "Added: " << val
<< ", Count: " << int_stats.get_count()
<< ", Mean: " << int_stats.get_mean()
<< ", Variance: " << int_stats.get_variance()
<< std::endl;
}
std::cout << "------------------" << std::endl;
std::vector<double> data_double = { 1.5, 2.5, 3.5, 4.5, 5.5 };
matf::stats<double> double_stats;
for (const auto &val : data_double) {
double_stats.add(val);
if (double_stats.get_count() < 2) {
std::cout << "Added: " << val
<< ", Count: " << double_stats.get_count()
<< ", Mean: " << double_stats.get_mean()
<< ", Variance: N/A"
<< std::endl;
continue;
}
std::cout << "Added: " << val
<< ", Count: " << double_stats.get_count()
<< ", Mean: " << double_stats.get_mean()
<< ", Variance: " << double_stats.get_variance()
<< std::endl;
}
return 0;
}Rešenje
main.cpp
#include <iostream>
#include <vector>
#include <stdexcept>
namespace matf {
template <typename T>
class stats
{
public:
stats() : count(0), sum(0) {}
void add(const T &value)
{
count++;
sum += value;
}
size_t get_count() const
{
return count;
}
double get_mean() const
{
if (count == 0)
{
throw std::runtime_error("No elements to calculate mean");
}
return static_cast<double>(sum) / count;
}
void reset()
{
count = 0;
sum = 0;
}
private:
size_t count;
T sum;
};
}
int main(void)
{
std::vector<int> data = { 1, 2, 3, 4, 5 };
matf::stats<int> int_stats;
for (const auto &val : data) {
int_stats.add(val);
std::cout << "Added: " << val
<< ", Count: " << int_stats.get_count()
<< ", Mean: " << int_stats.get_mean()
<< std::endl;
}
std::cout << "------------------" << std::endl;
std::vector<double> data_double = { 1.5, 2.5, 3.5, 4.5, 5.5 };
matf::stats<double> double_stats;
for (const auto &val : data_double) {
double_stats.add(val);
if (double_stats.get_count() < 2) {
std::cout << "Added: " << val
<< ", Count: " << double_stats.get_count()
<< ", Mean: " << double_stats.get_mean()
<< std::endl;
continue;
}
std::cout << "Added: " << val
<< ", Count: " << double_stats.get_count()
<< ", Mean: " << double_stats.get_mean()
<< std::endl;
}
return 0;
}