Problema c++

Luigis

Utente Attivo
119
14
CPU
Intel i7 5820k
Scheda Madre
Msi X99 SLI-PLUS
HDD
1TB WD Caviar Blue/SSD Crucial M550 128GB
RAM
DDR4 2X4GB Crucial Ballistix Sport 2400 Mhz
GPU
AMD Sapphire R9 270x
PSU
Super Flower Leadex Gold 650w
Case
Be-Quiet Silent Base 800 Black&Orange
OS
Windows 7 Ultimate 64bit
Salve a tutti! :ciaociao:

scrivo per chiedere aiuto riguardante un programmino con cui mi sto allenando,dovrei ricevere in input un valore di denaro e successivamente stampare in output le banconote e le monete erogate(in un certo senso come un bancomat)



#include <iostream>
using namespace std;


int main()
{
//Inizializzo tutte le variabili necessarie
long int euro;
int banc_500,banc_200,banc_100,banc_50,banc_20,banc_10,banc_5;
int moneta2e,moneta1e,moneta_50,moneta_20,moneta_10,moneta_5,moneta_2,moneta_1;
double soldi_iniziali;


cout<<"inserire il contante disponibile"<< endl;




//Trasformo la cifra inserita in centesimi di euro
cin>>soldi_iniziali;
soldi_iniziali=soldi_iniziali*100;
euro=(int)soldi_iniziali;


cout<<"verrà ora visualizzata la miglior soluzione erogabile con le banconote in corso legale"<<endl;


//Divido a scaletta per ogni banconota e moneta cambiando di volta in volta il valore della variabile euro con il resto della frazione


if(euro>=0)
{banc_500=euro/50000;
euro=euro%50000;
banc_200=euro/20000;
euro=euro%20000;
banc_100=euro/10000;
euro=euro%10000;
banc_50=euro/5000;
euro=euro%5000;
banc_20=euro/2000;
euro=euro%2000;
banc_10=euro/1000;
euro=euro%1000;
banc_5=euro/500;
euro=euro%500;
moneta2e=euro/200;
euro=euro%200;
moneta1e=euro/100;
euro=euro%100;
moneta_50=euro/50;
euro=euro%50;
moneta_20=euro/20;
euro=euro%2;
moneta_10=euro/10;
euro=euro%1;
moneta_5=euro/5;
euro=euro%5;
moneta_2=euro/2;
euro=euro%2;
moneta_1=euro/1;
euro=euro%1;}




cout<<"Le banconote e le monete verranno erogate nel seguente modo:"<<endl<<endl;
cout<<"Banconote da 500:"<<banc_500<<endl
<<"Banconote da 200:"<<banc_200<<endl
<<"Banconote da 100:"<<banc_100<<endl
<<"Banconote da 50:"<<banc_50<<endl
<<"Banconote da 20:"<<banc_20<<endl
<<"Banconote da 10:"<<banc_10<<endl
<<"Banconote da 5:"<<banc_5<<endl;
cout<<"Monete da 2 euro:"
<<moneta2e<<endl
<<"Monete da 1 euro:"<<moneta1e<<endl
<<"Monete da 50 centesimi:"<<moneta_50<<endl
<<"Monete da 20 centesimi:"<<moneta_20<<endl
<<"Monete da 10 centesimi:"<<moneta_10<<endl
<<"Monete da 5 centesimi:"<<moneta_5<<endl
<<"Monete da 2 centesimi:"<<moneta_2<<endl
<<"Monete da 1 centesimo:"<<moneta_1<<endl;
cout<<euro;
system("pause");
return 0;
}

Il programma così scritto dovrebbe essere "finito" , tralasciando bug e il fatto che sicuramente c'è una via migliore di scriverlo, ho un problema...

quando vado a scrivere una qualunque cifra , il programma termina alla moneta da 1 euro, dandomi sempre tutte le altre uguali a 0

facendo qualche prova ho scoperto che quando moltiplico la variabile float soldi_iniziali per 100 essa si comporta in modo strano....praticamente qualsiasi numero con la virgola io moltiplichi mi restituisce un numero con gli zeri al posto dei decimali, per farmi capire: 33,47*100 mi da 3300 oppure 5786,95*100 mi da 578600,

ora la domanda è... perché? sbaglio qualcosa io? è il programma? o il mio computer è sballato? xD

grazie anticipate
 
Ultima modifica:

Giacky91

Utente Attivo
793
84
CPU
Intel Core I7 - 2630QM - 2.0 GHZ
Scheda Madre
Proprietaria
HDD
500GB WD 2.5"
RAM
2 x 2GB Corsair
GPU
GeForce GT540M 1GB
Audio
Integrato
OS
Windows 10 Pro, Kali Linux 2.0
Salve a tutti! :ciaociao:

scrivo per chiedere aiuto riguardante un programmino con cui mi sto allenando,dovrei ricevere in input un valore di denaro e successivamente stampare in output le banconote e le monete erogate(in un certo senso come un bancomat)



Codice:
[URL="http://www.tomshw.it/forum/usertag.php?do=list&action=hash&hash=include"]#include[/URL] <iostream>
using namespace std;


int main()
{
        //Inizializzo tutte le variabili necessarie
        long int euro;
        int banc_500,banc_200,banc_100,banc_50,banc_20,banc_10,banc_5;
        int moneta2e,moneta1e,moneta_50,moneta_20,moneta_10,moneta_5,moneta_2,moneta_1;  
        double soldi_iniziali;


        cout<<"inserire il contante disponibile"<< endl;




        //Trasformo la cifra inserita in centesimi di euro
        cin>>soldi_iniziali;
        soldi_iniziali=soldi_iniziali*100;
        euro=(int)soldi_iniziali;


        cout<<"verrà ora visualizzata la miglior soluzione erogabile con le banconote in corso legale"<<endl;


        //Divido a scaletta per ogni banconota e moneta cambiando di volta in volta il valore della variabile euro con il resto della frazione 


        if(euro>=0)
        {banc_500=euro/50000;
        euro=euro%50000;
        banc_200=euro/20000;
        euro=euro%20000;
        banc_100=euro/10000;
        euro=euro%10000;
        banc_50=euro/5000;
        euro=euro%5000;
        banc_20=euro/2000;
        euro=euro%2000;
        banc_10=euro/1000;
        euro=euro%1000;
        banc_5=euro/500;
        euro=euro%500;        
        moneta2e=euro/200;
        euro=euro%200;
        moneta1e=euro/100;
        euro=euro%100;
        moneta_50=euro/50;
        euro=euro%50;
        moneta_20=euro/20;
        euro=euro%2;
        moneta_10=euro/10;
        euro=euro%1;
        moneta_5=euro/5;
        euro=euro%5;
        moneta_2=euro/2;
        euro=euro%2;
        moneta_1=euro/1;
        euro=euro%1;}




        cout<<"Le banconote e le monete verranno erogate nel seguente modo:"<<endl<<endl;
        cout<<"Banconote da 500:"<<banc_500<<endl
            <<"Banconote da 200:"<<banc_200<<endl
            <<"Banconote da 100:"<<banc_100<<endl
            <<"Banconote da 50:"<<banc_50<<endl
            <<"Banconote da 20:"<<banc_20<<endl
            <<"Banconote da 10:"<<banc_10<<endl
            <<"Banconote da 5:"<<banc_5<<endl;
        cout<<"Monete da 2 euro:"
            <<moneta2e<<endl
            <<"Monete da 1 euro:"<<moneta1e<<endl
            <<"Monete da 50 centesimi:"<<moneta_50<<endl
            <<"Monete da 20 centesimi:"<<moneta_20<<endl
            <<"Monete da 10 centesimi:"<<moneta_10<<endl
            <<"Monete da 5 centesimi:"<<moneta_5<<endl
            <<"Monete da 2 centesimi:"<<moneta_2<<endl
            <<"Monete da 1 centesimo:"<<moneta_1<<endl;
        cout<<euro;
        system("pause");
        return 0;
}

Il programma così scritto dovrebbe essere "finito" , tralasciando bug e il fatto che sicuramente c'è una via migliore di scriverlo, ho un problema...

quando vado a scrivere una qualunque cifra , il programma termina alla moneta da 1 euro, dandomi sempre tutte le altre uguali a 0

facendo qualche prova ho scoperto che quando moltiplico la variabile float soldi_iniziali per 100 essa si comporta in modo strano....praticamente qualsiasi numero con la virgola io moltiplichi mi restituisce un numero con gli zeri al posto dei decimali, per farmi capire: 33,47*100 mi da 3300 oppure 5786,95*100 mi da 578600,

ora la domanda è... perché? sbaglio qualcosa io? è il programma? o il mio computer è sballato? xD

grazie anticipate

Prova a moltiplicare per 100,00. Non sono bene le specifiche del c++, ma puo essere che la moltiplicazione tra float e int restituisca un int
 

Luigis

Utente Attivo
119
14
CPU
Intel i7 5820k
Scheda Madre
Msi X99 SLI-PLUS
HDD
1TB WD Caviar Blue/SSD Crucial M550 128GB
RAM
DDR4 2X4GB Crucial Ballistix Sport 2400 Mhz
GPU
AMD Sapphire R9 270x
PSU
Super Flower Leadex Gold 650w
Case
Be-Quiet Silent Base 800 Black&Orange
OS
Windows 7 Ultimate 64bit
Prova a moltiplicare per 100,00. Non sono bene le specifiche del c++, ma puo essere che la moltiplicazione tra float e int restituisca un int

YUHU.png

TI VOGLIO ABBRACCIARE!!! grazieee , tra l'altro ho scoperto pure di aver commesso un errore qui:

moneta_20=euro/20;
euro=euro%2;
moneta_10=euro/10;
euro=euro%1;


Ho messo %2 invece di %20 e %1 invece di %10

ora funziona perfettamente, grazie 1000!
 

Giacky91

Utente Attivo
793
84
CPU
Intel Core I7 - 2630QM - 2.0 GHZ
Scheda Madre
Proprietaria
HDD
500GB WD 2.5"
RAM
2 x 2GB Corsair
GPU
GeForce GT540M 1GB
Audio
Integrato
OS
Windows 10 Pro, Kali Linux 2.0
Bene. Ne sono contento!
 

Luigis

Utente Attivo
119
14
CPU
Intel i7 5820k
Scheda Madre
Msi X99 SLI-PLUS
HDD
1TB WD Caviar Blue/SSD Crucial M550 128GB
RAM
DDR4 2X4GB Crucial Ballistix Sport 2400 Mhz
GPU
AMD Sapphire R9 270x
PSU
Super Flower Leadex Gold 650w
Case
Be-Quiet Silent Base 800 Black&Orange
OS
Windows 7 Ultimate 64bit
Scusate approfitto di questa discussione per non aprirne una nuova,

ho un dubbio riguardante il ciclo infinito con while,


ho un codice di questo tipo:

#include <iostream>
using namespace std;


int main ()
{int numero;


int somma,contatore;


cout<<"inserire i numeri di cui fare la media"<<endl;


somma=0;
contatore=0;
int fine=123321;
while (true)
{
cin>>numero;
if (numero == 123321)
{break;}
contatore++;
somma=somma+numero;
cout<<"se vuoi continuare inserisci un altro numero, altrimenti digita '123321'"<<endl;




}
if (somma>0)
{
cout<<"la media vale: "<<somma/contatore<<endl;
}
else
{cout<<"la media vale 0"<<endl;}
system("pause");
return 0;


}


se il ciclo è per una iterazione definita ok... pongo il contatore minore del numero di iterazioni nel while e va tutto ok, ma se volessi fare un ciclo infinito e stopparlo quando voglio quali sono le possibilità? l'unica che mi è venuta in mente è quella che ho usato nel programma;

mi sarebbe piaciuto restituire la media magari scrivendo "basta" , però non posso fare una relazione tra un int come "numero" e un char o una stringa...

grazie anticipate

- - - Updated - - -

Ok niente ho risolto xD grazie comunque, si può chiudere
 

Giacky91

Utente Attivo
793
84
CPU
Intel Core I7 - 2630QM - 2.0 GHZ
Scheda Madre
Proprietaria
HDD
500GB WD 2.5"
RAM
2 x 2GB Corsair
GPU
GeForce GT540M 1GB
Audio
Integrato
OS
Windows 10 Pro, Kali Linux 2.0
Scusate approfitto di questa discussione per non aprirne una nuova,

ho un dubbio riguardante il ciclo infinito con while,


ho un codice di questo tipo:

#include <iostream>
using namespace std;


int main ()
{int numero;


int somma,contatore;


cout<<"inserire i numeri di cui fare la media"<<endl;


somma=0;
contatore=0;
int fine=123321;
while (true)
{
cin>>numero;
if (numero == 123321)
{break;}
contatore++;
somma=somma+numero;
cout<<"se vuoi continuare inserisci un altro numero, altrimenti digita '123321'"<<endl;




}
if (somma>0)
{
cout<<"la media vale: "<<somma/contatore<<endl;
}
else
{cout<<"la media vale 0"<<endl;}
system("pause");
return 0;


}


se il ciclo è per una iterazione definita ok... pongo il contatore minore del numero di iterazioni nel while e va tutto ok, ma se volessi fare un ciclo infinito e stopparlo quando voglio quali sono le possibilità? l'unica che mi è venuta in mente è quella che ho usato nel programma;

mi sarebbe piaciuto restituire la media magari scrivendo "basta" , però non posso fare una relazione tra un int come "numero" e un char o una stringa...

grazie anticipate

- - - Updated - - -

Ok niente ho risolto xD grazie comunque, si può chiudere

Condividi la soluzione, puo magari servire a qualcun'altro!
 

Luigis

Utente Attivo
119
14
CPU
Intel i7 5820k
Scheda Madre
Msi X99 SLI-PLUS
HDD
1TB WD Caviar Blue/SSD Crucial M550 128GB
RAM
DDR4 2X4GB Crucial Ballistix Sport 2400 Mhz
GPU
AMD Sapphire R9 270x
PSU
Super Flower Leadex Gold 650w
Case
Be-Quiet Silent Base 800 Black&Orange
OS
Windows 7 Ultimate 64bit
Condividi la soluzione, puo magari servire a qualcun'altro!

Le scelte non sono molte(ma lo dico da completo inesperto)

il ciclo infinito lo interrompi solo con un break o falsando la condizione del while ad esempio.

per interromperlo con un "basta" bisognerebbe ricevere in input non interi ma caratteri e porre un if che compari l'input, se risulta uguale a "basta" interrompe il ciclo...

un altra possibile soluzione potrebbe essere quella di usare la funzione atoi... però non ci ho provato.
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!