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)