Statistica Computazionale - Modulo di programmazione in Java 2 - F.M.Stefanini
Esame del 9.04.2001
(1) Si consideri la classe StatStim composta da un solo metodo statico che calcola il momento
1 N r
r-esimo empirico di un vettore di dati, m r   x i
N i 1
public class StatStim {
public static double calcMomR(double[] vdata, double r){
double mome=0;
for(int i = 0; i<vdata.length;i++)
mome = mome + Math.pow(vdata[i], r)/vdata.length;
return mome;
}
}
Sfruttando la relazione varianza  m2  m1  , definire un metodo statico calcVarianza che ha
come parametro un vettore di double e che restituisce il valore della varianza calcolato impiegando
calcMomR.
2
(2) Scrivere la classe FiltroFile che contiene gli attributi nomeinput e nomeoutput,
entrambi stringhe, ed il metodo trasformaMinuscolo. Lo scopo del metodo
trasformaMinuscolo è di copiare il file di input in quello di output trasformando tutti i
caratteri di ogni riga di ingresso in minuscole. Definire un metodo main che crea un oggetto
FiltroFile e invoca il metodo trasformaMinuscolo ed infine stampa l'oggetto con
System.out.println.
Nell'implementazione della classe si segua lo schema UML sotto riportato
FiltroFile
//Nome file di input privato
String nomeinput
// Nome file di output privato
String nomeoutput
// Costruttore
FiltroFile(Stringa nomein, String nomeout)
// Nessun valore restituito, nessun parametro
void trasformaMinuscolo()
String toString()
1
(3) Implementare una classe AgendaMese, seguendo l'indicazione dello schema UML: la classe
memorizza il mese (da 1 a 12) e le ore lavorate in quel mese. Implementare la classe
RegistroAnno, che memorizza Cognome e Nome del lavoratore e la sua attività lavorativa
annuale (12 mesi). Questa classe deve contenere un metodo che calcola il totale di ore lavorate in 12
mesi.
Commentare la struttura della classe AgendaMese (attributi e metodi) con commenti interpretabili
dal programma javadoc. Produrre la relativa documentazione html con javadoc.
RegistroAnno
cognomeNome // dati di un lavoratore
agenda
// contiene 12 mesi di tipo
AgendaMese
RegistroAnno(String lavoratore) // cognomenome
set(mese, ore) // setta un mese
get() // restituisce un mese e le sue ore
totaleOre() // restituisce la somma di ore lavorate
getLavoratore() // restituisce cognome e nome
toString()

|
|
AgendaMese
mese // da 1 a 12
totaleOreLavorate // da 0 a 200
AgendaMese() // costruttore
AgendaMese(valoremese, valoreore)
setMese
setOre
getMese
getOre
toString
2
Statistica Computazionale
Modulo di programmazione in Java 2 - F.M.Stefanini
Esame del 4.06.2001
Esercizi
(1) Si definisca la classe YearEta composta da un solo metodo statico, calcolaEta, che
calcola l'età di una persona trasformando il numero di anni in numero di mesi. La classe deve
contenere un metodo main che domanda l'età all'utente e riceve da tastiera il mese e l'anno di
nascita, secondo l'algoritmo seguente:
1. Richiedi anno nascita all'utente (numero intero).
2. Richiedi mese di nascita all'utente (numero intero).
3. Chiama il metodo calcolaEta con argomento i due valori ottenuti da tastiera ed il mese
(numero) ed anno (numero) corrente. Il metodo calcolaEta deve restituire il numero di
mesi.
4. Stampa a schermo l'età in anni e quella in mesi.
(2) Scrivere la classe SimulaCV che contiene gli attributi media, varianza, simulatiX,
CV (tutti in virgola mobile), ed i metodi xToCV e simulaRun. Lo scopo del metodo simulaRun
è di generare 1000 numeri estratti dalla distribuzione Gaussiana (normale) che ha i valori di media e
varianza contenuti nei rispettivi attributi di classe. Definire un metodo main che assegna a media
il valore 12, alla varianza il valore 4, e che chiama simulaRun per generare i valori e
memorizzarli in simulaX; quindi invoca il metodo xToCV per calcolare il coeff. di variazione dei
valori simulati e memorizzarlo in CV. Infine, il main stampa il valore degli attributi media,
varianza, CV impiegando System.out.println.
(3) Implementare la classe IntegraGrid, seguendo fedelmente l'indicazione dello schema
UML. Lo scopo di IntegraGrid è di calcolare il momento r-esimo , m r 
1
N
N
x
i 1
r
i
per una
funzione di densità approssimata su di una griglia di punti compresi tra minimoX e massimoX, ad
una dato valore di risoluzione (differenza tra due punti successivi della griglia).
Creare la classe DiscreDistri che eredità metodi e attributi da IntegraGrid e ridefinisce il
metodo double valDensi(double x), in modo che il valore di densità sia dato dall'equazione:
p( x)    e  x
IntegraGrid
3
double risoluzione;
double minimoX;
double massimoX;
int numeropuntigriglia;
double ordineR;//ordine del momento
double[] griglia;
IntegraGrid() //
double valDensi(double x)
{return 1/(massimoX-minimoX)};
// momento m-esimo
double momentoM(double mome);
// normalizza sommatoria griglia ad uno
// void normalizzaGriglia();

|
|
DiscreDistri
DiscreDistri() // costruttore
// Valore della funzione di densità di probabilità
double valDensi(double x);
Nel costruttore l'algoritmo procede come segue:
1. Parametri del Costruttore: risoluzione, minimoX, massimoX
2. Calcola numero di unti nella griglia
3. Calcola densità in ogni punto della griglia
4. normalizza i valori in modo che la sommatoria dei punti della griglia sommi ad uno
Definire un metodo main in cui il minimo di x è 0.001, il massimo è 100,  = 4, risoluzione 0.5.
Procedere con il calcolo del momento quarto.
Commentare la struttura della classe DiscreDistri (attributi e metodi) con commenti
interpretabili dal programma javadoc. Produrre la relativa documentazione html con javadoc.
4
Statistica Computazionale
Modulo di programmazione in Java 2 - F.M.Stefanini
Esame del 19.06.2001
Esercizi
(1) Nella classe Convert si costruisca il metodo statico ToPolar che riceve le coordinate
cartesiane px e py del punto p (parametri del metodo in virgola mobile) e le trasforma le in  e d
impiegando le funzioni:

 py 
 
  arcsin  d 
 


2
2
d   p x  p y
Commentare la classe seguendo lo stile di javadoc. La classe deve contenere un metodo main che
domanda all'utente di immettere a tastiera le coordinate di un punto e che stampa i valori
trasformati.
(2) Scrivere la classe Anova1W che legge i risultati sperimentali contenuti nel file "risulta.txt" e
che calcola due statistiche riassuntive (in virgola mobile). I numeri nel file sono separati da spazi
bianchi ed organizzati in righe e colonne (matrice). Il costruttore riceve come parametri il valore del
numero di righe e di colonne contenute nel file.
Anova1W
tabella;// matrice di dati
stats1;// vettore statistica S1
stats2;//vettore statistica S2
Anova1W
// costruttore
getData
// metodo di lettura da file
calcStatSuf
// calcolo delle statistiche
stampaStat
// metodo che stampa le
statistiche
main
// metodo di prova della
classe
Il metodo calcStatSuf effettua il calcolo di due statistiche per ogni colonna della matrice dei
dati. Indicando con i la riga e j la colonna della matrice dei dati, si ha:
I
S1, j   xi , j
i 1
I
S 2, j   x 2 i , j
i 1
Il metodo getData legge i dati dal file. Il metodo stampaStat stampa a schermo due righe di
valori relativi a S1 e S2 (un valore per ogni colonna j). Definire un metodo main che crea un
oggetto Anova1W legge i dati, calcola e stampa le statistiche S1,j e S2,j per ogni j=1,2,…,J.
(3) Definire la classe TavolaAnova1W come specializzazione della classe costruita nell'esercizio
precedente, Anova1W, seguendo il diagramma UML sottoriportato. Gli attributi sono calcolati con
le seguenti formule:
5
J
S1, j 
 S1, j

debg   I * 


I
J
*
I
j 1
j

1


J

S1, j 2

dewg   S 2, j 

I
j 1

glb  J  1
J
2




glw  J * ( I  1)
debg
QMB 
glb
dewg
QMW 
glw
QMB
Femp 
QMW
TavolaAnova1W
debg
dewg
glb
glw
QMB
QMW
Femp
TavolaAnova1W // costruttore
calcolaDevGl // calcola debg, dewg,glb,glw
calcolaQMeF // calcola QMB, QMW, Femp
stampaTabella //stampa a schermo
Il metodo stampaTabella deve produrre a schermo la tabella sotto riportata (gli attributi sono
sostituiti dai rispettivi valori):
|----------------------------------------------------------------|
|Fonti di variazione | GL | SQ | QM | F
|
|----------------------------------------------------------------|
| Tra gruppi
| glb | debg | QMB | Femp
|
| Entro gruppi
| glw | dewg | QMW |
|
|----------------------------------------------------------------|
6
Statistica Computazionale
Modulo di programmazione in Java 2 - F.M.Stefanini
Esame del 12.07.2001
Esercizi
(1) Nella classe Convert si costruisca il metodo statico ToCarte che riceve le coordinate polari
del punto p,  e d, e le trasforma in coordinate cartesiane px e py (parametri del metodo in virgola
mobile) impiegando le funzioni:
 p y  d  sin  

2
2
 p x  d  p y
Commentare la classe seguendo lo stile di javadoc. La classe deve contenere un metodo main che
domanda all'utente di immettere a tastiera le coordinate e che stampa i valori trasformati.
(2) Scrivere la classe Reg1 che legge i risultati sperimentali contenuti nel file "risulta.txt" sotto
forma di due colonne, la prima delle y e la seconda delle x. Definire nella classe un metodo
calcStatSuf per calcolare le statistiche riassuntive (in virgola mobile):
I
S 2   xi
i 1
2
I
T2   y 2 i
i 1
I
W   xi y i
i 1
I numeri nel file sono separati da spazi bianchi ed organizzati in righe e colonne (matrice). Il
costruttore riceve come parametri il valore del numero di righe contenute nel file.
Reg1
tabella;// matrice di dati
s2;// statistica S2
t2;// statistica T2
w; // statistica W
Reg1
// costruttore
getData
// metodo di lettura da file
calcStatSuf
// calcolo delle statistiche
stampaStat
// metodo che stampa le
statistiche
main
// metodo di prova della
classe
Il metodo getData legge i dati dal file. Il metodo stampaStat stampa a schermo le statistiche
calcolate. Definire un metodo main che crea un oggetto Reg1, legge i dati, calcola e stampa le
statistiche.
(3) Definire la classe Reg1Par come specializzazione della classe costruita nell'esercizio
precedente, Reg1, seguendo il diagramma UML sottoriportato. L'attributo è calcolato con la
seguente formula:
W
beta1 
S
Reg1
7

|
|
Reg1Par
beta1;
Reg1Par // costruttore
calcolaBeta1 // calcola beta1
toString //stampa a schermo
Il metodo toString deve fornire lo stato complessivo dell'oggetto istanziato di classe Reg1Par
8