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

prova-tu 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!

prova-tu Testa il funzionamento del programma con i seguenti importi: 7, 51, 88, 223, 1011.

prova-tu Usa il valore 1025679 per il test. Riesci a verificare velocemente che il numero di banconote da 50 euro calcolato dal programma è corretto?

prova-tu 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)?

prova-tu 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;
}