Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema algoritmo monete
Forum - C/C++ - Problema algoritmo monete

Avatar
K2 (Normal User)
Rookie


Messaggi: 27
Iscritto: 08/08/2008

Segnala al moderatore
Postato alle 13:32
Lunedì, 26/07/2010
Stavo cercando di scrivere un programma che a partire da un importo minore di 1 euro, mi calcoli il numero di monete da 50, 20, 10, 5, 2 e 1 centesimo necessarie per ottenerlo.
Ho provato con un importo pari a 35 e il programma sembra funzionare, ma con gli altri non va, cos'è che sbaglio?
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <stdlib.h>
  3. /* PROGRAMMA CHE CALCOLA IL NUMERO DI MONETE DA 50, 20, 10, 5, 2 E 1 CENT  *  
  4.  * NECESSARIE PER OTTENERE L'IMPORTO INSERITO INFERIORE A 1 EURO           *
  5.  ***************************************************************************/
  6.   int importo;
  7.   int monete[6] ={50, 20, 10, 5, 2, 1};
  8.   int n_monete[6];
  9.   int contatore;
  10.  
  11.  int main()
  12.  {
  13.      printf("Inserire un importo inferiore ad un 1 euro: ");
  14.      scanf("%d", &importo);
  15.      contatore = 0;
  16.      while(contatore < 5){
  17.      contatore++;
  18.      n_monete[contatore] = importo / monete[contatore];
  19.      if((n_monete[contatore] == 0) || (n_monete[contatore] < 0))
  20.      importo = importo - 0;
  21.      else
  22.           importo = importo - monete[contatore];
  23.      
  24.      }
  25.      
  26.      printf("%d monetine da 50 cent\n", n_monete[0]);
  27.      printf("%d monetine da 20 cent\n", n_monete[1]);
  28.      printf("%d monetine da 10 cent\n", n_monete[2]);
  29.      printf("%d monetine da 5 cent\n", n_monete[3]);
  30.      printf("%d monetine da 2 cent\n", n_monete[4]);
  31.      printf("%d monetine da 1 cent\n\n", n_monete[5]);
  32.      
  33.      system("pause");
  34.      return(0);
  35.  }


Premetto che una domanda del genere devo averla già postata, l'anno scorso, ma non trova più la traccia di quel post.

EDIT by HeDo: Il titolo "aiutino" è fuori norma, per questa volta ci passo sopra ma dalla prossima locko direttamente. inoltre devi specificare meglio qual'è l'errore di calcolo del programma e cosa hai provato a fare per sistemarlo.

Ultima modifica effettuata da HeDo il 26/07/2010 alle 14:18
PM Quote
Avatar
Alfonso (Ex-Member)
Guru


Messaggi: 688
Iscritto: 30/09/2009

Segnala al moderatore
Postato alle 14:43
Lunedì, 26/07/2010
non conosco il c++ però a vista direi:

contatore = -1 perchè essendo incrementato subito dopo il while il valore 0 (50 centesimi) non sarebbe mai considerato.

while(contatore < 6){  altrimenti 1 cent mai considerato.

importo = importo - monete[contatore]; -->  deve essere  
importo = importo - monete[contatore] moltiplicato n_monete[contatore]

Ultima modifica effettuata da Alfonso il 26/07/2010 alle 14:45
PM Quote
Avatar
K2 (Normal User)
Rookie


Messaggi: 27
Iscritto: 08/08/2008

Segnala al moderatore
Postato alle 18:26
Lunedì, 26/07/2010
Grazie per l'aiuto Alfonso,modificherò il codice.


PM Quote
Avatar
K2 (Normal User)
Rookie


Messaggi: 27
Iscritto: 08/08/2008

Segnala al moderatore
Postato alle 12:17
Mercoledì, 28/07/2010
Per quanto riguarda ilcontatore avevi ragione, bisognava inizializzarla a -1, in modo che potesse considereare anche l'elemento 0 dell'array. La condizione del while però deve rimanere inferiore a 5, altrimenti c'è un eccesso di dati nell'array. Se non mi sbaglio gli array iniziano a contare da 0, quindi riesco ancora ancora a considerare l'elemto 5 dell'array. Ed in fine mi sono scordato di moltiplicare il totale dell'importo per il numero di monete utilizzate, in questo modo prima non riuscivo a sottrarre il quantitativo di monete necessarie. Bene, risolto, il problema, grazie ancora. :k:
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <stdlib.h>
  3. /* PROGRAMMA CHE CALCOLA IL NUMERO DI MONETE DA 50, 20, 10, 5, 2 E 1 CENT  *  
  4.  * NECESSARIE PER OTTENERE L'IMPORTO INSERITO INFERIORE A 1 EURO           *
  5.  ***************************************************************************/
  6.   int importo;
  7.   int monete[6] ={50, 20, 10, 5, 2, 1};
  8.   int n_monete[6];
  9.   int contatore;
  10.  
  11.  int main()
  12.  {
  13.      printf("Inserire un importo inferiore ad un 1 euro: ");
  14.      scanf("%d", &importo);
  15.      contatore = -1;
  16.      while(contatore < 5){
  17.      contatore++;
  18.      n_monete[contatore] = importo / monete[contatore];
  19.      if((n_monete[contatore] == 0) || (n_monete[contatore] < 0))
  20.      importo = importo - 0;
  21.      else
  22.           importo = importo - monete[contatore] * n_monete[contatore];
  23.      
  24.      }
  25.      
  26.      printf("%d monetine da 50 cent\n", n_monete[0]);
  27.      printf("%d monetine da 20 cent\n", n_monete[1]);
  28.      printf("%d monetine da 10 cent\n", n_monete[2]);
  29.      printf("%d monetine da 5 cent\n", n_monete[3]);
  30.      printf("%d monetine da 2 cent\n", n_monete[4]);
  31.      printf("%d monetine da 1 cent\n\n", n_monete[5]);
  32.      
  33.      system("pause");
  34.      return(0);
  35.  }


PM Quote
Avatar
Alfonso (Ex-Member)
Guru


Messaggi: 688
Iscritto: 30/09/2009

Segnala al moderatore
Postato alle 12:45
Mercoledì, 28/07/2010
Hai ragione. Non avevo considerato che l'incremento del contatore avviene subito dopo la condizione while, per cui quando è 4 ... > 5.:yup:

PM Quote