Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Scomposizione monete con c++
Forum - C/C++ - Scomposizione monete con c++

Avatar
Alessandra (Normal User)
Newbie


Messaggi: 3
Iscritto: 01/06/2008

Segnala al moderatore
Postato alle 20:05
Domenica, 01/06/2008
Salve, mi chiamo ALessandra e sono nuova del sito.
Avrei bisogno diun grosso favore, sono ancora una principiante, ma vorrei imparare a programmare almeno qualcosina, avrei bisogno di qualche suggerimento riguardante l' implementazione di un programma:
"Dato dall' utente un valore in centesimi, mandare a video tutte le combinazioni possibili di centesimi che sommate fanno quella cifra".
Vi prego di aiutarmi, sono due settimane che ci lavoro.....sono gradite anche piccoli pezzi di codice in c++ che mi aiutino.
Grazie in anticipo..javascript:addsmile(';)')
;)

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 20:11
Domenica, 01/06/2008
E in due settimane quale codice hai scritto?

PM Quote
Avatar
Alessandra (Normal User)
Newbie


Messaggi: 3
Iscritto: 01/06/2008

Segnala al moderatore
Postato alle 20:52
Domenica, 01/06/2008
void RiempiVet(VettoreInt & Cent,int val)
{ Cent[0]=1;
  Cent[1]=2;
  Cent[2]=5;
  Cent[3]=10;
  Cent[4]=20;
  Cent[5]=50;
}//fine-RiempiVet

int TrovaCombinazione(VettoreInt & V,int x)
{int N=V.Dimensione();
int k=0;
for(int i=0;i<N;i++)
    { if (V<x)
        {k=i;}
    }return k;//trovo il valore più grande in cui io lo posso scomporre    
}//fine-TrovaMax    
      
void CopiaVettore(VettoreInt & A,VettoreInt & B)
{int N=A.Dimensione();
for(int i=0;i<N;i++)
  {B=A;}
}//fine-CopiaVettore

int TrovaCombinazioneMax(VettoreInt & V,int x)
{int N=V.Dimensione();
int k=0;
for(int i=0;i<N;i++)
    { if (V<=x)
        {k=i;}
    }return k;//trovo il valore più grande in cui io lo posso scomporre    
}//fine-TrovaMax        

void ScomponiValore(VettoreInt & V,int elem)
{ int i=0;//indice cassa
  int k=0;//indice vettore che mando a video
  int h=0;
  int j=0;
  int x=elem;
  VettoreInt F;//vettore utilizzato per la messa a video degli elemnti
  F.Dimensione(elem);
  int N=F.Dimensione();
  VettoreInt C;//vettore utilizzato per la copia di elementi
  C.Dimensione(elem);
  
  
while(x>=1)
{ i=TrovaCombinazione(V,x);
   F[k]=V;
   cout<<F[k]<<"+";
   x=x-V;
   k++;
  }//trovo la combinazione con i valori maggiori
cout<<endl;
k=0;i=0;//setto a zero gli indici

while(F[N-1]==0)
{CopiaVettore(F,C);
  while (F[k]>=1)
   {i=TrovaCombinazione(V,F[k]);
    F[k]=V;
    cout<<F[k]<<"+";
    x=x-V;
    k++;
   }//trovo le combinazioni e le metto a video
  
   if(k>0)
    while (j!=k)
     {cout<<"1+";
      j++;}j=0;

   while(C[h]!=0)
    {F[k]=C[h];
     cout<<F[k]<<"+";
     k++;h++;
    }//metti a video la restante combinazione
        
   k=0;
   while (F[k]==1)
    {k++;}
    cout<<endl;  
}//fine combinazioni      
}//fine-ScomponiValore


int main()
{ cout<<"Programma crea combinazioni centesimi";
  int val=0;
  cout<<endl<<"Inserire il numero da scomporre in centesimi:";
  cin>>val;
  cout<<endl<<"Combinazioni:"<<endl;
  VettoreInt Cent;
  Cent.Dimensione(6);
  RiempiCassa(Cent,val);  
  ScomponiValore(Cent,val);
        
WaitESC("fine pprova");  
return 0;    
}

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 21:23
Domenica, 01/06/2008
Ok ... pero' manca qualcosa ... ad esempio, cosa e' il tipo

VettoreInt

?

E gia' che ci sei, cosa succede durante l'esecuzione del programma? Quali dati inserisco per evidenziare il malfunzionamento ?

PM Quote
Avatar
Alessandra (Normal User)
Newbie


Messaggi: 3
Iscritto: 01/06/2008

Segnala al moderatore
Postato alle 7:25
Lunedì, 02/06/2008
Il VettoreInt è un tipo di vettore controllato specifico della libreria datami da mio cugino, è semplicemente un vettore di interi.
Per quanto riguarda il programma, mi mette a video la combinazione di monete con il minor numero possibile, poi mette a video diverse combinazioni ma che non hanno alcun senso, ovvero la nuova combinazione si sovrascrive a quella precedente.....è un casino....ti prego dammi una mano....

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 9:17
Lunedì, 02/06/2008
Testo quotato

Postato originariamente da Alessandra:

Il VettoreInt è un tipo di vettore controllato specifico della libreria datami da mio cugino



Beh ... ti voglio dare una mano ma senza quel

VettoreInt

e la libreria che lo tratta, non posso fare molto ...

(Non è solo un vettore di interi, ma una classe che gestisce un vettore di interi ... se la usi la devi mettere a disposizione ...)

E ci vuole anche la funzione RiempiCassa che non hai mostrato ...

Devo provare il codice per capirci qualcosa e se non mi aiuti tu che hai il problema, mi dispiace, ma non posso fare molto ...

Ultima modifica effettuata da gantonio il 02/06/2008 alle 10:09
PM Quote
Avatar
Amarath (Normal User)
Pro


Messaggi: 85
Iscritto: 08/05/2008

Segnala al moderatore
Postato alle 21:38
Mercoledì, 04/06/2008
Ciao e benvenuta.

Sinceramente mi pare un programma che si pone molto bene per la ricorsivita.

Allora innanzitutto farei ( per pura comodità ) con array di int con cardinalità 5 ( 1cent,5cent,10cent,20cent,50cent. Non ho considerato 1€ e 2€ perchè hai scritto nel testo le combinazioni di centesimi e non monete :) )

Tale array quindi indica il numero di occorrenze di ogni valore di cent ( quanti 10cent, ecc ecc ).

Poi una funzione cosi dichiarata

CentArray Calcola_Cent(int Tipo_Cent,int valore);

Questa funzione fa una divisione mod Tipo_Cent di valore, in modo da definire tutte le occorrenze di quel valore. L'eventuale resto, viene calcolato richiamando appunto la funzione e passando come tipo cent, valori < di Tipo_Cent.

I risulati di occorrenze vengono salvate nell'array passato in uscita alla funzione e dalla sua semplice analisi abbiamo tutte le combinazioni.

Spero di essere stato abbastanza chiaro, se hai dubbi, chiedi pure ;)

PM Quote