Esercizio 12
Scrivi un programma che simuli un sistema di scommesse effettuate presso un ippodromo. Il giocatore è dotato inizialmente di una cassa di 100€ ogni puntata costa 5€ e si può scegliere se puntare sul piazzato o sul vincente. Quando si scommette sul piazzato si vince se il cavallo scelto (tra 10 cavalli possibili) è fra i primi tre (indifferentemente primo secondo o terzo) quando si scommette sul vincente si vince solo se arriva per primo il cavallo scelto. Una vincita sul piazzato viene pagata 10€ una vincita sul vincente viene pagata 50€.
Nell'esercizio assegnato si chiede di realizzare un simulatore di scommesse
su delle gare di ippica, immaginando che il giocatore sia dotato di una
cassa di 100€.
Sarà, dunque, necessario prendere una variabile
ed inizializzarla a 100:
int cassa=100;
L'esercizio, prevede di usare due tipi di puntate.
Puntata sul vincente= si vince solo se il cavallo scelto arriva per primo.
Puntata sul piazzato= si vince solo se il cavallo scelto arriva indifferentemente
primo secondo o terzo.
Dobbiamo valutare soltanto l'ordine di arrivo. Nel testo del problema si
dice che i concorrenti sono 10. Immaginando di numerare i cavalli da 0 a
9 ci serve un sistema che generi casualmente tre numeri da 0 e 9 inclusi,
senza ripetizioni.Nonostante le apparenze, il problema non è difficile,
prima di tutto ci serve una istruzione che generi casualmente un numero
tra 0 e 9:
int p=(int)(Math.random()* 10);
Viene generato un numero decimale tra 0 ed 1, questo numero viene moltiplicato
per 10 viene convertito in intero e posto uguale alla variabile p. Dobbiamo
ottenere tre numeri generati in questo modo, quindi ci saranno tre variabili
int p,s,t;
p=primo
s=secondo
t=terzo
Il seguente programma eseguibile può fare da test
Come si vede p viene estratto incondizionatamente.
Quando estraiamo s dobbiamo stare attenti che non
sia uguale a p, ecco perché l'istruzione
s=(int)(Math.random()* 10);
è inclusa in un ciclo do-while che ritenta l'estrazione
finchè s=p.
Il secondo ciclo do-while deve usare una doppia precauzione
sull'estrazione del terzo classificato con l'istruzione
t=(int)(Math.random()* 10);
questo tentativo deve essere ripetuto finchè t=s
oppure (||) t=p.
class random3{
public static void main (String[] args) {
int p,s,t;
p=(int)(Math.random()* 10);
do{
s=(int)(Math.random()* 10);
}while(s==p);
do{
t=(int)(Math.random()* 10);
}while(t==s || t==p);
System.out.println("primo:"+ p+" secondo:"+s+" terzo:"+t);
}//fine main
}//fine class
Il programma appena scritto può rappresentare una singola gara , ora bisogna
costruire il sistema delle scommesse, ma la procedura che abbiamo appena
visto, deve comunque essere eseguita ad ogni puntata.
Introduciamo una nuova variabile n che dovrà contenere il numero del cavallo
scelto dal giocatore (da 0 a 9) e includiamo il codice precedente in un
ciclo do-while che verrà fermato quando l'utente vuole esplicitamente uscire
dal gioco.
Viene poi introdotto un costrutto if-else-if che si occupa di valutare il
risultato della giocata. Decidiamo di premiare con 15€ il piazzato e con
50€ il vincente. La cassa viene decrementata di 5€ all'inizio di ogni ciclo
perché quello è il costo della puntata..
import java.util.Scanner;
class cavalli{
public static void main (String[] args) {
Scanner in=new Scanner(System.in);
int p,s,t,n,
cassa=100;
char ch;
do{
cassa=cassa-5;
System.out.print("inserisci n:");
n=in.nextInt();
in.close();
p=(int)(Math.random()* 10);
do{
s=(int)(Math.random()* 10);
}while(s==p);
do{
t=(int)(Math.random()* 10);
}while(t==s || t==p);
System.out.println("primo:"+p+" secondo:"+s+" terzo:"+t);
if(n==p){
cassa=cassa+50;
System.out.print("hai vinto cassa:"+cassa+" continui?(s/n):");
} else if(n==s || n==t){
cassa=cassa+15;
System.out.print("piazzato cassa:"+cassa+" continui?(s/n):");
} else System.out.print("hai perso cassa:"+cassa+" continui?(s/n):");
ch=in.next().charAt(0);
}while(ch!='n');
}//fine main
}//fine class