jaco94++ (Normal User)
Expert
Messaggi: 203
Iscritto: 22/10/2008
|
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
|
|
ingMark (Ex-Member)
Pro
Messaggi: 176
Iscritto: 19/07/2009
|
|
|
jaco94++ (Normal User)
Expert
Messaggi: 203
Iscritto: 22/10/2008
|
è interessante però non conosci un modo per fare tt normalmente invece di mettere alla fine i segni matematici ?
|
|
giuseppe93 (Ex-Member)
Pro
Messaggi: 166
Iscritto: 02/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?
|
|
jaco94++ (Normal User)
Expert
Messaggi: 203
Iscritto: 22/10/2008
|
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
|
|
ingMark (Ex-Member)
Pro
Messaggi: 176
Iscritto: 19/07/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
cmq con la polacca inversa non devi stampare i segni al fondo (se è quello che intendevi), stampi solo il risultato finale
|
|
giuseppe93 (Ex-Member)
Pro
Messaggi: 166
Iscritto: 02/08/2009
|
allora prova a fare così:
Codice sorgente - presumibilmente C# |
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
Ultima modifica effettuata da giuseppe93 il 30/08/2009 alle 15:16 |
|
gigisoft (Member)
Guru
Messaggi: 696
Iscritto: 11/10/2008
|
Postato originariamente da giuseppe93:
allora prova a fare così:
Codice sorgente - presumibilmente C# |
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 |
salve,
il codice e' interessante, ma c'e' un piccolo errore, con l'istruzione
Codice sorgente - presumibilmente Plain Text |
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 |
for(int i = 0, j = 10 * a; i <= a; i++, j /= 10) somma+=atoi(num[i]) * j;
|
Ciao.
Luigi. |
|
jaco94++ (Normal User)
Expert
Messaggi: 203
Iscritto: 22/10/2008
|
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 *'
|
|