(1+1)+(2+2)=
voglio creare un programma che mi risolva questa semplice espressione,ma non so' come fare....................per favore aiutatemi....................................
(1+1)+(2+2)=
voglio creare un programma che mi risolva questa semplice espressione,ma non so' come fare....................per favore aiutatemi....................................
E SE TUTTO FOSSE SOLO UN RIFLESSO?
inanzitutto fai una ricerca qui sul forum, se ne è parlato già più di una volta, l'ultima proprio ultimamente...cerca tipo "calcolatrice".
Ciao![]()
Windows Xp
[Java]
[PHP]Notepad++
[Fortran90-77]elf90 g77
[C++ /WinAPI] DevC++ VisualC++
nella discussione che mi hai indicato si parla di somme algebriche e io invece devo eseguire una semplice espressione.
se qualcuno mi potrebbe postare un'esempio..................
E SE TUTTO FOSSE SOLO UN RIFLESSO?
Temo non sia così semplice... finche si tratta di una semplice somma la puoi gestire come nel thread che ti è stato consigliato.
Se invece vuoi proprio un lettore di espressioni il discorso si fa molto + complicato... devi creare un parser per "smontare" le stringhe con l'espressioni.
Ti ripeto che più volte se ne è parlato, ricordo anche di aver aiutato qualcuno qui sul forum che stava a buon punto, la sua "calcolatrice" valutava espressioni con somme,prodotti,logaritmi,radici,parentesi,...ecc.Originariamente inviato da apatico
nella discussione che mi hai indicato si parla di somme algebriche e io invece devo eseguire una semplice espressione.
se qualcuno mi potrebbe postare un'esempio..................
Ora vedo se ritrovo il 3D.
![]()
Windows Xp
[Java]
[PHP]Notepad++
[Fortran90-77]elf90 g77
[C++ /WinAPI] DevC++ VisualC++
peerchè è cosi difficile?in fondo bisogna solamente dire al computer che di calcolare solo il risultato messo fra parentesi......................
E SE TUTTO FOSSE SOLO UN RIFLESSO?
codice:/* eval_expr.symbol */ int Plus(int a,int b) { return (a+b); } int Minus(int a,int b) { return (a-b); } int Divide(int a,int b) { return (a/b); } int Multiply(int a,int b) { return (a*b); } int Modulus(int a,int b) { return (a%b); } typedef struct _operand { char symbol; int preced; int (*funct)(); } Operand; Operand operand [] = { {'+',1,Plus}, {'-',1,Minus}, {'/',2,Divide}, {'*',2,Multiply}, {'%',2,Modulus}, {0,0,0} }; int FindLastOp(char *str,int preced) { int pos,i,numParent,retValue; //valore di ritorno retValue = -2; //stato bilanciamento parentesi numParent = 0; //partiamo da fine stringa pos = strlen(str)-1; //per ogni carattere str[pos] //fino ad arrivare all'inizio dell'espressione while (pos>=0) { //teniamo conto delle parentesi incontrate if (str[pos] == ')') numParent ++; if (str[pos] == '(') numParent --; i = 0; //per tutti gli operatori definiti e finchè le //parentesi non sono bilanciate while (!numParent && operand[i].symbol) { //se il carattere corrente è un'operatore if (operand[i].symbol == str[pos]) { retValue = -1; if (operand[i].preced == preced) return (pos); } //prossimo operatore i++; } //carattere successivo (o meglio precedente) pos--; } return (retValue); } int is_nb(char *str) { if ( *str == '(' ) { str[strlen(str)-1] = 0; return (eval_expr_sub(str+1,0)); } return (atoi(str)); } int eval_expr_sub(char *str,int preced) { int pos; char save; int nb2; if ((pos = FindLastOp(str,preced))==-1) return (eval_expr_sub(str,preced+1)); if (pos==-2) return (is_nb(str)); nb2 = eval_expr_sub(str+pos+1,preced+1); save = str[pos]; str[pos] = 0; pos = 0; while (operand[pos].symbol) { if (save==operand[pos].symbol) return (operand[pos].funct(eval_expr_sub(str,preced),nb2)); pos ++; } printf("PB !!!\n"); return (0); } int eval_expr(char *str) { return (eval_expr_sub(str, 0)); } #include "eval_expr.c" int main(int ac,char **av) { if (ac>1) { printf("%d\n", eval_expr(av[1])); } getchar(); }
Il centro dell'attenzione non è sempre un buon posto in cui trovarsi
Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)
3+88 se le espressioni sono tutte così è sempliceOriginariamente inviato da apatico
peerchè è cosi difficile?in fondo bisogna solamente dire al computer che di calcolare solo il risultato messo fra parentesi......................
(3+(3*22))-55/(3+22) è molto + difficile e come divevo richiede un parser
Non ti voglio scoragiareè solo che se le espresioni possono variare ci vuole abbastanza codice per gestire i vari casi
Come ti hanno già detto non è una cosa così semplice, e se ne è parlato già varie volte.
In C guarda qui e qui. C'è la versione semplice di base alla quale ci siamo rifatti io e unomichisiada, (che però l'ha resa più esplicativa, quindi studia questa sua, che ti ha già postato), c'è anche la mia versione (incompleta) che implementa funzioni.
Ma visto che lo vuoi in C++, qua ti indirizzano sulla strada OOP:
http://forum.html.it/forum/showthrea...ghlight=parser
E qui sembra che abbiano fatto qualcosa (in java):
http://forum.html.it/forum/showthrea...ghlight=parser
Alla fine ho fatto io la ricerca al posto tuo!
![]()
Summum crede nefas animam preferre pudori e propter vitam vivendi perdere causas.
(Giovenale)
unomichisiada come dovrò impostare i cout nel codice???
SnakePlissken sono programmi in java che avevo già visto,io voglio un esempio da studiare in c++.
E SE TUTTO FOSSE SOLO UN RIFLESSO?