mercoledì, ottobre 25, 2006

Istogramma


int main ()
{
// creo l'istogramma
// -----------------

// parametri generali
double somma = 0. ;
double sommaSq = 0. ;
int eventi = 0 ;
// creo il vettore di frequenze

int mioIstogramma[20] ;
// azzero tutti i suoi elementi
for (int i=0; i<20; ++i)
{
mioIstogramma[i] =
0 ;
}

// riempio l'stogramma
// --------------------

// inizializzo il seme di generazione casuale
srand (time (NULL)) ;

double step = (2*M_PI - 0) / 20 ;
// loop sugli eventi da generare

for (int i=0; i<100000; ++i)
{
// genero un numero casuale
double numero = randFunc (generationPDF,
0,2 * M_PI,
-
0.1,2.1) ;

// calcolo in quale dei 10 elementi dell'istogramma contarlo
// la funzione "double floor (double)" ritorna il numero intero
// non maggiore piu' vicino all'argomento
int bin = static_cast<int> (floor (numero / step)) ;
somma += numero ;
sommaSq += numero * numero ;
++eventi ;
// sommaSq += pow (numero,2) ;

// incremento l'elemento relativo
++mioIstogramma[bin] ;
}
// loop sugli eventi da generare

// disegno l'mioIstogramma
// --------------------

// cerco il massimo dell'istogramma:
int maxIsto = 0 ;
// loop sugli elementi dell'istogramma

for (int i=0; i<20; ++i)
{
if (maxIsto < mioIstogramma[i]) maxIsto = mioIstogramma[i] ;
}
// chiuso loop sugli elementi dell'istogramma


// disegno le singole barre:
int maxColumns = 20 ;
// loop sugli elementi dell'istogramma
std::cout << "plot dell'mioIstogramma:\n" ;
std::cout <<
" +---------------------->\n" ;
for (int i=0; i<20; ++i)
{
int numeroSimboli = mioIstogramma[i] * maxColumns / maxIsto ;
std::cout <<
" | " ;
for (int j=0; j<numeroSimboli; ++j)
{
std::cout <<
"#" ;
}
for (int j=numeroSimboli; j<22; ++j)
{
std::cout <<
" " ;
}
std::cout <<
"mioIstogramma[" << i << "] : " << mioIstogramma[i] ;
std::cout <<
"\n" ;
}
// chiuso loop sugli elementi dell'istogramma

std::cout << " |\n\\/\n\n" ;
std::cout <<
"media = " << somma / eventi << "\n" ;
std::cout <<
"sigma = " << sqrt (sommaSq / eventi -
(somma / eventi) * (somma / eventi))
<<
"\n" ;

return 0 ;

}



Nessun commento: