31.05.2013 Views

Esercizi e progetti di programmazione - Apogeo

Esercizi e progetti di programmazione - Apogeo

Esercizi e progetti di programmazione - Apogeo

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

ESERCIZI E PROGETTI DI PROGRAMMAZIONE E–25<br />

un’unica cifra oppure uno che scambi due cifre tra loro. L’algoritmo qui descritto viene effettivamente<br />

utilizzato per la verifi ca <strong>di</strong> numeri <strong>di</strong> carta <strong>di</strong> cre<strong>di</strong>to, ma, per semplicità, lo descriviamo<br />

per numeri <strong>di</strong> 8 cifre anziché <strong>di</strong> 16 cifre.<br />

• Partendo dalla cifra più a destra, in posizione uno, calcolate la somma <strong>di</strong> tutte le cifre aventi<br />

posto <strong>di</strong>spari. Ad esempio, se il numero della carta <strong>di</strong> cre<strong>di</strong>to è 43589795, si calcola 5 + 7 +<br />

8 + 3 = 23.<br />

• Raddoppiate il valore <strong>di</strong> tutte le cifre che non sono state sommate al punto precedente e<br />

sommate tutte le singole cifre dei numeri così ottenuti. Ad esempio, con il numero precedente,<br />

il raddoppio delle cifre <strong>di</strong> posto pari, iniziando dalla penultima, genera la sequenza 18<br />

18 10 8. Sommando tutte le singole cifre <strong>di</strong> questi numeri, si ottiene 1 + 8 + 1 + 8 + 1 +<br />

0 + 8 = 27.<br />

• Sommate i risultati ottenuti nei due punti precedenti: se l’ultima cifra del risultato è zero, il<br />

numero è valido. Nel nostro caso, 23 + 27 = 50, quin<strong>di</strong> il numero è valido.<br />

Scrivete un programma che realizzi questo algoritmo. L’utente deve fornire un numero <strong>di</strong> otto<br />

cifre e il programma deve <strong>di</strong>re se è valido oppure no. Se non risulta essere valido, il programma<br />

deve anche visualizzare il valore della cifra <strong>di</strong> controllo che lo renderebbe valido.<br />

* <strong>Esercizi</strong>o P6.3. Conversione <strong>di</strong> valuta. Scrivete il programma CurrencyConverter che chieda<br />

all’utente <strong>di</strong> inserire il tasso <strong>di</strong> cambio o<strong>di</strong>erno fra dollari statunitensi (USD) ed euro (EUR).<br />

Quin<strong>di</strong>, il programma legge alcuni valori in dollari e ne visualizza il rispettivo valore convertito<br />

in euro. Terminate quando l’utente scrive Q.<br />

*** <strong>Esercizi</strong>o P6.4. Traiettoria <strong>di</strong> un proiettile. Immaginate <strong>di</strong> lanciare una palla <strong>di</strong> cannone verticalmente<br />

nell’aria, con una velocità iniziale v0. Qualsiasi formulario vi <strong>di</strong>rà che la posizione della palla,<br />

dopo t secon<strong>di</strong>, è pari a s(t) = -0.5 · g · t2 + v0 · t, dove g, uguale a 9.81 m/s2, rappresenta la forza<br />

<strong>di</strong> gravità della Terra. Peraltro, nessun manuale <strong>di</strong> formule spiega perché qualcuno dovrebbe voler<br />

eseguire un esperimento così chiaramente pericoloso, quin<strong>di</strong> lo simuleremo in tutta sicurezza al<br />

computer.<br />

Di fatto, confermeremo me<strong>di</strong>ante una simulazione il teorema espresso dal calcolo. Nella nostra<br />

prova, esamineremo come la palla si sposta in intervalli <strong>di</strong> tempo molto brevi, chiamati Δt. In un<br />

breve intervallo <strong>di</strong> tempo, la velocità v rimane pressoché costante e possiamo calcolare la <strong>di</strong>stanza<br />

percorsa dal proiettile come segue: Δs = v · Δt. Nel nostro programma, imposteremo semplicemente<br />

questo valore:<br />

double deltaT = 0.01;<br />

e aggiorneremo la posizione me<strong>di</strong>ante l’enunciato:<br />

s = s + v * deltaT;<br />

La velocità cambia continuamente, perché <strong>di</strong> fatto si riduce a causa della forza <strong>di</strong> gravità terrestre.<br />

In un breve intervallo <strong>di</strong> tempo, la variazione <strong>di</strong> velocità corrisponde a –g · Δt e dobbiamo continuare<br />

ad aggiornare la velocità in questo modo:<br />

v = v – g * deltaT;<br />

Nell’iterazione successiva, si utilizza la nuova velocità per aggiornare la <strong>di</strong>stanza.<br />

Ora eseguite la simulazione, fi nché la palla <strong>di</strong> cannone ricade al suolo. Considerate la velocità<br />

iniziale come dato d’ingresso (100 m/s è un buon valore). Aggiornate la posizione e la velocità 100<br />

volte al secondo, ma stampate la posizione solamente una volta al secondo. Stampate anche i valori<br />

esatti della formula s(t) = –0.5 · g · t 2 + v 0 · t, per confrontarli. Usate una classe Cannonball.<br />

Cay Horstmann: Concetti <strong>di</strong> informatica e fondamenti <strong>di</strong> Java 5 a ed. - Copyright 2010 <strong>Apogeo</strong> srl

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!