file PDF

Transcript

file PDF
Esercizio 1: trading on-line
Si realizzi un programma Java che gestisca le operazioni base della
gestione di un fondo per gli investimenti on-line
ƒ
ƒ
ƒ
ƒ
ƒ
Creazione del fondo (con indicazione della somma in € inizialmente
versata)
Consultazione della situazione del fondo (ritorna la somma
attualmente disponibile)
Versamento di una somma
Prelievo di una somma (da autorizzare solo in presenza dell’effettiva
disponibilità!)
Investimento di una certa somma (importo minimo di 1000 €)
Nota: verificare l’effettiva disponibilità e, in caso sia inferiore,
riadattare, se possibile, l’importo da investire. Ad esempio: se si
hanno 800 € non si può fare alcun investimento; se si hanno 1500 €
e se ne vogliono investire 2000, consentire l’investimento di 1500 €
Esercizio 1: trading on-line
Per quel che riguarda gli investimenti, sono previsti 3 livelli
di rischio:
ƒ
rischio basso, che garantisce una performance la cui
percentuale è compresa nell’intervallo ±30% della cifra
investita ed è differente ad ogni investimento
ƒ
rischio medio, le cui performance sono comprese
nell’intervallo ±60% della cifra investita
ƒ
rischio elevato, le cui performance sono comprese
nell’intervallo ±100% della cifra investita
Ad esempio, se si investono 1000 € con un investimento a
rischio medio che per quell’investimento genera una
performance del +15%, si dovranno avere 150 € in più
sul fondo.
Esercizio 1: trading on-line
Qualche indicazione:
„ E’ possibile distinguere tra i diversi livelli di investimento attraverso una
variabile numerica. Per non vincolare chi usa il gestore del trading a
ricordare la corrispondenza tra il valore della variabile e la tipologia
dell’investimento si può ricorrere a più costanti numeriche public
associate ai vari livelli ed il cui nome richiama il grado di rischio.
Così facendo, l’esecuzione di un investimento non obbliga a sapere che, ad
esempio, l’investimento a basso rischio richiede di impostare un parametro
al valore “3” piuttosto che a “22”, ma settando tale parametro ad un più
chiaro “trader.LOW_RISK” si sceglie di investire con un profilo di rischio
ridotto.
„
Per introdurre il fattore di variabilità delle performance dell’investimento, si
può utilizzare la classe java.util.Random, La chiamata
java.util.Random randomGenerator = new Random();
istanzia un generatore di numeri casuali, mentre l’invocazione del metodo
nextInt(n), dove n è un numero intero, restituisce un numero intero casuale
nell’intervallo [0, n-1]
Esercizio 1: trading on-line
Per provare le varie funzionalità del codice, il main che attiva e controlla il
sistema di trading potrebbe eseguire, ad esempio:
„
Stanziamento di una somma di 5000 €, sequenza di 4 investimenti (magari
usando un ciclo se gli investimenti sono dello stesso tipo) di importo da
stabilire e verifica della cifra ottenuta
„
Stanziamento di una somma di 5000 €, definizione di una sequenza di
investimenti da ripetere fino ad ottenere almeno 7500 € (o non si rimanga
senza soldi sufficienti all’investimento…). Nel caso si sia raggiunto
l’obiettivo, prelevare la somma di 7000 € (ed andare alle Hawaii…)
„
Stanziamento di 3000 €, sequenza di due investimenti a rischio medio per
1000 € e, se si arriva ad almeno 3500 €, versare altri 2000 € ed eseguire tre
investimenti di 1000 € (uno di ogni tipo), verificando la cifra ottenuta
Domanda: volendo implementare le tre modalità in uno stesso main, come è
possibile reinizializzare il componente di trading (facendo in modo che ci
siano esattamente 5000 €) senza creare una nuova istanza?
Esercizio 2: Star Wars
Creare un simulatore del duello tra due o più personaggi sensibili alla
Forza dell’universo di Guerre Stellari.
Ogni personaggio è definito da quattro caratteristiche:
ƒ
ƒ
ƒ
ƒ
la specie (umana o non umana)
l’addestramento all’so e controllo della Forza (Jedi, Sith o nessuno)
la vitalità
la spada laser in dotazione
In base a tali caratteristiche, vengono derivati alcuni parametri:
ƒ
ƒ
ƒ
ƒ
il punteggio di attacco
il punteggio di difesa
il potere della Forza
il controllo di Forza
Esercizio 2: Star Wars
In particolare:
un personaggio di razza umana ha come parametri
¾
attacco = 8
¾
difesa = 4
mentre un non-umano ha
¾
attacco = 6
¾
difesa = 6
L’addestramento influenza i parametri relativi alla Forza: per gli Jedi
¾
potere della Forza = 12
¾
controllo della Forza = 3
per i Sith
¾
potere della Forza = 15
¾
controllo della Forza = 2
chi non ha addestramento ha entrambi i valori a zero
Il valore di vitalità è lasciato alla scelta dell’implementatore (si consiglia un valore minimo
di 50)
Esercizio 2: Star Wars
Ad ogni spada laser sono associati due parametri: il bonus di attacco e
il bonus di difesa.
Esistono le seguenti versioni di spada laser, distinguibili sulla base del
colore della lama.
Spada Verde
¾ bonus di attacco = 5
¾ bonus di difesa = 5
Spada Blu
¾ bonus di attacco = 3
¾ bonus di difesa = 6
Spada Rossa
¾ bonus di attacco = 6
¾ bonus di difesa = 3
Esercizio 2: Star Wars
Ogni personaggio ha a disposizione due tipi di attacco ed uno di difesa.
„
Colpo con la spada laser, la cui efficacia è valutata dal parametro numerico così
ottenuto:
attacco [del personaggio] +
bonus di attacco [della spada laser] +
fattore intero random nell’intervallo [0,6]
„
Attacco mediante potere della Forza, la cui efficacia è valutata dal parametro
numerico così ottenuto:
potere della Forza [del personaggio] +
fattore intero random nell’intervallo [0,6]
Nota: ad ogni attacco mediante potere della Forza, viene diminuito di 1 il parametro di
controllo della Forza del personaggio. Se il controllo della Forza è zero, non è più
possibile lanciare attacchi tramite potere della Forza ma solo tramite colpi di spada
laser.
„
Difesa con spada laser la cui efficacia è valutata dal parametro numerico così
ottenuto:
difesa [del personaggio] +
bonus di difesa [della spada laser] +
fattore intero random nell’intervallo [0,6]
Esercizio 2: Star Wars
Le regole del combattimento prevedono l’alternanza degli attacchi fino
a che “ne rimanga soltanto uno”. Un combattente è dichiarato
sconfitto quando il suo parametro vitalità raggiunge o scende
sotto lo zero.
Ad ogni attacco, si confrontano i parametri relativi all’efficacia di attacco
e di difesa:
„ se l’attacco supera la difesa, il punteggio relativo all’efficacia
dell’attacco viene sottratto al parametro vitalità di chi subisce
l’attacco
„ in caso contrario, l’attacco non sortisce alcun effetto.
Al termine del duello, deve essere comunicato il vincitore.
Esercizio 2: Star Wars
Alcune indicazioni:
9 attenzione al corretto livello di astrazione nell’approccio al problema: tipi di
entità distinti appartengono a classi distinte
9 per distinguere le diverse tipologie di addestramento o di spade si può
ricorrere a fattori numerici identificabili mediante costanti come per
l’esercizio precedente
9 sebbene l’attribuzione delle caratteristiche non avvenga mediante input
dell’utente ma all’interno del main, implementate gli opportuni controlli per
verificare che in fase di creazione tutto sia specificato correttamente
9 potete variare i valori indicati per i vari parametri come preferite
9 problema della classe Random: se diverse istanze di tale classe sono create
ad una distanza temporale inferiore al millisecondo (eventualità molto
probabile su hardware relativamente recente e se il codice non è molto
complesso), i due generatori generano le medesime sequenze! Per risolvere
in problema, occorre specificare il parametro "seed" in questo modo
new Random( Math.round(System.currentTimeMillis() * Math.random()) )
(si vedano la documentazione relativa alla classe java.util.Random e quella
relativa a java.lang.Math per ulteriori delucidazioni)