#include #include #include "PRO2Excepcio.hh" #include "Arbre.hh" #include "arbolIOdouble.hh" using namespace std; void i_estad(Arbre& a, int& n, double& s, double& s2) { /* Pre: a = A */ /* Post: n es el número de nodos de A, s es la suma de los nodos de A y s2 es la suma de los cuadrados de los nodos de A */ if (a.es_buit()) n = s = s2 = 0; else { double r = a.arrel(); Arbre fe, fd; a.fills(fe,fd); int ne, nd; double se, se2, sd, sd2; i_estad(fe,ne,se,se2); /* HI: ne es el número de nodos de fe, se es la suma de los nodos de fe y se2 es la suma de los cuadrados de los nodos de fe */ i_estad(fd,nd,sd,sd2); /* HI: nd es el número de nodos de fd, sd es la suma de los nodos de fd y sd2 es la suma de los cuadrados de los nodos de fd */ n = ne + nd + 1; s = se + sd + r; s2 = se2 + sd2 + r*r; } } /* Terminación: En cada llamada recursiva el número de nodos del primer argumento decrece. */ void estadist(Arbre& a, double& mitjana, double& desviacio) /* Pre: a no es vacío */ /* Post: mitjana representa la media de los elementos del árbol A, desviacio representa la desviación de los elementos del árbol A */ { int n; double s, s2; i_estad(a,n,s,s2); mitjana = s/n; desviacio = sqrt((s2/n)-((s*s)/(n*n))); } int main() { Arbre a; lee(a); double m, d; estadist(a,m,d); cout << "media:" << m << " desviacion:" << d << endl; }