edutecnica

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

.