Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - problema calcolatrice in c++
Forum - C/C++ - problema calcolatrice in c++

Avatar
xxmarco94 (Normal User)
Rookie


Messaggi: 28
Iscritto: 07/02/2010

Segnala al moderatore
Postato alle 13:40
Domenica, 07/02/2010
Ciao a tutti. io mi sono appena avvicinato al c++ (ho cominciato ieri sera) ed ho provato a creare una calcolatrice. Finchè utilizzavo solo le operazioni base tutto andava bene funzionava alla perfezione. Il problema è sorto quando ho provato ad aggiungere le potenze. Ho letto che si deve usare la funzione pow() ed ho provato ad usarla ma non funziona mi dice che "il termine non restituisce una funzione che accetta 2 argomenti".

Il mio codice sorgente è questo

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <windows.h>
  3. #include <stdlib.h>
  4. using namespace std;
  5.  
  6. int main(){
  7.         HANDLE hConsole;                                                        //Colora il
  8.         hConsole = GetStdHandle(STD_OUTPUT_HANDLE);     //testo in
  9.         SetConsoleTextAttribute (hConsole, 10);         //verde.
  10.         int valore1, valore2, scelta;
  11.         float risultato;
  12.         char operazione, pow;
  13.        
  14.         do {
  15.                 system("cls");//Serve cancellare i numeri ed i risultati.
  16.                 cout<<"       ___---CALCOLATRICE---___"<<endl;
  17.                 cout<<"___---Creata da xxMarco94 in C++---___"<<endl;
  18.                 cout<<endl<<endl<<"01->Operazione normali";
  19.                 cout<<endl<<"02->Potenze";
  20.                 cout<<endl<<"03->Esci";
  21.                 cout<<endl<<endl<<"Cosa scegli?";cin>>scelta;
  22.  
  23.                 if (scelta==01){
  24.                         cout<<endl<<"Scrivi l'operazione da eseguire:  ";cin>>valore1;cin>>operazione;cin>>valore2;
  25.                         switch(operazione){//Serve per scegliere l'operatore dell'operazione.
  26.                                 case'+':
  27.                                         risultato=valore1+valore2;
  28.                                         cout<<endl<<"Risultato:"<<risultato<<endl<<"Premi un tasto per cancellare.";
  29.                                         system("pause>nul");
  30.                                 break;
  31.                                 case'-':
  32.                                         risultato=valore1-valore2;
  33.                                         cout<<endl<<"Risultato:"<<risultato<<endl<<"Premi un tasto per cancellare.";
  34.                                         system("pause>nul");
  35.                                 break;
  36.                                 case'*':
  37.                                         risultato=valore1*valore2;
  38.                                         cout<<endl<<"Risultato:"<<risultato<<endl<<"Premi un tasto per cancellare.";
  39.                                         system("pause>nul");
  40.                                 break;
  41.                                 case'/':
  42.                                         risultato=valore1/valore2;
  43.                                         cout<<endl<<"Risultato:"<<risultato<<endl<<"Premi un tasto per cancellare.";
  44.                                         system("pause>nul");
  45.                                         break;}
  46.                         }
  47.                 if (scelta==02){
  48.                         cout<<endl<<"Scrivi il numero (a) e la sua potenza(b)(a^b):  ";cin>>valore1;cin>>pow;cin>>valore2;
  49.                         risultato=pow(valore1, valore2);
  50.                         cout<<endl<<"Risultato:  "<<risultato<<endl<<"Premi un tasto per continuare.";
  51.                         system ("pause=nul");
  52.                 }
  53.                 }while(scelta!=03);
  54.         return 0;
  55.         }



POTETE AIUTARMI?

EDIT by HeDo: Il codice va racchiuso tra i tag code

Ultima modifica effettuata da HeDo il 07/02/2010 alle 14:49
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:08
Domenica, 07/02/2010
Beh ... ci sono parecchi errori ...

Gli include devono essere
Codice sorgente - presumibilmente C++

  1. #include <windows.h>
  2. #include <iostream>
  3. #include <cstdlib>
  4. #include <cmath>



Risultato deve essere double, quindi

Codice sorgente - presumibilmente C/C++

  1. double risultato;



Dichiarare pow come char non ha senso ... pow è una funzione di libreria ... quindi

Testo quotato


    char operazione;


    
Fare l'input di pow non ha senso ... devi solamente fare l'input dei valori

Codice sorgente - presumibilmente Plain Text

  1. cin>>valore1;
  2. cin>>valore2;



La funzione opera con i double, quindi devi effettuare un cast

Codice sorgente - presumibilmente Plain Text

  1. risultato=pow((double)valore1, (double)valore2);



E per concludere, dato che scelta è una variabile numerica, puoi scrivere semplicemente

Codice sorgente - presumibilmente C/C++

  1. if (scelta==1){



e così per le altre if ... lo zero in piu' è superfluo ...

Se qualcosa non ti e' chiaro, forse devi studiare un po' di piu' la teoria, prima di scrivere qualsiasi programma ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
xxmarco94 (Normal User)
Rookie


Messaggi: 28
Iscritto: 07/02/2010

Segnala al moderatore
Postato alle 20:57
Domenica, 07/02/2010
ok grazie accetto volentieri il consiglio e grazie per l'aiuto!

PM Quote
Avatar
xxmarco94 (Normal User)
Rookie


Messaggi: 28
Iscritto: 07/02/2010

Segnala al moderatore
Postato alle 21:21
Domenica, 07/02/2010
io ho provato a modificare come mi è stato detto ed il risutato è questo :

Codice sorgente - presumibilmente C++

  1. #include <windows.h>
  2. #include <iostream>
  3. #include <cstdlib>
  4. #include <cmath>
  5. using namespace std;
  6.  
  7. int main(){
  8.         HANDLE hConsole;                                                        //Colora il
  9.         hConsole = GetStdHandle(STD_OUTPUT_HANDLE);     //testo in
  10.         SetConsoleTextAttribute (hConsole, 10);         //verde.
  11.        
  12.         int valore1, valore2, scelta;
  13.         double risultato;
  14.         char operazione;
  15.        
  16.         do {
  17.                 system("cls");//Serve cancellare i numeri ed i risultati.
  18.                 cout<<"       ___---CALCOLATRICE---___"<<endl;
  19.                 cout<<"___---Creata da xxMarco94 in C++---___"<<endl;
  20.                 cout<<endl<<endl<<"01->Operazione normali";
  21.                 cout<<endl<<"02->Potenze";
  22.                 cout<<endl<<"03->Esci";
  23.                 cout<<endl<<endl<<"Cosa scegli?  ";cin>>scelta;
  24.  
  25.                 if (scelta==01){
  26.                         cout<<endl<<"Scrivi l'operazione da eseguire:  ";cin>>valore1;cin>>operazione;cin>>valore2;
  27.                         switch(operazione){//Serve per scegliere l'operatore dell'operazione.
  28.                                 case'+':
  29.                                         risultato=valore1+valore2;
  30.                                         cout<<endl<<"Risultato:  "<<risultato<<endl<<"Premi un tasto per cancellare.";
  31.                                         system("pause>nul");
  32.                                 break;
  33.                                 case'-':
  34.                                         risultato=valore1-valore2;
  35.                                         cout<<endl<<"Risultato:"<<risultato<<endl<<"Premi un tasto per cancellare.";
  36.                                         system("pause>nul");
  37.                                 break;
  38.                                 case'*':
  39.                                         risultato=valore1*valore2;
  40.                                         cout<<endl<<"Risultato:"<<risultato<<endl<<"Premi un tasto per cancellare.";
  41.                                         system("pause>nul");
  42.                                 break;
  43.                                 case'/':
  44.                                         risultato=valore1/valore2;
  45.                                         cout<<endl<<"Risultato:"<<risultato<<endl<<"Premi un tasto per cancellare.";
  46.                                         system("pause>nul");
  47.                                         break;}
  48.                         }
  49.                 if (scelta==02){
  50.                         cout<<endl<<"Scrivi il numero (a) e la sua potenza(b)(a^b):  ";cin >> valore1; cin >> valore2;
  51.                         risultato = pow((double)valore1, (double)valore2);                     
  52.                         cout<<endl<<"Risultato:  "<<risultato<<endl<<"Premi un tasto per cancellare.";
  53.                         system ("pause=nul");
  54.                 }
  55.                 }while(scelta!=03);
  56.         return 0;
  57.         }



però non funziona ancora. Mi sa che questa colcolatrice proprio non si vuole fare

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:52
Domenica, 07/02/2010
Se non dici esattamente qual è il problema ...



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
xxmarco94 (Normal User)
Rookie


Messaggi: 28
Iscritto: 07/02/2010

Segnala al moderatore
Postato alle 22:58
Domenica, 07/02/2010
non c'è più nessun problema sono riuscito a risolvere e una volta risolte le potenze sopno anche riuscito a mettere le radici
cmq grazie dell'interessamento e dell'aiuto!

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 1:23
Lunedì, 08/02/2010
Meglio cosi' ... ciao


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 11:46
Lunedì, 08/02/2010
Testo quotato

Postato originariamente da nessuno:

[...]

e così per le altre if ... lo zero in piu' è superfluo ...



Lo 0 in più non è superfluo, ma peggio! E' un errore abbastanza subdolo!
in C, e di riflesso anche in C++, una costante numerica preceduta da 0 (zero) è considerata come espressa in base ottale.
Quindi

Codice sorgente - presumibilmente C/C++

  1. if (scelta == 010)


differisce, e anche di molto, da:
Codice sorgente - presumibilmente C/C++

  1. if (scelta == 10)


Nel primo caso intendiamo il valore numerico 8 espresso in base ottale, nel secondo caso il valore numerico 10 espresso in base decimale.

Achtung!

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:50
Lunedì, 08/02/2010
Testo quotato

Postato originariamente da TheKaneB:
Lo 0 in più non è superfluo, ma peggio! E' un errore abbastanza subdolo!



Se ne sarebbe accorto il compilatore appena avesse scritto 07 oppure 08, 09 ... per quelli precedenti non c'è problema ... ma, in generale, la tua osservazione è corretta.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote