Oppure

Loading
30/08/09 11:21
jaco94++
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
aaa
30/08/09 11:48
ingMark
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
it.wikipedia.org/wiki/…
aaa
30/08/09 12:08
jaco94++
è interessante però non conosci un modo per fare tt normalmente invece di mettere alla fine i segni matematici ?
aaa
30/08/09 12:46
giuseppe93
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:
aaa
30/08/09 12:59
jaco94++
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:
aaa
30/08/09 13:09
ingMark
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:
aaa
30/08/09 13:13
giuseppe93
allora prova a fare così:
char *espressione,num[10];
int a=0,somma=0;
num[a] = strtok(espressione, "+");  //separo la var espressione in altre stringhe
while(num[a]!=NULL){                //dando come deliminatore il simbolo +
                        a++;
                        num[a]=strtok(NULL,"/0");
                        }
for(int i=0;i<=a;i++) somma+=atoi(num[i]); //la funzione atoi traforma una stringa in 
                                           //numero se possibile
      


per la funzione atoi devi includere stdlib mi sembra invece per strtok string.h :D
Ultima modifica effettuata da giuseppe93 30/08/09 13:16
aaa
30/08/09 17:52
gigisoft
Postato originariamente da giuseppe93:

allora prova a fare così:
char *espressione,num[10];
int a=0,somma=0;
num[a] = strtok(espressione, "+");  //separo la var espressione in altre stringhe
while(num[a]!=NULL){                //dando come deliminatore il simbolo +
                        a++;
                        num[a]=strtok(NULL,"/0");
                        }
for(int i=0;i<=a;i++) somma+=atoi(num[i]); //la funzione atoi traforma una stringa in 
                                           //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

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'

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


Ciao. :k:

Luigi.
aaa