Questa è la traccia:
Esercizio P6.7. Media e deviazione standard. Scrivete un programma che legga un insieme di dati
in virgola mobile. Al termine, stampate il conteggio dei valori, la media e la deviazione standard.
La media di un insieme di valori x1, ..., xn è data da
m = Σxi/n
dove Σxi = x1 + ... + xn è la somma dei valori di ingresso. La deviazione standard è espressa da
questa formula
s = sqrt{(Σ(xi-m)^2)/(n-1)}
che, però, non è adatta per la nostra attività, perché, nel momento in cui calcolate la deviazione
standard, i singoli valori xi se ne sono andati da un pezzo. Finché non sapete come memorizzare
questi valori, utilizzate questa formula, anche se è numericamente meno stabile:
s = sqrt{((Σ(xi)^2) -1/n * (Σxi)^2)/(n-1)}
Potete calcolare quest’ultimo valore tenendo traccia, nella classe DataSet, del conteggio dei valori
in ingresso, della loro somma e della somma dei loro quadrati, mano a mano che li ricevete.
Ecco il codice che ho scritto però è sbagliato
codice:
public class DataSet {
private double sommaValori;
private double sommaQuadrati;
private int numValori;
private double media;
private double deviazioneStandard;
public DataSet(){
this.numValori = 0;
this.media = 0;
this.deviazioneStandard = 0;
}
public void setAddValue(double valoreDecimale){
numValori++;
this.sommaValori = sommaValori + valoreDecimale;
this.media = sommaValori/numValori;
this.sommaQuadrati = Math.pow(sommaValori, 2) + Math.pow(valoreDecimale, 2);
this.deviazioneStandard = Math.sqrt(((sommaQuadrati)-(1/numValori)*(Math.pow(sommaValori, 2)))/(numValori -1));
}
public int getNumValori(){
return numValori;
}
public double getMedia(){
return media;
}
public double getDeviazioneStandard(){
return deviazioneStandard;
}
}
import java.util.Scanner;
public class DataSetTester {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
DataSet ds = new DataSet();
boolean done = false;
while(!done){
System.out.println("Inserisci valore decimale oppure -1 per terminare: ");
ds.setAddValue(in.nextDouble());
if(in.nextDouble() == -1)
done = true;
}
System.out.println("Numero di valori inseriti : "+ds.getNumValori());
System.out.println("Media dei valori inseriti : "+ds.getMedia());
System.out.println("Deviazione standard dei valori inseriti : "+ds.getDeviazioneStandard());
}
}