/****************************************************
Write a program that reads in the file numbers.txt
and prints out the standard deviation of the numbers
there.  The file numbers .txt looks like this:

N = 3
DATA:
67
61
82

I.e. there's a header that tells you how many numbers
are in the file, and then you get all the numbers.
Recall that the standard deviation is

      ______________________
     / -- n
    /  \     (xi - ave)^2
   /    |    ------------
  /    /        n - 1
\/     -- i = 1

 ****************************************************/
#include <stdio.h>
#include <math.h>

int main() {
  // Open input file, read header, get N = # of int's
  FILE* fin = fopen("numbers.txt", "r");
  int N;
  fscanf(fin, " N = %i DATA:", &N);

  // Create array data and read N int's from input
  int data[N];
  for(int i = 0; i < N; ++i) {
    fscanf(fin, " %i", &data[i]);
  }

  // we can close the file now
  fclose(fin);

  // Cycle through array summing all the elements
  int sum = 0;
  for(int j = 0; j < N; ++j) {
    sum += data[j];
  }
  double average = sum / (double)N;

  // Cycle through the array summing the squares of
  // the elements minus the average
  double sqsum = 0;
  for(int j = 0; j < N; ++j) {
    sqsum += (data[j] - average) * (data[j] - average);
  }
  double stddev = sqrt(sqsum / (N-1));

  // Print out standard deviation
  printf("The standard deviation is %g\n", stddev);

  return 0;
}