• Non ci sono risultati.

Iterazione Iterazione

N/A
N/A
Protected

Academic year: 2021

Condividi "Iterazione Iterazione"

Copied!
58
0
0

Testo completo

(1)

Iterazione Iterazione

C. Horstmann C. Horstmann Fondamenti di programmazione e Java 2 Fondamenti di programmazione e Java 2 3^ edizione Apogeo 3^ edizione Apogeo trad. Nicola Fanizzi trad. Nicola Fanizzi corso di Programmazione, CdS: Informatica TPS corso di Programmazione, CdS: Informatica TPS Dip. di Informatica, Università degli studi di Bari Dip. di Informatica, Università degli studi di Bari

(2)

2 2

Obiettivi Obiettivi

 Essere in grado di programmare iterazioni con le Essere in grado di programmare iterazioni con le istruzioni

istruzioni while while , , for for e e do do

 Per evitare cicli infiniti ed errori per scarto di uno Per evitare cicli infiniti ed errori per scarto di uno

 Capire i cicli annidati Capire i cicli annidati

 Imparare come elaborare l'input Imparare come elaborare l'input

 Implementare simulazioni Implementare simulazioni

(3)

3 3

Ciclo

Ciclo while while

 Esegue ripetutamente un blocco di codice Esegue ripetutamente un blocco di codice

 Una condizione controlla quante volte viene eseguito Una condizione controlla quante volte viene eseguito il loop

il loop

 Più comunemente, l'istruzione è un blocco di Più comunemente, l'istruzione è un blocco di istruzioni (insieme di istruzioni delimitata da

istruzioni (insieme di istruzioni delimitata da { } { } ) )

while (condition) while (condition)

   statement;

   statement;

(4)

4 4

Calcolo della Calcolo della Crescita di un Investimento Crescita di un Investimento

 SI Investano $10,000, al 5% di interesse, accumulato SI Investano $10,000, al 5% di interesse, accumulato annualmente

annualmente

$12,155.06

$12,155.06 44

$11,576.25

$11,576.25 33

$11,025

$11,025 22

$10,500

$10,500 11

$10,000

$10,000 00

Balance Balance YearYear

(5)

5 5

Calcolo della Calcolo della Crescita di un Investimento Crescita di un Investimento

 Quando raggiungerà un certo ammontare il capitale Quando raggiungerà un certo ammontare il capitale investito ?

investito ?

while (balance < targetBalance) while (balance < targetBalance) {{

   year++;

   year++;

   double interest = balance * rate / 100;

   double interest = balance * rate / 100;

   balance = balance + interest;

   balance = balance + interest;

}}

(6)

6 6

Investment.java Investment.java

01: /**

01: /**

02: Una classe per monitorare la crescita di un investimento 02: Una classe per monitorare la crescita di un investimento 03: che accumula interesse ad un fissato tasso annuo.

03: che accumula interesse ad un fissato tasso annuo.

04: */

04: */

05: public class Investment 05: public class Investment 06: {

06: {

07: /**

07: /**

08: Costruisce un oggetto Investment da un saldo iniziale 08: Costruisce un oggetto Investment da un saldo iniziale 09: ed un tasso di interesse.

09: ed un tasso di interesse.

10: @param aBalance il saldo iniziale 10: @param aBalance il saldo iniziale

11: @param aRate il tasso d'interesse in percentuale 11: @param aRate il tasso d'interesse in percentuale 12: */

12: */

13: public Investment(double aBalance, double aRate) 13: public Investment(double aBalance, double aRate) 14: {

14: {

15: balance = aBalance;

15: balance = aBalance;

(7)

7 7

Investment.java Investment.java

20: /**

20: /**

21: Continua ad accumulare interessi finquando il saldo 21: Continua ad accumulare interessi finquando il saldo 22: obiettivo è stato raggiunto.

22: obiettivo è stato raggiunto.

23: @param targetBalance il bilancio desiderato 23: @param targetBalance il bilancio desiderato 24: */

24: */

25: public void waitForBalance(double targetBalance) 25: public void waitForBalance(double targetBalance) 26: {

26: {

27: while (balance < targetBalance) 27: while (balance < targetBalance) 28: {

28: {

29: years++;

29: years++;

30: double interest = balance * rate / 100;

30: double interest = balance * rate / 100;

31: balance = balance + interest;

31: balance = balance + interest;

32: } 32: } 33: } 33: } 34: 34:

35: /**

35: /**

36: ottiene il saldo corrente nell'investimento.

36: ottiene il saldo corrente nell'investimento.

37: @return il saldo corrente 37: @return il saldo corrente

(8)

8 8

Investment.java Investment.java

39: public double getBalance() 39: public double getBalance() 40: {

40: {

41: return balance;

41: return balance;

42: } 42: } 43: 43:

44: /**

44: /**

45: Ottiene il numero di anni per cui questo investimento 45: Ottiene il numero di anni per cui questo investimento 46: ha accumulato interessi.

46: ha accumulato interessi.

47: @return numero di anni dall'inizio dell'investimento 47: @return numero di anni dall'inizio dell'investimento 48: */

48: */

49: public int getYears() 49: public int getYears() 50: {

50: {

51: return years;

51: return years;

52: } 52: } 53: 53:

(9)

9 9

Collaudo di

Collaudo di Investment Investment

01: /**

01: /**

02: Questo programma serve a calcolare quanto occorre 02: Questo programma serve a calcolare quanto occorre 03: ad un investimento per raddoppiare.

03: ad un investimento per raddoppiare.

04: */

04: */

05: public class InvestmentTester 05: public class InvestmentTester 06: {

06: {

07: public static void main(String[] args) 07: public static void main(String[] args) 08: {

08: {

09: final double INITIAL_BALANCE = 10000;

09: final double INITIAL_BALANCE = 10000;

10: final double RATE = 5;

10: final double RATE = 5;

11: Investment invest 11: Investment invest

= new Investment(INITIAL_BALANCE, RATE);= new Investment(INITIAL_BALANCE, RATE);

12: invest.waitForBalance(2 * INITIAL_BALANCE);

12: invest.waitForBalance(2 * INITIAL_BALANCE);

13: int years = invest.getYears();

13: int years = invest.getYears();

14: System.out.println("The investment doubled after "

14: System.out.println("The investment doubled after "

15: + years + " years");

15: + years + " years");

16: } 16: } 17: }

17: }

(10)

10 10

Collaudo di

Collaudo di Investment Investment

The investment doubled after 15 years The investment doubled after 15 years

 Output Output

(11)

11 11

Flowchart di un Ciclo

Flowchart di un Ciclo while while

(12)

12 12

Sintassi 7.1: l'istruzione

Sintassi 7.1: l'istruzione while while

    while ( while ( condition condition ) )         statement statement

 Esempio: Esempio:

while (balance < targetBalance) while (balance < targetBalance) { {

year++;

year++;

double interest = balance * rate / 100;

double interest = balance * rate / 100;

balance = balance + interest;

balance = balance + interest;

} }

(13)

13 13

Errore Comune: Cicli Infiniti Errore Comune: Cicli Infiniti

 Cicli che girano per sempre – occorre uccidere il Cicli che girano per sempre – occorre uccidere il

int years = 0;

int years = 0;

while (years < 20) while (years < 20) {{

double interest = balance * rate / 100;

double interest = balance * rate / 100;

balance = balance + interest;

balance = balance + interest;

} }

int years = 20;

int years = 20;

while (years > 0) while (years > 0) {{

years++; // Oops, should have been years-- years++; // Oops, should have been years-- double interest = balance * rate / 100;

double interest = balance * rate / 100;

balance = balance + interest;

balance = balance + interest;

} }

(14)

14 14

Errore Comune: Scarto di Uno Errore Comune: Scarto di Uno

int years = 0;

int years = 0;

while (balance < 2 * initialBalance) while (balance < 2 * initialBalance) {{

years++;

years++;

double interest = balance * rate / 100;

double interest = balance * rate / 100;

balance = balance + interest;

balance = balance + interest;

}}

System.out.println("The investment reached the target after "

System.out.println("The investment reached the target after "

+ years + " years.");

+ years + " years.");

 years years dovrebbe cominciare da dovrebbe cominciare da 0 0 o da o da 1 1 ? ?

 Il test dovrebbe essere Il test dovrebbe essere < < oppure oppure <= <= ? ?

(15)

15 15

Evitare Evitare l'Errore dello Scarto di Uno l'Errore dello Scarto di Uno

 Si guardi lo scenario con valori semplici: Si guardi lo scenario con valori semplici:

Saldo iniziale: Saldo iniziale: $100 $100

Tasso iniziale: Tasso iniziale: 50% 50%

Dopo l'anno 1, il saldo è $150 Dopo l'anno 1, il saldo è $150

Dopo l'anno 2, il saldo è $225 Dopo l'anno 2, il saldo è $225 , o al di sopra di , o al di sopra di $200 $200

Così l'investimento si è raddoppiato dopo 2 anni Così l'investimento si è raddoppiato dopo 2 anni

Ciclo eseguito 2 volte, incrementando Ciclo eseguito 2 volte, incrementando years years ogni volta ogni volta

Perciò: Perciò: years years deve iniziare da 0, non da 1 deve iniziare da 0, non da 1

(16)

16 16

Evitare Evitare l'Errore dello Scarto di Uno l'Errore dello Scarto di Uno

 Tasso di interesse: Tasso di interesse: 100% 100%

dopo 1 anno: dopo 1 anno:

balance

balance diventa diventa 2 * initialBalance 2 * initialBalance il ciclo dovrebbe fermarsi

il ciclo dovrebbe fermarsi Pertanto: si deve usare Pertanto: si deve usare < <

 Pensare, non compilare e provare a caso Pensare, non compilare e provare a caso

(17)

17 17

Cicli

Cicli do do

 Esegue i corpo almeno una volta Esegue i corpo almeno una volta

 Esempio: Validare l'input Esempio: Validare l'input

dodo

statement while (condition);

statement while (condition);

double value;

double value;

dodo {{

System.out.print("Please enter a positive number: ");

System.out.print("Please enter a positive number: ");

value = in.nextDouble();

value = in.nextDouble();

}}

while (value <= 0);

while (value <= 0);

(18)

18 18

Cicli

Cicli do do

 Alternativa: Alternativa:

boolean done = false;

boolean done = false;

while (!done) while (!done) {{

System.out.print("Please enter a positive number: ");

System.out.print("Please enter a positive number: ");

value = in.nextDouble();

value = in.nextDouble();

if (value > 0) done = true;

if (value > 0) done = true;

}}

(19)

19 19

Flowchart del Ciclo

Flowchart del Ciclo do do

(20)

20 20

Codice Spaghetti

Codice Spaghetti

(21)

21 21

Cicli

Cicli for for

 Esempio: Esempio:

for (inizializzazione; condizione; aggiornamento) for (inizializzazione; condizione; aggiornamento)    istruzione

   istruzione

for (int i = 1; i <= n; i++) for (int i = 1; i <= n; i++) {{

double interest = balance * rate / 100;

double interest = balance * rate / 100;

balance = balance + interest;

balance = balance + interest;

} }

(22)

22 22

Cicli

Cicli for for

 Equivalenti a Equivalenti a

 Altri Esempi: Altri Esempi:

inizializzazione;

inizializzazione;

while (condizione) while (condizione)

{ istruzione; aggiornamento; } { istruzione; aggiornamento; }

for (years = n; years > 0; years--) . . . for (years = n; years > 0; years--) . . .

(23)

23 23

Flowchart del Ciclo

Flowchart del Ciclo for for

(24)

24 24

Sintassi 7.2: Ciclo

Sintassi 7.2: Ciclo for for

for (

for ( initialization initialization ; ; condition condition ; ; update update ) )       statement statement

 Esempio: Esempio:

for (int i = 1; i <= n; i++) for (int i = 1; i <= n; i++) { {

   double interest = balance * rate / 100;

   double interest = balance * rate / 100;

   balance = balance + interest;

   balance = balance + interest;

} }

(25)

25 25

Investment.java Investment.java

01: /**

01: /**

02: Classe per monitorare la crescita di un investimento 02: Classe per monitorare la crescita di un investimento 03: che accumula interessi ad un prefissato tasso annuo 03: che accumula interessi ad un prefissato tasso annuo 04: */

04: */

05: public class Investment 05: public class Investment 06: {

06: {

07: /**

07: /**

08: Costruisce un oggetto Investment a partire da un 08: Costruisce un oggetto Investment a partire da un 09: saldo iniziale ed tasso di interesse.

09: saldo iniziale ed tasso di interesse.

10: @param aBalance saldo iniziale 10: @param aBalance saldo iniziale

11: @param aRate tasso di interesse in percentuale 11: @param aRate tasso di interesse in percentuale 12: */

12: */

13: public Investment(double aBalance, double aRate) 13: public Investment(double aBalance, double aRate) 14: {

14: {

15: balance = aBalance;

15: balance = aBalance;

16: rate = aRate;

16: rate = aRate;

17: years = 0;

17: years = 0;

(26)

26 26

Investment.java Investment.java

19: 19:

20: /**

20: /**

21: Continua ad accumulare interesse finché un saldo 21: Continua ad accumulare interesse finché un saldo 22: obiettivo sia stato raggiunto.

22: obiettivo sia stato raggiunto.

23: @param targetBalance il saldo desiderato 23: @param targetBalance il saldo desiderato 24: */

24: */

25: public void waitForBalance(double targetBalance) 25: public void waitForBalance(double targetBalance) 26: {

26: {

27: while (balance < targetBalance) 27: while (balance < targetBalance) 28: {

28: {

29: years++;

29: years++;

30: double interest = balance * rate / 100;

30: double interest = balance * rate / 100;

31: balance = balance + interest;

31: balance = balance + interest;

32: } 32: }

(27)

27 27

Investment.java Investment.java

35: /**

35: /**

36: Continua ad accumulare interesse per un numero di anni 36: Continua ad accumulare interesse per un numero di anni 37: @param n il numero di anni

37: @param n il numero di anni 38: */

38: */

39: public void waitYears(int n) 39: public void waitYears(int n) 40: {

40: {

41: for (int i = 1; i <= n; i++) 41: for (int i = 1; i <= n; i++) 42: {

42: {

43: double interest = balance * rate / 100;

43: double interest = balance * rate / 100;

44: balance = balance + interest;

44: balance = balance + interest;

45: } 45: }

46: years = years + n;

46: years = years + n;

47: } 47: } 48: 48:

49: /**

49: /**

50: ottiene il saldo corrente dell'investimento.

50: ottiene il saldo corrente dell'investimento.

51: @return il saldo corrente 51: @return il saldo corrente 52: */

(28)

28 28

Investment.java Investment.java

53: public double getBalance() 53: public double getBalance() 54: {

54: {

55: return balance;

55: return balance;

56: } 56: } 57: 57:

58: /**

58: /**

59: Ottiene il numero di anni per i quali questo 59: Ottiene il numero di anni per i quali questo 60: investimento ha accumulato interesse.

60: investimento ha accumulato interesse.

61: @return il numero di anni da inizio investimento 61: @return il numero di anni da inizio investimento 62: */

62: */

63: public int getYears() 63: public int getYears() 64: {

64: {

65: return years;

65: return years;

66: } 66: }

(29)

29 29

Collaudo di Collaudo di Investment.java Investment.java

01: /**

01: /**

02: Programma che calcola quanto cresce un investimento in 02: Programma che calcola quanto cresce un investimento in

03: un dato numero di anni.

03: un dato numero di anni.

04: */

04: */

05: public class InvestmentTester 05: public class InvestmentTester

06: { 06: {

07: public static void main(String[] args) 07: public static void main(String[] args)

08: { 08: {

09: final double INITIAL_BALANCE = 10000;

09: final double INITIAL_BALANCE = 10000;

10: final double RATE = 5;

10: final double RATE = 5;

11: final int YEARS = 20;

11: final int YEARS = 20;

12: Investment invest = new Investment(INITIAL_BALANCE, 12: Investment invest = new Investment(INITIAL_BALANCE,

RATE);

RATE);

13: invest.waitYears(YEARS);

13: invest.waitYears(YEARS);

14: double balance = invest.getBalance();

14: double balance = invest.getBalance();

15: System.out.printf("The balance after %d years is 15: System.out.printf("The balance after %d years is

%.2f\n",

%.2f\n",

16: YEARS, balance);

16: YEARS, balance);

17: } 17: }

(30)

30 30

Collaudo di Collaudo di Investment.java Investment.java

The balance after 20 years is 26532.98 The balance after 20 years is 26532.98

 Output Output

(31)

31 31

Errore Comune: Punto e Virgola Errore Comune: Punto e Virgola

 Un punto e virgola non correttamente posizionato Un punto e virgola non correttamente posizionato

 Un punto e virgola mancante Un punto e virgola mancante

sum = 0;

sum = 0;

for (i = 1; i <= 10; i++) for (i = 1; i <= 10; i++);; sum = sum + i;

sum = sum + i;

System.out.println(sum);

System.out.println(sum);

for (years = 1; (balance = balance + balance * for (years = 1; (balance = balance + balance * rate / 100) < targetBalance; years++)rate / 100) < targetBalance; years++)

System.out.println(years);

System.out.println(years);

(32)

32 32

Cicli Annidati Cicli Annidati

 Creare motivi triangolari Creare motivi triangolari

 Ciclare sulle righe Ciclare sulle righe

[][]

[][][][]

[][][]

[][][]

[][][][]

[][][][]

for (int i = 1; i <= n; i++) for (int i = 1; i <= n; i++) {{

   // crea una riga del triangolo    // crea una riga del triangolo

(33)

33 33

Cicli Annidati Cicli Annidati

 Creare una riga del triangolo comporta un altro ciclo Creare una riga del triangolo comporta un altro ciclo

 Mettendo insieme i cicli → Mettendo insieme i cicli → cicli annidati cicli annidati

for (int j = 1; j <= i; j++) for (int j = 1; j <= i; j++)    r = r + "[]";

   r = r + "[]";

r = r + "\n";

r = r + "\n";

(34)

34 34

Triangle.java Triangle.java

01: /**

01: /**

02: Classe che descrive oggetti triangolari che 02: Classe che descrive oggetti triangolari che 03: si possono mostrare come le forme seguenti:

03: si possono mostrare come le forme seguenti:

04: []

04: []

05: [][]

05: [][]

06: [][][]

06: [][][]

07: */

07: */

08: public class Triangle 08: public class Triangle 09: {

09: {

10: /**

10: /**

11: Costruisce un triangolo 11: Costruisce un triangolo

12: @param aWidth numero di [] nell'ultima riga.

12: @param aWidth numero di [] nell'ultima riga.

13: */

13: */

14: public Triangle(int aWidth) 14: public Triangle(int aWidth)

(35)

35 35

Triangle.java Triangle.java

19: /**

19: /**

20: Calcola la stringa relativa al triangolo.

20: Calcola la stringa relativa al triangolo.

21: @return una stringa di [] e caratteri newline 21: @return una stringa di [] e caratteri newline 22: */

22: */

23: public String toString() 23: public String toString() 24: {

24: {

25: String r = "";

25: String r = "";

26: for (int i = 1; i <= width; i++) 26: for (int i = 1; i <= width; i++) 27: {

27: {

28: // Make triangle row 28: // Make triangle row

29: for (int j = 1; j <= i; j++) 29: for (int j = 1; j <= i; j++) 30: r = r + "[]";

30: r = r + "[]";

31: r = r + "\n";

31: r = r + "\n";

32: } 32: }

33: return r;

33: return r;

34: } 34: } 35: 35:

(36)

36 36

Collaudo di

Collaudo di Triangle.java Triangle.java

01: /**

01: /**

02: Programma che collauda la classe Triangle.

02: Programma che collauda la classe Triangle.

03: */

03: */

04: public class TriangleTester 04: public class TriangleTester 05: {

05: {

06: public static void main(String[] args) 06: public static void main(String[] args) 07: {

07: {

08: Triangle small = new Triangle(3);

08: Triangle small = new Triangle(3);

09: System.out.println(small.toString());

09: System.out.println(small.toString());

10: 10:

11: Triangle large = new Triangle(15);

11: Triangle large = new Triangle(15);

12: System.out.println(large.toString());

12: System.out.println(large.toString());

13: } 13: }

(37)

37 37

Output Output

[][]

[][][][]

[][][]

[][][]

[][]

[][][][]

[][][]

[][][]

[][][][]

[][][][]

[][][][][]

[][][][][]

[][][][][][]

[][][][][][]

[][][][][][][]

[][][][][][][]

[][][][][][][][]

[][][][][][][][]

[][][][][][][][][]

[][][][][][][][][]

[][][][][][][][][][]

[][][][][][][][][][]

[][][][][][][][][][][]

[][][][][][][][][][][]

[][][][][][][][][][][][]

[][][][][][][][][][][][]

[][][][][][][][][][][][][]

[][][][][][][][][][][][][]

(38)

38 38

Elaborare Valori Sentinella Elaborare Valori Sentinella

 Valore sentinella: si può usare per indicare la fine di Valore sentinella: si può usare per indicare la fine di un insieme di dati

un insieme di dati

 0 0 or or -1 -1 make poor sentinels; better use make poor sentinels; better use Q Q

System.out.print("Enter value, Q to quit: ");

System.out.print("Enter value, Q to quit: ");

String input = in.next();

String input = in.next();

if (input.equalsIgnoreCase("Q")) if (input.equalsIgnoreCase("Q")) Abbiamo finito Abbiamo finito

else else { {

double x = Double.parseDouble(input);

double x = Double.parseDouble(input);

(39)

39 39

Un Ciclo e Mezzo Un Ciclo e Mezzo

 A volte la condizione di terminazione di un ciclo può A volte la condizione di terminazione di un ciclo può essere raggiunta solo a metà ciclo

essere raggiunta solo a metà ciclo

 In tali casi, si introduce una variabile boolean per In tali casi, si introduce una variabile boolean per controllare il ciclo:

controllare il ciclo:

boolean done = false;

boolean done = false;

while (!done) while (!done) {{

Print prompt String input = read input Print prompt String input = read input;; if (

if (fine dell'input raggiuntafine dell'input raggiunta)) done = true;

done = true;

else else { {

// Elabora l'input// Elabora l'input

(40)

40 40

InputTester.java InputTester.java

01: import java.util.Scanner;

01: import java.util.Scanner;

02: 02:

03: /**

03: /**

04: Programma che calcola la media e il massimo di un 04: Programma che calcola la media e il massimo di un 05: insieme di valor in input.

05: insieme di valor in input.

06: */

06: */

07: public class InputTester 07: public class InputTester 08: {

08: {

09: public static void main(String[] args) 09: public static void main(String[] args) 10: {

10: {

11: Scanner in = new Scanner(System.in);

11: Scanner in = new Scanner(System.in);

12: DataSet data = new DataSet();

12: DataSet data = new DataSet();

13: 13:

14: boolean done = false;

14: boolean done = false;

15: while (!done) 15: while (!done)

(41)

41 41

InputTester.java InputTester.java

17: System.out.print("Enter value, Q to quit: ");

17: System.out.print("Enter value, Q to quit: ");

18: String input = in.next();

18: String input = in.next();

19: if (input.equalsIgnoreCase("Q")) 19: if (input.equalsIgnoreCase("Q")) 20: done = true;

20: done = true;

21: else 21: else 22: { 22: {

23: double x = Double.parseDouble(input);

23: double x = Double.parseDouble(input);

24: data.add(x);

24: data.add(x);

25: } 25: } 26: } 26: } 27: 27:

28: System.out.println("Average = " + data.getAverage());

28: System.out.println("Average = " + data.getAverage());

29: System.out.println("Maximum = " + data.getMaximum());

29: System.out.println("Maximum = " + data.getMaximum());

30: } 30: } 31: } 31: }

(42)

42 42

DataSet.java DataSet.java

01: /**

01: /**

02: Calcola media di un insieme di valori.

02: Calcola media di un insieme di valori.

03: */

03: */

04: public class DataSet 04: public class DataSet 05: {

05: {

06: /**

06: /**

07: Costruisce un data set vuoto.

07: Costruisce un data set vuoto.

08: */

08: */

09: public DataSet() 09: public DataSet() 10: {

10: {

11: sum = 0;

11: sum = 0;

12: count = 0;

12: count = 0;

13: maximum = 0;

13: maximum = 0;

14: } 14: }

(43)

43 43

DataSet.java DataSet.java

16: /**

16: /**

17: Aggiunge un valore ai dati 17: Aggiunge un valore ai dati 18: @param x un valore

18: @param x un valore 19: */

19: */

20: public void add(double x) 20: public void add(double x) 21: {

21: {

22: sum = sum + x;

22: sum = sum + x;

23: if (count == 0 || maximum < x) maximum = x;

23: if (count == 0 || maximum < x) maximum = x;

24: count++;

24: count++;

25: } 25: } 26: 26:

27: /**

27: /**

28: Dà la media dei valori nel data set.

28: Dà la media dei valori nel data set.

29: @return la media o 0 se nessun dato aggiunto 29: @return la media o 0 se nessun dato aggiunto 30: */

30: */

31: public double getAverage() 31: public double getAverage() 32: {

32: {

(44)

44 44

DataSet.java DataSet.java

36: 36:

37: /**

37: /**

38: Dà il più grande valore aggiunto.

38: Dà il più grande valore aggiunto.

39: @return massimo o 0 se nessun dato aggiunto 39: @return massimo o 0 se nessun dato aggiunto 40: */

40: */

41: public double getMaximum() 41: public double getMaximum() 42: {

42: {

43: return maximum;

43: return maximum;

44: } 44: } 45: 45:

46: private double sum;

46: private double sum;

47: private double maximum;

47: private double maximum;

48: private int count;

48: private int count;

49: } 49: }

(45)

45 45

Output Output

Enter value, Q to quit: 10 Enter value, Q to quit: 10 Enter value, Q to quit: 0 Enter value, Q to quit: 0 Enter value, Q to quit: -1 Enter value, Q to quit: -1 Enter value, Q to quit: Q Enter value, Q to quit: Q Average = 3.0

Average = 3.0 Maximum = 10.0 Maximum = 10.0

(46)

46 46

Numeri Casuali e Simulazioni Numeri Casuali e Simulazioni

 In una simulazione, si generano ripetutamente In una simulazione, si generano ripetutamente

numeri casuali che si usano per simulare un'attività numeri casuali che si usano per simulare un'attività

 Generatore di numeri casuali ( Generatore di numeri casuali ( random random ) )

 Lancio di un dado (numero casuale tra 1 e 6) Lancio di un dado (numero casuale tra 1 e 6)

Random generator = new Random();

Random generator = new Random();

int n = generator.nextInt(a); // 0 <= n < a int n = generator.nextInt(a); // 0 <= n < a

double x = generator.nextDouble(); // 0 <= x < 1 double x = generator.nextDouble(); // 0 <= x < 1

(47)

47 47

Die.java Die.java

01: import java.util.Random;

01: import java.util.Random;

02: 02:

03: /**

03: /**

04: Simula un dado che, lanciato, mostra 04: Simula un dado che, lanciato, mostra 05: una faccia in maniera casuale.

05: una faccia in maniera casuale.

06: */

06: */

07: public class Die 07: public class Die 08: {

08: {

09: /**

09: /**

10: Costruisce un oggetto die con un dato numero di lati 10: Costruisce un oggetto die con un dato numero di lati 11: @param s numero di lati, es. 6 per un dado normale 11: @param s numero di lati, es. 6 per un dado normale 12: */

12: */

13: public Die(int s) 13: public Die(int s) 14: {

14: {

15: sides = s;

15: sides = s;

16: generator = new Random();

16: generator = new Random();

17: } 17: }

(48)

48 48

Die.java Die.java

19: /**

19: /**

20: Simula il lancio del dado 20: Simula il lancio del dado 21: @return la faccia del dado 21: @return la faccia del dado 22: */

22: */

23: public int cast() 23: public int cast() 24: {

24: {

25: return 1 + generator.nextInt(sides);

25: return 1 + generator.nextInt(sides);

26: } 26: } 27:

27:

28: private Random generator;

28: private Random generator;

29: private int sides;

29: private int sides;

30: } 30: }

(49)

49 49

Collaudo di

Collaudo di Die.java Die.java

01: /**

01: /**

02: Questo programma simula dieci lanci d'un dado.

02: Questo programma simula dieci lanci d'un dado.

03: */

03: */

04: public class DieTester 04: public class DieTester 05: {

05: {

06: public static void main(String[] args) 06: public static void main(String[] args) 07: {

07: {

08: Die d = new Die(6);

08: Die d = new Die(6);

09: final int TRIES = 10;

09: final int TRIES = 10;

10: for (int i = 1; i <= TRIES; i++) 10: for (int i = 1; i <= TRIES; i++) 11: {

11: {

12: int n = d.cast();

12: int n = d.cast();

13: System.out.print(n + " ");

13: System.out.print(n + " ");

14: } 14: }

15: System.out.println();

15: System.out.println();

16: } 16: }

(50)

50 50

Output Output

una seconda esecuzione:

una seconda esecuzione:

6 5 6 3 2 6 3 4 4 1 6 5 6 3 2 6 3 4 4 1

3 2 2 1 6 5 3 4 1 2

3 2 2 1 6 5 3 4 1 2

(51)

51 51

Esperimento dell'Ago

Esperimento dell'Ago

(52)

52 52

Posizione dell'Ago

Posizione dell'Ago

(53)

53 53

Posizione dell'Ago Posizione dell'Ago

 Lunghezza ago = 1, distanza tra le righe = 2 Lunghezza ago = 1, distanza tra le righe = 2

 Generare un y Generare un y low low casuale tra 0 e 2 casuale tra 0 e 2

 Generare un angolo casuale α tra 0 e 180 gradi Generare un angolo casuale α tra 0 e 180 gradi

 y y high high  = y  = y low low  + sin( α )  + sin( α )

 Colpito se  y Colpito se  y high high ≥ 2 ≥ 2

(54)

54 54

Needle.java Needle.java

01: import java.util.Random;

01: import java.util.Random;

02: 02:

03: /**

03: /**

04: Classe che simula l'ago nell'esperimento di Buffon.

04: Classe che simula l'ago nell'esperimento di Buffon.

05: */

05: */

06: public class Needle 06: public class Needle 07: {

07: {

08: /**

08: /**

09: Costruisce un ago.

09: Costruisce un ago.

10: */

10: */

11: public Needle() 11: public Needle() 12: {

12: {

13: hits = 0;

13: hits = 0;

14: tries = 0;

14: tries = 0;

(55)

55 55

Needle.java Needle.java

18: /**

18: /**

19: lascia cadere l'ago sulla griglia di righe e 19: lascia cadere l'ago sulla griglia di righe e 20: registra se l'ago ha colpito una linea.

20: registra se l'ago ha colpito una linea.

21: */

21: */

22: public void drop() 22: public void drop() 23: {

23: {

24: double ylow = 2 * generator.nextDouble();

24: double ylow = 2 * generator.nextDouble();

25: double angle = 180 * generator.nextDouble();

25: double angle = 180 * generator.nextDouble();

26:

26:

27: // Calcolo il punto superiore (high) dell'ago 27: // Calcolo il punto superiore (high) dell'ago 28:

28:

29: double yhigh = ylow + Math.sin(Math.toRadians(angle));

29: double yhigh = ylow + Math.sin(Math.toRadians(angle));

30: if (yhigh >= 2) hits++;

30: if (yhigh >= 2) hits++;

31: tries++;

31: tries++;

32: } 32: } 33: 33:

(56)

56 56

Needle.java Needle.java

34: /**

34: /**

35: Dà il numero di volte in cui l'ago ha preso una riga 35: Dà il numero di volte in cui l'ago ha preso una riga 36: @return il conto dei colpi

36: @return il conto dei colpi 37: */

37: */

38: public int getHits() 38: public int getHits() 39: {

39: {

40: return hits;

40: return hits;

41: } 41: } 42: 42:

43: /**

43: /**

44: Dà il totale dei lanci.

44: Dà il totale dei lanci.

45: @return il conto dei tentativi 45: @return il conto dei tentativi 46: */

46: */

47: public int getTries() 47: public int getTries() 48: {

48: {

49: return tries;

49: return tries;

(57)

57 57

Collaudo di

Collaudo di Needle.java Needle.java

01: /**

01: /**

02: Questo programma simula l'esperimento dell'ago di Buffon 02: Questo programma simula l'esperimento dell'ago di Buffon 03: e stampa l'approssimazione di pi greco.

03: e stampa l'approssimazione di pi greco.

04: */

04: */

05: public class NeedleTester 05: public class NeedleTester 06: {

06: {

07: public static void main(String[] args) 07: public static void main(String[] args) 08: {

08: {

09: Needle n = new Needle();

09: Needle n = new Needle();

10: final int TRIES1 = 10000;

10: final int TRIES1 = 10000;

11: final int TRIES2 = 1000000;

11: final int TRIES2 = 1000000;

12: 12:

(58)

58 58

Collaudo di

Collaudo di Needle.java Needle.java

13: for (int i = 1; i <= TRIES1; i++) 13: for (int i = 1; i <= TRIES1; i++) 14: n.drop();

14: n.drop();

15: System.out.printf("Tries = %d, Tries / Hits = %8.5f\n", 15: System.out.printf("Tries = %d, Tries / Hits = %8.5f\n", 16: TRIES1, (double) n.getTries() / n.getHits());

16: TRIES1, (double) n.getTries() / n.getHits());

17: 17:

18: for (int i = TRIES1 + 1; i <= TRIES2; i++) 18: for (int i = TRIES1 + 1; i <= TRIES2; i++) 19: n.drop();

19: n.drop();

20: System.out.printf("Tries = %d, Tries / Hits = %8.5f\n", 20: System.out.printf("Tries = %d, Tries / Hits = %8.5f\n", 21: TRIES2, (double) n.getTries() / n.getHits());

21: TRIES2, (double) n.getTries() / n.getHits());

22: } 22: } 23: } 23: }

Output

Riferimenti

Documenti correlati

Vengono automaticamente compilati i campi seguenti con il codice documento “BILANCIO XBRL B06”, il codice atto “711” – Bilancio ordinario di esercizio o comunque un

Scegliere il tipo di bilancio e indicare la data di chiusura, nel caso di distribuzione utili spuntare l’apposito check, nel campo relativo al formato XBRL

3 - allegato solo bilancio XBRL ma erroneamente dichiarato doppio deposito Qualora nella pratica è presente il solo prospetto contabile XBRL ma l'utente avesse

Informarsi presso il proprio tecnico ortopedico o un professionista qualificato/abilitato in merito agli inter- valli di manutenzione da rispettare per evitare disturbi della

In presenza di altri Aiuti De Minimis eventualmente richiesti o ottenuti dal Richiedente e dalle altre Imprese facenti parte della Impresa Unica

Parte if Blocco di istruzioni eseguite se la condizione di un if è true Parte else Blocco di istruzioni eseguite se la condizione di un if è false Blocco di istruzioni Sequenza

Il tempo di esercizio dipende dal valore caratteristico di durata (B10 d ) e dal valore medio degli azionamenti annuali (n op ) e può essere inferiore, a seconda del caso di

Premere, sul quadro comandi, il pulsante corrispondente selezionando ON (la funzione viene confermata dalla accensione della spia interna rossa) mantenere premuto il