#include<iostream>
#include<fstream>
#include<math.h>
#include<stdlib.h>
using namespace std;

/* Statistique des tailles dans un fichier (exprimees en metres) */

int main(){
  const int N = 300;
  /* On va dire que toutes les tailles inferieures a 0 cm sont
     egales a 0, et toutes les tailles superieures a 299 cm
     egales a 299. De cette facon on a un tableau de taille
     bien determinee, meme si on ne connait pas encore
     les valeurs explicites, ni leur nombre, et on n'aura pas
     besoin de lire le fichier deux fois. */
  int* tailles = (int*)malloc(N * sizeof(int));
  int c, i;
  double x, xmin, xmax, s, s2, moy, ectyp;
  fstream fich;

  s = 0.; s2 = 0.; c = 0;
  xmin = (N-1)/100.; xmax = 0.;
  for (i = 0; i < N; i++)
    tailles[i] = 0;
  fich.open("fich_tailles.dat", ios::in);
  while (fich >> x){
    c++;
    cout << c << " : " << x << endl;
    if (x < 0.) x = 0.;
    if (x > (N-1)/100.) x = (N-1)/100.;
    if (x < xmin) xmin = x;
    if (x > xmax) xmax = x;
    s += x;
    s2 += x*x;
    tailles[(int)floor(x*100)]++;
  }
  fich.close();
  cout << "Nombre total de tailles : " << c << endl;
  if (c > 0){
    cout << "Valeur minimale : " << xmin << " m" << endl;
    cout << "Valeur maximale : " << xmax << " m" << endl;
    moy = s/c;
    cout << "Valeur moyenne  : " << moy << " m" << endl;
    ectyp = sqrt(s2/c - moy*moy);
    cout << "Ecart type      : " << ectyp << " m" << endl;
    cout << "taille < 1 cm : " << tailles[0] << endl;
    for (i = 1; i < N-1; i++)
      cout << i << " cm <= taille < " << i+1 << " cm : " << tailles[i] << endl;
    cout << "taille >= " << N-1 << " cm : " << tailles[N-1] << endl;
  }
  free(tailles);
  return 0;
}
