Created
February 6, 2019 16:04
-
-
Save mariusvn/ed60bd1491f27aa16cff3fb7685bece3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
** EPITECH PROJECT, 2018 | |
** groundhog | |
** File description: | |
** main.cpp | |
*/ | |
#include <string> | |
#include <iostream> | |
#include <vector> | |
#include <cmath> | |
void print_help(void) | |
{ | |
std::cout << "SYNOPSIS" << std::endl; | |
std::cout << "\t./groundhog period" << std::endl << std::endl; | |
std::cout << "DESCRIPTION" << std::endl; | |
std::cout << "\tperiod\tthe number of days defining a period" << std::endl; | |
} | |
double average(const std::vector<float> &indexes, const int period) | |
{ | |
unsigned long i; | |
double avg = 0; | |
if (indexes.empty()) | |
return 0; | |
if (indexes.size() == 1) | |
return indexes[0]; | |
for (i = 0; i < ((indexes.size() > period) ? period : indexes.size()); i++) { | |
avg += indexes[i]; | |
} | |
avg /= i; | |
return avg; | |
} | |
double deviation(const std::vector<float> &indexes, const int period) | |
{ | |
unsigned long i; | |
double dev = 0; | |
double avg = average(indexes, period); | |
if (indexes.empty()) | |
return 0; | |
if (indexes.size() == 1) | |
return 0; | |
for (i = 0; i < ((indexes.size() > period) ? period : indexes.size()); i++) { | |
dev += pow(indexes[i] - avg, 2); | |
} | |
dev /= i; | |
return dev; | |
} | |
int main(int ac, char **av) | |
{ | |
std::vector<float> dataList = {}; | |
int period; | |
if (ac != 2) { | |
print_help(); | |
return 84; | |
} | |
try { | |
period = std::stoi(av[1]); | |
} catch (std::invalid_argument &e) { | |
print_help(); | |
return 84; | |
} | |
for (std::string line; getline(std::cin, line);) { | |
try { | |
float num = stof(line); | |
dataList.insert(dataList.begin(), num); | |
std::cout << average(dataList, period) << ", " << deviation(dataList, period) << std::endl; | |
if (dataList.size() > period) | |
dataList.pop_back(); | |
} catch (std::invalid_argument &e) { | |
return 84; | |
} | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment