|
Tipo:
Console. Realizzare
una classe che rappresenta un cronometro (per gare di atletica di velocità) con
‘scatti decimali’. Esso segna secondi, decimi, centesimi e millesimi in questa
forma: s.d.c.m; ad esempio 22.7.9.5 significa 22 secondi, 7 decimi, 9 centesimi
e 5 millesimi. Chiamate la classe ‘Cronometro’. Due costruttori. Il primo serve
a creare un cronometro impostando il tempo in modo completo con secondi, decimi,
centesimi e millesimi. Al momento della creazione di un cronometro i secondi non
possono superare 59 (il costruttore deve scartare i secondi in eccesso);
similmente per decimi, centesimi e millesimi (il costruttore scarterà quelli che
eccedono 9). Quindi se si tenta di creare un cronometro con s=67, d=12, c=976,
m=12323 in realtà deve essere creato il cronometro con orario 59.9.9.9. Il
secondo costruttore imposta il cronometro in base al numero di decimi
specificato; devono essere rifiutati valori maggiori di 200 decimi; valori
superiori a 9 decimi modificano i secondi e memorizzano nei decimi il resto (ad
esempio con 48 decimi si crea il cronometro 4.8.0.0).
Definire
la property (o i classici metodi get/set se le properties non sono ancora state
affrontate a livello teorico) che permette di ottenere od impostare i secondi.
Definire un metodo per ottenere la stringa corrispondente al tempo completo (es.
22.7.5.2). Ridefinire l’operatore ++: viene restituito un cronometro con i
millesimi incrementati di uno (eventualmente regolare correttamente anche i
centesimi, i decimi ed i secondi come accadrebbe nel caso limite 22.9.9.9 che
genererebbe l’orario 23.0.0.0).
Nel main
dell’ipotetico programma creare due cronometri (uno con un costruttore ed uno
con l’altro) e visualizzare il loro tempo; azzerare poi i secondi del primo
cronometro e visualizzare il tempo.
Opzionale
(se volete scervellarvi un pochino con divertimento assicurato): nel metodo ++
fate passare veramente un millisecondo con System.Threading.Thread.Sleep(1); poi
nel programma principale con un ciclo for per 5000 volte incrementate un
cronometro e visualizzate il tempo (per ottenere la simulazione visiva di un
vero cronometro fate visualizzare il tempo sempre nello stesso punto dello
schermo con Console.SetCursorPosition(x, y) dove x=colonna, y=riga.
Definite
poi la classe dei ‘CronometriEstesi’ che deriva dalla precedente. Un oggetto di
questa classe viene dapprima creato come se fosse un ‘CronometroDecimale’ ma
gestisce centesimi e millesimi in forma ‘estesa’; ad esempio se un cronometro
segna 22.5.3.9 un cronometro esteso segnerà 22.5.53.539. Traccia: il costruttore
convertirà subito i centesimi dalla forma decimale a quella estesa con un
semplice calcolo. Il metodo ++ dovrà resettare a 0 i centesimi ogni 100
centesimi (e non ogni 10 come prima) e resettare i millesimi a 0 ogni 1000
millesimi (e non ogni 10 come prima). Suggerisco anche di ridefinire il metodo
LeggiOrario in modo che formatti i centesimi a due cifre e millesimi a 22.0.7.1
diventa 22.0.07.071. Provate infine il ciclo di incremento come già fatto con i
cronometri normali. |