PDA

Visualizza la versione completa : Problema con c++ calcolatore


E3ddy
13-03-2010, 20:32
Ciao ragazzi..
avrei bisogno di un aiuto riguardo questa semplicissima sequenza





#include <iostream>

using namespace std;

main()
{
float operatore;
float risultatoa;
float risultatob;
float risultatoc;
cout << "INSERIRE N. ";
cin >> risultatoa;
cout << "INSERIRE OPERATORE 1 per addizionare, 2 per sottrarre, 3 per moltiplicare, 4 per dividere: ";
cin >> operatore;
cout << "INSERIRE N. DA OPERARE ";
cin >> risultatob;

if (operatore = 1)
{
risultatoc = risultatoa + risultatob;
cout << "Il risultato dell'addizione è: " << risultatoc << endl;
}
else if (operatore = 2)
{

if (operatore = 2)
{
risultatoc = risultatoa - risultatob;
cout << "Il risultato della sottrazione è: " << risultatoc << endl;
}

}



system("PAUSE");
return EXIT_SUCCESS;
}




Il problema è l'if..

cioè se l'operatore è 2 o 3 o 4..

non prosegue al else if.. e non capisco il motivo.. ma continua a farmi l'addizione.. perchè?

vi ringrazio dell'aiuto...

vi prego evitate commenti inutili.. ho iniziato ieri sera

oregon
13-03-2010, 20:40
L'operatore di confronto in C/C++ è

==

e non

=

E3ddy
13-03-2010, 22:24
Originariamente inviato da oregon
L'operatore di confronto in C/C++ è

==

e non

=

ma lol... avevo saltato di leggere questa parte grazie ^^

E3ddy
13-03-2010, 23:06
ottimo.. direi che come mio primissimo approccio al c e c++.. e andato a buon fine.. ma mi son ritrovato con una strana perplessità e domanda..:

come si può notare per eseguire l'operatore +, - , *e / mi tocca usare 1 2 3 4..

cosi...:


#include <cstdlib>
#include <iostream>

using namespace std;

main()
{
float operatore;
float risultatoa;
float risultatob;
float risultatoc;
cout << "INSERIRE N. ";
cin >> risultatoa;
cout << "INSERIRE OPERATORE 1 per addizionare, 2 per sottrarre, 3 per moltiplicare, 4 per dividere: ";
cin >> operatore;
cout << "INSERIRE N. DA OPERARE ";
cin >> risultatob;

if (operatore == 1)
{
risultatoc = risultatoa + risultatob;
cout << "Il risultato dell'addizione è: " << risultatoc << endl;
cout << endl;
cout << risultatoa << " +" << endl;
cout << risultatob << " =" << endl;
cout << "____" << endl;
cout << risultatoc << endl;
cout << endl;
}
else if (operatore == 2)
{

if (operatore == 2)
{
risultatoc = risultatoa - risultatob;
cout << "Il risultato della sottrazione è: " << risultatoc << endl;
}
}
else if (operatore == 3)
{
if (operatore == 3)
{
risultatoc = risultatoa * risultatob;
cout << "Il risultato della moltiplicazione è: " << risultatoc << endl;
}

}
else if (operatore == 4)
{
if (operatore == 4)
{
risultatoc = risultatoa / risultatob;
cout << "Il risultato della divisione è: " << risultatoc << endl;
}
}


system("PAUSE");
return EXIT_SUCCESS;
}


e se io volessi sostituire quel 1 2 3 4 con i loro rispettivi + - * / come devo fare?...

cioè se io volessi togliere tutta quella strafilata di if ed else come dovrei fare?...

questa volta come prima.. io mi sono adattato al linguaggio.. ma visto che siamo a basso profilo.. come faccio a fare al linguaggio quello che voglio io in questo caso?

xDDDDDDDDD

apparte gli scherzi è una community fantastica grazie a tutti voi e lo staff di eccellente fattura... ^^

antotan
14-03-2010, 02:55
Per utilizzare i numeri, tu usi un tipo di dato che rappresenta un numero (erroneamente utilizzi float, che rappresenta valori in virgola mobile. Dovresti utilizzare uno short o un int per i numeri interi).

Se vuoi utilizzare dei caratteri (quello che sono *, +, /, -), dovrai utilizzare il tipo di dato char.
Per quel tipo di programma, conviene utilizzare il costrutto switch, ma essenzialmente non cambia molto:



#include <iostream>

using namespace std;

int main()
{
char op;

cout << "Operatore: ";
cin >> op;

switch(op)
{
case '+':
{
cout << "PIU'" << endl;
break;
}
case '-':
{
cout << "MENO" << endl;
break;
}
case '*':
{
cout << "PER" << endl;
break;
}
case '/':
{
cout << "DIVISO" << endl;
break;
}
default:
{
cout << "Non e' un operatore" << endl;
break;
}
}
}

E3ddy
14-03-2010, 15:44
Originariamente inviato da antotan
Per utilizzare i numeri, tu usi un tipo di dato che rappresenta un numero (erroneamente utilizzi float, che rappresenta valori in virgola mobile. Dovresti utilizzare uno short o un int per i numeri interi).

Se vuoi utilizzare dei caratteri (quello che sono *, +, /, -), dovrai utilizzare il tipo di dato char.
Per quel tipo di programma, conviene utilizzare il costrutto switch, ma essenzialmente non cambia molto:



#include <iostream>

using namespace std;

int main()
{
char op;

cout << "Operatore: ";
cin >> op;

switch(op)
{
case '+':
{
cout << "PIU'" << endl;
break;
}
case '-':
{
cout << "MENO" << endl;
break;
}
case '*':
{
cout << "PER" << endl;
break;
}
case '/':
{
cout << "DIVISO" << endl;
break;
}
default:
{
cout << "Non e' un operatore" << endl;
break;
}
}
}

oregon
14-03-2010, 15:45
:confused: Che vuoi dire con questa risposta ?

E3ddy
14-03-2010, 20:55
Originariamente inviato da oregon
:confused: Che vuoi dire con questa risposta ?

anchio.. vorrei saperlo.. xD

no va beh mi ha fatto partire la risposta senza ciò che avevo scritto io...

ripeto...

con int non potrei usare i numeri con la virgola.. cioè se volessi fare 1.1+1.1= mi darebbe errore oppure mi direbbe semplicemente 2 perchè perderebbe dei dati.. almeno cosi ho letto xD

MacApp
14-03-2010, 21:57
Originariamente inviato da E3ddy


if (operatore = 1)



eccone un altro...
;-)

la soluzione definitiva, per evitare per sempre quel errore con qualunque linguaggio di programmazione è mettere nei confronti la costante a sinistra!

http://www.isidoroghezzi.net/assegnamento_per_sbaglio.html

antotan
14-03-2010, 23:03
Originariamente inviato da E3ddy
anchio.. vorrei saperlo.. xD

no va beh mi ha fatto partire la risposta senza ciò che avevo scritto io...

ripeto...

con int non potrei usare i numeri con la virgola.. cioè se volessi fare 1.1+1.1= mi darebbe errore oppure mi direbbe semplicemente 2 perchè perderebbe dei dati.. almeno cosi ho letto xD

Indubbiamente se assegni 1.1 ad un int, perdi dei dati, ma non mi pare che nel tuo programma ci fosse scritto "Per la somma scrivi 1.1, per la divisione 3.14, per la moltiplicazione 2.7" :)

L'universo delle scelte è U = {1, 2, 3, 4} quindi non tratterai numeri con la virgola, per questo non hai motivo di utilizzare un float.

Se hai la necessità di utilizzare degli interi, utilizza long, int o short (eventualmente unsigned), in funzione della grandezza dell'intero.
Nel tuo caso, poi, 1...4 sono solo dei caratteri alla fine dei conti, denotano solo una scelta, cioè non farai operazioni aritmetiche su di loro. Meglio allora usare un char che è grande 1 solo byte.
Considerato poi che 1...4 equivale a +,-,*,/ direi che il char è il più ovvio

:ciauz:

Loading