Oppure

Loading
26/07/10 11:32
K2
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?
#include <iostream>
#include <stdlib.h>
/* PROGRAMMA CHE CALCOLA IL NUMERO DI MONETE DA 50, 20, 10, 5, 2 E 1 CENT  *  
 * NECESSARIE PER OTTENERE L'IMPORTO INSERITO INFERIORE A 1 EURO           *
 ***************************************************************************/
  int importo;
  int monete[6] ={50, 20, 10, 5, 2, 1};
  int n_monete[6];
  int contatore;
  
 int main()
 {
     printf("Inserire un importo inferiore ad un 1 euro: ");
     scanf("%d", &importo);
     contatore = 0;
     while(contatore < 5){
     contatore++;
     n_monete[contatore] = importo / monete[contatore];
     if((n_monete[contatore] == 0) || (n_monete[contatore] < 0))
     importo = importo - 0;
     else
          importo = importo - monete[contatore];
     
     }
     
     printf("%d monetine da 50 cent\n", n_monete[0]);
     printf("%d monetine da 20 cent\n", n_monete[1]);
     printf("%d monetine da 10 cent\n", n_monete[2]);
     printf("%d monetine da 5 cent\n", n_monete[3]);
     printf("%d monetine da 2 cent\n", n_monete[4]);
     printf("%d monetine da 1 cent\n\n", n_monete[5]);
     
     system("pause");
     return(0);
 }


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 26/07/10 12:18
aaa
26/07/10 12:43
Alfonso
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 26/07/10 12:45
aaa
26/07/10 16:26
K2
Grazie per l'aiuto Alfonso,modificherò il codice.

aaa
28/07/10 10:17
K2
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:
#include <iostream>
#include <stdlib.h>
/* PROGRAMMA CHE CALCOLA IL NUMERO DI MONETE DA 50, 20, 10, 5, 2 E 1 CENT  *  
 * NECESSARIE PER OTTENERE L'IMPORTO INSERITO INFERIORE A 1 EURO           *
 ***************************************************************************/
  int importo;
  int monete[6] ={50, 20, 10, 5, 2, 1};
  int n_monete[6];
  int contatore;
  
 int main()
 {
     printf("Inserire un importo inferiore ad un 1 euro: ");
     scanf("%d", &importo);
     contatore = -1;
     while(contatore < 5){
     contatore++;
     n_monete[contatore] = importo / monete[contatore];
     if((n_monete[contatore] == 0) || (n_monete[contatore] < 0))
     importo = importo - 0;
     else
          importo = importo - monete[contatore] * n_monete[contatore];
     
     }
     
     printf("%d monetine da 50 cent\n", n_monete[0]);
     printf("%d monetine da 20 cent\n", n_monete[1]);
     printf("%d monetine da 10 cent\n", n_monete[2]);
     printf("%d monetine da 5 cent\n", n_monete[3]);
     printf("%d monetine da 2 cent\n", n_monete[4]);
     printf("%d monetine da 1 cent\n\n", n_monete[5]);
     
     system("pause");
     return(0);
 }
aaa
28/07/10 10:45
Alfonso
Hai ragione. Non avevo considerato che l'incremento del contatore avviene subito dopo la condizione while, per cui quando è 4 ... > 5.:yup:
aaa