• 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

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

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

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

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

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

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