Oppure

Loading
01/06/08 18:05
Alessandra
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(';)')
;)
aaa
01/06/08 18:11
gantonio
E in due settimane quale codice hai scritto?
aaa
01/06/08 18:52
Alessandra
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[i]<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[i]=A[i];}
}//fine-CopiaVettore

int TrovaCombinazioneMax(VettoreInt & V,int x)
{int N=V.Dimensione();
int k=0;
for(int i=0;i<N;i++)
{ if (V[i]<=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[i];
cout<<F[k]<<"+";
x=x-V[i];
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[i];
cout<<F[k]<<"+";
x=x-V[i];
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;
}
aaa
01/06/08 19:23
gantonio
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 ?
aaa
02/06/08 5:25
Alessandra
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....
aaa
02/06/08 7:17
gantonio
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 02/06/08 8:09
aaa
04/06/08 19:38
Amarath
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 ;)
aaa