PortailAccueilFAQRechercherCalendrierS'enregistrerMembresGroupesConnexion

Partagez | 
 

 EVALUATION D'EXPRESSION MATHÉMATIQUE SIMPLE

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Admin
Admin
avatar

Masculin
Nombre de messages : 138
Age : 30
Date d'inscription : 02/09/2006

MessageSujet: EVALUATION D'EXPRESSION MATHÉMATIQUE SIMPLE   Mer 13 Sep - 6:01

Evaluation d'expression mathématique simple :
- les 4 opérateurs sont gérés, ainsi que le - unaire
- les paranthèses ne sont pas gérer
- l'expession fait au plus 200 caractères (mais ça peut se changer)
- seul des entiers tenant sur maximum 32bits sont gérés

Le programme n'a pas beaucoup d'intérêt en soit, mais l'algorithme peut en avoir.
Ex d'expression : -2*-4+3-14565/5+4*3 etc ....


Code:
#include <iostream>
#include <cstring>
 
using namespace std;
 
void chang_opmu (char*); // Change les signes - unaire par un 'n' pour ne pas les confondres avec les - binaire (de soustraction)
int eval (char*); // Evalue l'expression passée en paramètre
int str_to_int (char*); // Convertie un nombre sous forme chaînée, en type int ( "123"(str) -> 123(int) )
 
int main() {
    char expr[201];
    cin >> expr;
    chang_opmu(expr);
    cout << eval(expr);
   
    return 0;
}
 
void chang_opmu (char* str) {
    if (str[0] == '-') str[0]='n';
    for (int i=1; i<255; i++)
        if ( (str[i] == '-') && (!isdigit(str[i-1])) ) str[i]='n';
}
 
int eval (char *str) {
    char* p=NULL;
    int total = 0;
    char *a=strrchr(str, '+'), *b=strrchr(str, '-'), *c=strrchr(str, '*'), *d=strrchr(str, '/'); // Pour éviter d'appeller plusieurs fois les mêmes fonctions
    if (a || b) {
        p = (a>b)?a:b;
        if (*p=='+') {
            *p = '\0';
            total = eval(str);
            total += eval(++p);
        }
        else if (*p=='-') {
            *p = '\0';
            total = eval(str);
            total -= eval(++p);
        }
        return total;
    }
    else if (c || d) {
        p = (c>d)?c:d;
        if (*p=='*') {
            *p = '\0';
            total = eval(str);
            total *= eval(++p);
        }
        else if (*p=='/') {
            *p = '\0';
            total = eval(str);
            total /= eval(++p);
        }
        return total;
    }
    else return str_to_int(str);
}
 
int str_to_int (char* str) {
    int total=0;
    int i = (str[0]=='n')?1:0;
    while (('0' <= str[i]) && (str[i] <= '9')) {
        total *= 10;
        total += (int(str[i]) -48);
        i++;
    }
    if (str[0]=='n') return -total;
    else return total;
}
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://design.jeun.fr
 
EVALUATION D'EXPRESSION MATHÉMATIQUE SIMPLE
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» formule mathématique
» [Résolu] Qui pourrais trouver la reponse
» carte zonée
» Une grande énigme mathématique...
» Démonstration n°1 de TOONIC: un simple paysage

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
DESIGN STUDIO FORUM :: programmation :: C,C++-
Sauter vers: