Estratto del documento

Esercizio di laboratorio

Argomento: gestione dell'input tramite "ciclo e mezzo"

Scrivere un programma che legga una sequenza di valori in virgola mobile inseriti dall'utente: il numero di valori non è predeterminato, dopo l'introduzione di ciascun valore l'utente deve premere il tasto "Invio" e la sequenza di valori termina non appena l'utente introduce una sequenza predeterminata di caratteri che non rappresenta un numero in virgola mobile.

Dopo aver letto tutti i valori inseriti dall'utente, il programma ne deve visualizzare il valore medio e la deviazione standard.

Suggerimento

Il valore medio di una sequenza di valori è (ovviamente) uguale alla somma di tutti i valori divisa per il numero di valori. La deviazione standard D si calcola con la formula seguente:

D = Math.sqrt((A - B*B/n)/(n-1))

dove n è il numero di valori, B è la somma di tutti i valori e A è la somma dei quadrati di tutti i valori. La formula è valida soltanto per n > 1; per n = 1 la deviazione standard vale 0, per definizione.

Gestire correttamente anche il caso in cui il numero di valori è zero: in tal caso il valore medio dei valori si assume essere convenzionalmente uguale a zero, così come la deviazione standard.

Attenzione: Porre particolare attenzione all'impossibilità (con gli strumenti di Java che si conoscono) di memorizzare tutti i singoli valori introdotti dall'utente.

Soluzione

Ecco una possibile soluzione. Notare che non abbiamo avuto bisogno di memorizzare tutti i valori inseriti dall'utente. Notare anche come sono stati gestiti i casi in cui l'utente inserisce 0 elementi oppure 1 elemento.

import java.util.Scanner;

public class SequenceAnalyzer{ public static void main(String[] args){ Scanner in = new Scanner(System.in);

double sum = 0; //somma dei numeri inseriti

double sumSquares = 0; //somma dei quadrati dei numeri inseriti

int count = 0; //contatore dei numeri inseriti

boolean done = false;

while (!done) //ciclo e mezzo

{ System.out.println("Inserire numero (Q per terminare sequenza):");

String newInput = in.next();

if (newInput.equalsIgnoreCase("Q"))

done = true;

else // aggiorniamo la somma, la somma dei quadrati, il contatore

{ double value = Double.parseDouble(newInput);

sum += value;

sumSquares += value * value;

count++;

}}

double avrg = 0;

double stdev = 0;

if (count > 0){

avrg = sum / count;

if (count > 1)

stdev = Math.sqrt((sumSquares - sum*sum/count) / (count - 1));

}

System.out.println("Hai inserito " + count + " elementi.");

System.out.println("La media è: " + avrg);

System.out.println("La deviazi

Anteprima
Vedrai una selezione di 1 pagina su 1
Informatica I - Esercizi gestione dell'input tramite ciclo e mezzo Pag. 1
1 su 1
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher enricopava di informazioni apprese con la frequenza delle lezioni di Informatica 1 e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Padova o del prof Avanzini Federico.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community