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()); } }

Rispondi quotando