Esercizi e progetti di programmazione - Apogeo
Esercizi e progetti di programmazione - Apogeo
Esercizi e progetti di programmazione - Apogeo
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