Calcolo dei resti - Soluzione
Un esempio di soluzione per l'esercizio del calcolo dei resti è la seguente:
#include <stdio.h>
int main()
{
int importo = 123;
int b50, b20, b10, b5, m2, m1;
int resto;
/* calcolo del numero di monete e banconote */
b50 = importo / 50; // numero di banconote da 50 euro
resto = importo % 50;
b20 = resto / 20; // numero di banconote da 20 euro
resto = resto % 20;
b10 = resto / 10; // numero di banconote da 10 euro
resto = resto % 10;
b5 = resto / 5; // numero di monete da 5 euro
resto = resto % 5;
m2 = resto / 2; // numero di monete da 2 euro
m1 = resto % 2;
/* stampa del numero di banconote calcolate */
printf("Importo totale : %d euro\n", importo);
printf("%d banconote da 50 euro\n", b50);
printf("%d banconote da 20 euro\n", b20 );
printf("%d banconote da 10 euro\n", b10);
printf("%d banconote da 5 euro\n", b5);
printf("%d monete da 2 euro\n", m2);
printf("%d monete da 1 euro\n", m1);
return 0;
}
Commenti
Come nell'esercizio precedente, sono presenti le istruzioni per la dichiarazione e l'inizializzazione delle variabili, in questo caso degli interi.
In questo secondo esercizio è necessario effettuare più operazioni.
In particolare, verranno calcolati una divisione tra interi e un resto per ogni taglio di banconote.
Infine è possibile stampare a schermo il testo formattato come richiesto, usando la funzione printf
il numero necessario di volte.
Si noti come venga utilizzata una sola variabile resto
per memorizzare l'importo rimanente dopo ogni calcolo del numero di banconote/monete.
Hands-on
Cambia il valore dell'importo per calcolare il numero di banconote/monete corrispondente
- non dimenticare di salvare il file modificato e di ri-compilare
CONSIGLIO: per verificare il funzionamento del programma, utilizza un valore dell'importo che renda semplice il calcolo manuale e quindi una semplice verifica della correttezza del risultato!
Testa il funzionamento del programma con i seguenti importi: 7
, 51
, 88
, 223
, 1011
.
Usa il valore 1025679
per il test. Riesci a verificare velocemente che il numero di banconote da 50 euro
calcolato dal programma è corretto?
L'ordine con cui si svolgono i calcoli è solitamente molto importante. Talvolta si può cambiare l'ordine di alcune operazioni, mentre in altri casi no, in quanto si introducono errori nel calcolo.
Prova a spostare o eliminare una qualsiasi delle istruzioni che calcolano il numero di banconote/monete e i resti.
Talvolta il compilatore fornisce indicazioni utili che aiutano a scoprire gli errori logici.
Per esempio, che succede compili il programma dopo aver eliminato la prima istruzione (soltanto) che calcola il resto (resto = importo % 50
)?
E che succede invece se compili dopo aver eliminato soltanto la seconda (resto = importo % 20
)?
Invece di utilizzare una variabile per ciascun numero di banconote/monete, è possibile ridurre considerevolmente il numero di variabili utilizzate ri-assegnando alla variabile importo
il resto dell'operazione precedente e stampando i valori man mano che vengono calcolati.
# include <stdio.h>
int main() {
int importo = 123; // importo iniziale
int n; // numero di banconote/monete
printf("Importo totale: %d euro\n", importo);
n = importo / 50; // numero di banconote da 50 euro
printf("%d banconote da 50 euro\n", n); // stampa
importo = importo % 50; // il resto è il nuovo importo
n = importo / 20; // numero di banconote da 20 euro
printf("%d banconote da 20 euro\n", n);
importo = importo % 20;
n = importo / 10; // numero di banconote da 10 euro
printf("%d banconote da 10 euro\n", n);
importo = importo % 10;
n = importo / 5; // numero di banconote da 5 euro
printf("%d banconote da 5 euro\n", n);
importo = importo % 5;
n = importo / 2; // numero di monete da 2 euro
printf("%d monete da 2 euro\n", n);
n = importo % 2; // numero di monete da 1 euro
printf("%d monete da 1 euro\n", n);
return 0;
}