Calculatrice à reconnaissance de caractères

Description

Voici une calculatrice un peu spéciale, elle analyse une expression (par exemple "2+2" dans un tableau et la découpe pour pouvoir la calculer...

Source / Exemple :


#include <stdio.h>
#include <windows.h> // juste pour system()

#define LEN 256

// fonction qui vérifie la présence d'un opérateur dans un tableau
char check_op(char buff[LEN]){
    char op;
    int i, x=0;
    for(i=0; buff[i] != '\0'; i++){
        switch(buff[i]){
            case '+':
                op = '+';
                x++;
                break;
            case '-':
                op = '-';
                x++;
                break;
            case '/':
                op = '/';
                x++;
                break;
            case '*':
                op = '*';
                x++;
                break;
        }
    }
    if(x > 1){
        printf("Expression non valide !\n");
        system("pause");
        exit(1);
    }
    else
        return op;
}

/*
    fonction qui extraie les opérandes d'une expression
    nb : numéro de l'opérande à renvoyer (1 ou 2)
    op : caractère de l'opérateur (+-/*)

  • /
int oper(int nb, char buff[LEN], char op){ int i, x=0; int oper1=0, oper2=0; char tmp1[LEN]; char tmp2[LEN]; memset(tmp2,NULL,sizeof(tmp2)); for(i=0; buff[i] != op; i++){ sprintf(tmp1, "%c", buff[i]); strcat(tmp2, tmp1); } oper1 = atoi(tmp2); //atoi() convertit char en int memset(tmp2,NULL,sizeof(tmp2)); for(i+=1; buff[i] != '\0'; i++){ sprintf(tmp1, "%c", buff[i]); strcat(tmp2, tmp1); } oper2 = atoi(tmp2); memset(tmp2,NULL,sizeof(tmp2)); if(nb == 1) return oper1; if(nb == 2) return oper2; else { system("pause"); exit(1); } } // fonction qui effectue l'opération entre 2 opérandes et 1 opérateur int calcul(int oper1, int oper2, char op){ int result = 0; switch(op){ case '+': result = oper1 + oper2; break; case '-': result = oper1 - oper2; break; case '/': result = oper1 / oper2; break; case '*': result = oper1 * oper2; break; default: printf("Opérateur non valide"); exit(1); } return result; } // fonction principale de gestion des fonctions int main(){ // déclaration des 5 variables utilisées pour découper l'expression char op; int oper1, oper2, result; char expression[LEN]; // on check l'expression printf("Entrez une expression :\n"); scanf("%s", &expression); // on l'analyse printf("Analyse de l'expression : "); op = check_op(expression); oper1 = oper(1, expression, op); oper2 = oper(2, expression, op); // on calcule le résultat et on l'affiche si la syntaxe est ok result = calcul(oper1, oper2, op); printf("Ok !\n"); printf("Resultat : %d\n\n", result); system("pause"); return 0; }

Conclusion :


Pour l'instant, seule 2 opérandes sont gérée et seulement les entiers sont pris en compte.
Désolé pour ces détails, j'ai écris ça en 30 min et ça ne demande qu'à etre amélioré par la suite :)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.