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++ - calcolo in c++
Forum - C/C++ - calcolo in c++

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
jaco94++ (Normal User)
Expert


Messaggi: 203
Iscritto: 22/10/2008

Segnala al moderatore
Postato alle 13:21
Domenica, 30/08/2009
ciao a tt

sto scrivendo una specie di prompt dei comandi in c++ ecco il problema e che volevo inserire una specie di supporto per i calcoli matematici di base tipo 1+2 2*3 ecc il problema e che nn voglio che l'utente ogni volta seleziona prima il segno come in una calcolatrice ma vorrei che scrivendo 1+2 o 2*3 (come fosse un normalissimo comando) il programma capisca da solo che deve o sommare o altro i due numeri e mi restituisca il risultato

spero di essere stato abbastanza chiaro

grz a tt

PM Quote
Avatar
ingMark (Ex-Member)
Pro


Messaggi: 176
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 13:48
Domenica, 30/08/2009
potresti usare la notazione polacca inversa.
E' molto facile da realizzare con uno stack e una coda.

se non sai come realizzare l'algoritmo, qua c'è tutto quello che ti serve :D
http://it.wikipedia.org/wiki/Notazione_polacca_inversa

PM Quote
Avatar
jaco94++ (Normal User)
Expert


Messaggi: 203
Iscritto: 22/10/2008

Segnala al moderatore
Postato alle 14:08
Domenica, 30/08/2009
è interessante però non conosci un modo per fare tt normalmente invece di mettere alla fine i segni matematici ?

PM Quote
Avatar
giuseppe93 (Ex-Member)
Pro


Messaggi: 166
Iscritto: 02/08/2009

Segnala al moderatore
Postato alle 14:46
Domenica, 30/08/2009
potresti prendere l'espressione come una stringa. poi controlli ogni carattere e se trovi '+' allore trasformi i pezzi prima e dopo il '+' in numer e li sommi. fai lo stesso procedimento per '/','-','*' ecc...  capito?:heehee:

PM Quote
Avatar
jaco94++ (Normal User)
Expert


Messaggi: 203
Iscritto: 22/10/2008

Segnala al moderatore
Postato alle 14:59
Domenica, 30/08/2009
si ho capito ma il problema e proprio quello non so come fare a controllare ogni singolo carattere e poi trasformare quello che c'è prima e quello che c'è dopo in numero :rotfl::rotfl:

PM Quote
Avatar
ingMark (Ex-Member)
Pro


Messaggi: 176
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 15:09
Domenica, 30/08/2009
il problema risolvibile con la notazione polacca inversa è quello di non doversi preoccupare della precedenza degli operatori.

se l'utente scrivesse  2 + 1 * 3 il risultato sarebbe 9 e non 5 come uno si aspetterebbe :D
cmq con la polacca inversa non devi stampare i segni al fondo (se è quello che intendevi), stampi solo il risultato finale :k:

PM Quote
Avatar
giuseppe93 (Ex-Member)
Pro


Messaggi: 166
Iscritto: 02/08/2009

Segnala al moderatore
Postato alle 15:13
Domenica, 30/08/2009
allora prova a fare così:
Codice sorgente - presumibilmente C#

  1. char *espressione,num[10];
  2. int a=0,somma=0;
  3. num[a] = strtok(espressione, "+");  //separo la var espressione in altre stringhe
  4. while(num[a]!=NULL){                //dando come deliminatore il simbolo +
  5.                         a++;
  6.                         num[a]=strtok(NULL,"/0");
  7.                         }
  8. for(int i=0;i<=a;i++) somma+=atoi(num[i]); //la funzione atoi traforma una stringa in
  9.                                            //numero se possibile



per la funzione atoi devi includere stdlib mi sembra invece per strtok string.h  :D

Ultima modifica effettuata da giuseppe93 il 30/08/2009 alle 15:16
PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 19:52
Domenica, 30/08/2009
Testo quotato

Postato originariamente da giuseppe93:

allora prova a fare così:
Codice sorgente - presumibilmente C#

  1. char *espressione,num[10];
  2. int a=0,somma=0;
  3. num[a] = strtok(espressione, "+");  //separo la var espressione in altre stringhe
  4. while(num[a]!=NULL){                //dando come deliminatore il simbolo +
  5.                         a++;
  6.                         num[a]=strtok(NULL,"/0");
  7.                         }
  8. for(int i=0;i<=a;i++) somma+=atoi(num[i]); //la funzione atoi traforma una stringa in
  9.                                            //numero se possibile



per la funzione atoi devi includere stdlib mi sembra invece per strtok string.h  :D



salve,
il codice e' interessante, ma c'e' un piccolo errore, con l'istruzione

Codice sorgente - presumibilmente Plain Text

  1. for(int i=0;i<=a;i++) somma+=atoi(num[i]);



fai la somma delle cifre lette, e non e' quello che volevi fare, vero?
L'istruzione corretta e'

Codice sorgente - presumibilmente Plain Text

  1. for(int i = 0, j = 10 * a; i <= a; i++, j /= 10) somma+=atoi(num[i]) * j;



Ciao. :k:

Luigi.

PM Quote
Avatar
jaco94++ (Normal User)
Expert


Messaggi: 203
Iscritto: 22/10/2008

Segnala al moderatore
Postato alle 10:54
Lunedì, 31/08/2009
il mio simpaticissimo compilatore quando cerco di compilare mi da 3  errori :
Errore    1    error C2440: '=': impossibile convertire da 'char *' a 'char'    
Errore    2    error C2440: '=': impossibile convertire da 'char *' a 'char'        
Errore    3    error C2664: 'atoi': impossibile convertire il parametro 1 da 'char' a 'const char *'    

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo