struct punto {
float x;
float y;
};
Dopo aver definito questa struttura, noi possiamo definire delle
variabili
di tipo punto ed accedere alla loro struttura interna, ad esempio:
struct punto XY1, *XY2; // dichiarazione una variabile e diIl tutto e' molto piu' snello se usiamo un typedef per abbreviare la definizione:
// un puntatore alla struttura
XY1.x=1.; // inizializzazione di XY1
XY1.y=2.;
XY2 = (struct punto *)malloc(sizeof(struct punto));
// L'operatore sizeof funziona anche sulle strutture. Ricordarsi di
// fare il cast di malloc
*XY2 = XY1; // esiste l'operatore di assegnazione di strutture
// (copia membro a membro)
printf("Le coordinate del punto 2 sono: (%f,%f)\n",XY2->x,XY2->y);
// per i puntatori l'operatore per accedere alle variabili
// e' "->" invece di "."
typedef struct punto PUNTO;In tal caso le istruzioni diventano semplicemente
PUNTO XY1, *XY2; // dichiarazione una variabile e diLe strutture permettono solamente di raccogliere un insieme di dati, lasciando agli utenti la massima liberta' (ovvero, nessuna protezione) nella loro gestione. I linguaggi di programmazione piu' recenti (C++, Java...) tendono ad enfatizzare delle altre entita' dette oggetti. Mentre una struttura pone l'enfasi sui dati, gli oggetti pongono l'enfasi sul comportamento: un oggetto e' caratterizzato da un insieme di funzioni, dette metodi, attraverso le quali puo' operare. La sua struttura interna contiene dei dati che pero' non sono accessibili all'utente: quello che importa sono solo le azioni che l'oggetto puo' compiere.
// un puntatore alla struttura
XY1.x=1.; // inizializzazione di XY1
XY1.y=2.;
XY2 = (PUNTO *)malloc(sizeof(PUNTO));
// L'operatore sizeof funziona anche sulle strutture. Ricordarsi di
// fare il cast di malloc
*XY2 = XY1; // esiste l'operatore di assegnazione di strutture
// (copia membro a membro)
printf("Le coordinate del punto 2 sono: (%f,%f)\n",XY2->x,XY2->y);
// per i puntatori l'operatore per accedere alle variabili
// e' "->" invece di "."
TRandom gen;Come vedete noi possiamo utilizzare gen per fare quello che vogliamo (generare numeri casuali di diverso tipo) senza sapere niente della sua struttura interna (enfasi sul comportamento e non sui dati).
int i;
for (i=0; i<100; i++) {
printf (" %d \n",gen.Poisson(3.));
}
Una macro puo' anche contenere la definizione di una nuova funzione,
come la macro randread.c che
definisce
una funzione TH1F randread(char*). In tal caso non ha senso
eseguire
direttamente la macro (come facciamo a passare i parametri giusti alla
funzione?). Si puo' pero' caricarla in memoria con il comando:
.L nomefile
A questo punto la nuova funzione e' nota a ROOT e puo' essere
utilizzata
da linea di comando o da altre macro.
Se ci si accorge che la funzione ha degli errori e si vuole modificare
la macro, nelle versioni piu' recenti di ROOT, si puo':
Poiche' ROOT esegue automaticamente l'inclusione di molti degli include file di sistema, spesso non c'e' bisogno delle dichiarazioni di #include nel file contentente la macro.
Per aggiungere testi, frecce, disegni... sul grafico, e' sufficiente selezionare Editor dal menu Edit. Per visualizzare le coordinate del puntatore del mouse, selezionare Options -> Event Status.
Per modificare la presentazione grafica di un oggetto e' possibile selezionarlo posizionandoci sopra il cursore e schiacciando il bottone destro del mouse. Cio' fa comparire un menu che dipende dal tipo di oggetto selezionato ed indica le opzioni possibili. Particolarmente utili saranno il FitPanel o il DrawPanel per cambiare la rappresentazione degli istogrammi. Per spostare o ridimenzionare un oggetto, basta selezionarlo con il bottone sinistro del mouse.
Per i grafici (ad esempio quelli creati con grafico.c) il DrawPanel non funziona, ma e' possibile cambiare interattivamente le caratteristiche delle linee e dei punti disegnati selezionando SetLineAttributes e SetMarkerAttributes.
Il puntatore del mouse cambia forma a seconda dell'oggetto che si sta selezionando, e questa caratteristica permette di facilitare molto la selezione. Puo' essere utile ricordare che il puntatore a croce di solito indica che si sta selezionando un'area di sfondo, la freccia un grafico o un istogramma.
Infine, se avete fatto un bel grafico e volete salvarlo, dal menu File selezionate Save As...
Infine, l'anno scorso sono stati trovati alcuni comportamenti anomali di ROOT, quindi controllate nella pagina delle FAQ.
Tale teorema e' la base di tutto il trattamento statistico degli
errori
e grosso modo puo' essere formulato:
Siano x1, x2, x3, ...xN numeri casuali tutti estratti da una stessa
distribuzione con valor medio Xm e r.m.s. S. Allora, per N tendente
all'infinito
la quantita' (x1+x2+...+xN)/N tendera' ad avere una distribuizione
gaussiana
con valor medio Xm e sigma S/sqrt(N).
Il teorema di fatto dice che, se si fanno tante misure, anche con errori non gaussiani, la media alla fine avra' una distribuzione gaussiana ed una precisione migliore delle singole misure.
Verifichiamo empiricamente che questo succeda.