/* File: meddevdi.c */
/* Time-stamp: "2002-05-14 12:53:37 calvanes" */
/* Scopo: parametri di tipo vettore, array dinamici  */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int leggiVettore(int *pvett[], int *plung)
  /* Legge *plung e poi *plung interi e li mette in un vettore allocato
     dinamicamente.  Restituisce il valore di *plung ed il puntatore iniziale
     al vettore.
  */
{
  int i;

  printf("Quanti interi vuoi immettere? ");
  scanf("%d", plung);
  *pvett = malloc(*plung * sizeof(int));

  printf("Immetti %d interi: ", *plung);
  for (i = 0; i < *plung; i++)
    scanf("%d", &(*pvett)[i]);
}


double media(int vett[], int lung)
  /* Calcola la media di lung interi memorizzati in vett. */
{
  int i;
  double m = 0.0;

  for (i = 0; i < lung; i++)
    m += vett[i];

  m /= lung;
  return m;
}


double deviazioneStandard(int vett[], int lung, double med)
  /* Calcola la deviazione standard di lung interi memorizzati in vett,
     ulizzando il valore med come media. */
{
  int i;
  double d = 0.0;

  for (i = 0; i < lung; i++)
    d += (vett[i] - med) * (vett[i] - med);

  d = sqrt(d/(lung-1));
  return d;
}


int main (void)
{
  int num;       /* numero di elementi del vettore dinamico */
  int *v;        /* puntatore al primo elemento del vettore dinamico */
  double m, ds;

  leggiVettore(&v, &num);

  m = media(v, num);
  printf("La media e` %g\n", m);

  ds = deviazioneStandard(v, num, m);
  printf("La deviazione standard e` %g\n", ds);

  return 0;
}