Prima parte: uso di metodi String
Utilizzare i metodi della classe String per risolvere il seguente esercizio:
- leggere da tastiera una stringa
s
- leggere da tastiera un carattere
x
- stampare la posizione di ciascuna occorrenza di x in s
Guida
- La stringa
s
può essere letta usando la classe JOptionPane
- Per ottenere un carattere da memorizzare in
x
possiamo leggere un'altra stringa e poi ottenerne il primo carattere
usando il metodo charAt
- la posizione della prima occorrenza di
x
in s
si trova con il metodo indexOf
(nella signature compare un parametro int
, ma possiamo invocarlo anche con un parametro attuale char
, che
sarà convertito implicitamente in int
)
- le occorrenze successive si possono trovare scrivendo un ciclo che a
ciascuna iterazione richama il metodo
indexOf
, ma è necessario
che la ricerca inizi a partire dalla
posizione seguente a quella in cui è stata trovata l'occorrenza precedente.
A tal fine si può usare il metodo con signature indexOf(int ch, int fromIndex)
Soluzione
Si raccomanda di leggere la soluzione EsercizioStringhe.java solo dopo aver cercato di risolvere il problema autonomamente.
Seconda parte: stima del valore di π , usando classi geometriche
Sappiamo che il numero π è proporzionale al rapporto tra l'area di un cerchio inscritto in un
quadrato e l'area del quadrato stesso.
È allora possibile stimare (in modo grossolano) il valore di π generando punti in posizione casuale interni al quadrato, e contando quanti di questi sono contenuti
nel cerchio. Se la distribuzione di questi punti è sufficientemente uniforme,
allora il rapporto tra il numero di punti nel cerchio e il numero di punti generati fornisce una stima di π /4.
All'aumentare del numero di punti generati il valore trovato dovrebbe tendere a π.
Guida
- il cerchio sarà rappresentato da un oggetto di classe
Ellipse2D.Double
. Per usarla deve essere però importata la classe "astratta"
java.awt.geom.Ellipse2D
. Si può scegliere di generare un cerchio inscritto nel quadrato di lato unitario con estremi nei punti (0, 0) e (1, 1)
- il punto di coordinate random sarà creato generando due numeri pseudocasuali attraverso il metodo
static
già visto Math.random
, chiamando poi l'opportuno costruttore della classe Point2D.Double
. Anche in questo caso bisognerà importare la classe astratta import java.awt.geom.Point2D
.
- per controllare se il punto generato è contenuto nel cerchio si può utilizzare il metodo
contains(...)
, che però non è definito nella classe
Ellipse2D.Double
ma in una classe più generale (una superclasse). Lo trovate nella pagina che descrive Ellipse2D.Double
, ma è elencato dopo i metodi, nella sezione initolata
"Methods inherited from class java.awt.geom.RectangularShape"
Soluzione
Si raccomanda di leggere la soluzione StimaPiGreco.java solo dopo aver cercato di risolvere il problema autonomamente.