DESIGN STUDIO FORUM
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.



 
PortailAccueilRechercherDernières imagesS'enregistrerConnexion
-50%
Le deal à ne pas rater :
-50% sur les sacs à dos pour ordinateur portable Urban Factory ...
19.99 € 39.99 €
Voir le deal

 

 EVALUATION D'EXPRESSION MATHÉMATIQUE SIMPLE

Aller en bas 
AuteurMessage
Admin
Admin
Admin


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

EVALUATION D'EXPRESSION MATHÉMATIQUE SIMPLE Empty
MessageSujet: EVALUATION D'EXPRESSION MATHÉMATIQUE SIMPLE   EVALUATION D'EXPRESSION MATHÉMATIQUE SIMPLE EmptyMer 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
https://design.jeun.fr
 
EVALUATION D'EXPRESSION MATHÉMATIQUE SIMPLE
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
DESIGN STUDIO FORUM :: programmation :: C,C++-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser