diff --git a/TP1/CPP/analyzer.cpp b/TP1/CPP/analyzer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9d2659e194aff612ba7e9c2ed5ab69f45c7e5863
--- /dev/null
+++ b/TP1/CPP/analyzer.cpp
@@ -0,0 +1,37 @@
+#include "analyzer.hpp"
+#include <fstream>
+
+
+void Analyzer::append(const double & x){
+  cost.push_back(x);    
+  cumulative_cost.push_back( (cumulative_cost.size()) ? cumulative_cost.back()+x : x);
+  cumulative_square += x*x;
+}
+
+double Analyzer::get_average_cost(){
+  if(cumulative_cost.empty())
+    throw std::runtime_error("List is empty");
+  return cumulative_cost.back()/cumulative_cost.size();
+}
+
+double Analyzer::get_variance(){
+  double mean, mean_square;
+  mean = get_average_cost();
+  mean_square = mean * mean;
+  return cumulative_square - mean_square;
+}
+
+void Analyzer::save_values(const std::string & path){
+  std::ofstream f;
+    size_t i;
+    f.open(path.c_str());
+    for (i = 0; i < cost.size(); ++i)
+      f<<i<<" "<<cost.at(i)<<" "<<get_amortized_cost(i)<<std::endl;
+    f.close();
+}
+
+void Analyzer::plot_values(){
+  size_t i;
+  for (i = 0; i < cost.size(); ++i)
+    std::cout<<i<<" "<<cost.at(i)<<" "<<get_amortized_cost(i)<<std::endl;
+}