Les Snippets

Connexion

EVALUATEUR D'EXPRESSION AVEC VARIABLES

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 11/09/2011 21:25:56 et initié par blueperfect [Liste]
Date de mise à jour : 12/09/2011 08:57:57
Vue : 1353
Catégorie(s) : Maths, Algorithme, Divers
Langages dispo pour ce code :
- Delphi 5



Langage : Delphi 5
Date ajout : 11/09/2011
Posté par blueperfect [Liste]
DateMAJ : 12/09/2011
  • type TLogical = type Boolean;
  • TText = type AnsiString;
  • TVariable = type Variant;
  • class function WhatIsEvaluate(const _value:TText; _variables:TStrings; const _dot:Char):TVariable;
  • var _actual:Char;
  • _calculate:TText;
  • _cursor:Integer;
  • procedure _PleaseSkip;
  • begin
  • if _cursor > System.Length(_calculate)
  • then _actual := #9
  • else begin
  • _actual := _calculate[_cursor];
  • System.Inc(_cursor);
  • end;
  • if _actual = ' '
  • then _PleaseSkip;
  • end;
  • function _ReplaceVariables(const _value:TText; _variables:TStrings):TText;
  • var _cursor:Integer;
  • _error:TLogical;
  • _ok:TLogical;
  • _replace:TText;
  • _start:Integer;
  • _stop:Integer;
  • _text:TText;
  • _variable:TText;
  • begin
  • _error := System.False;
  • _ok := System.False;
  • _text := SysUtils.Trim(_value);
  • while not(_error)
  • and not(_ok)
  • do begin
  • _start := 1;
  • while (_start <= System.Length(_text))
  • and not(_text[_start] in ['a'..'z', 'A'..'Z'])
  • do System.Inc(_start);
  • if _start <= System.Length(_text)
  • then begin
  • _stop := _start;
  • _variable := '';
  • while (_stop <= System.Length(_text))
  • and (_text[_stop] in ['a'..'z', 'A'..'Z'])
  • do begin
  • _variable := _variable + _text[_stop];
  • System.Inc(_stop);
  • end;
  • if System.Length(_variable) > Math.ZeroValue
  • then begin
  • _cursor := _variables.IndexOfName(_variable);
  • if _cursor = -1
  • then begin
  • System.Insert('?', _text, _stop);
  • _error := System.True;
  • end
  • else begin
  • System.Delete(_text, _start, System.Length(_variable));
  • System.Insert(_variables.ValueFromIndex[_cursor], _text, _start);
  • end;
  • end;
  • end
  • else _ok := System.True;
  • end;
  • Result := _text;
  • end;
  • function _WhatIsCalculate:TVariable;
  • var _result:TVariable;
  • function _WhatIsFactor:TVariable;
  • var _text:TText;
  • begin
  • _PleaseSkip;
  • if _actual in ['0'..'9']
  • then begin
  • _text := '';
  • repeat
  • _text := _text + _actual;
  • _PleaseSkip;
  • until not(_actual in ['0'..'9']) and (_actual <> _dot);
  • Result := SysUtils.StrToFloat(_text);
  • end
  • else
  • if _actual = '('
  • then begin
  • Result := _WhatIsCalculate;
  • _PleaseSkip;
  • end
  • else
  • if _actual = '+' then Result := +Result
  • else
  • if _actual = '-' then Result := -Result;
  • end;
  • function _WhatIsSubResult:TVariable;
  • var _result:TVariable;
  • begin
  • _result := _WhatIsFactor;
  • while _actual in ['*', '/']
  • do if _actual = '*'
  • then _result := _result * _WhatIsFactor
  • else _result := _result / _WhatIsFactor;
  • Result := _result;
  • end;
  • begin
  • _result := _WhatIsSubResult;
  • while _actual in ['+', '-']
  • do if _actual = '+'
  • then _result := _result + _WhatIsSubResult
  • else _result := _result - _WhatIsSubResult;
  • Result := _result;
  • end;
  • begin
  • _cursor := 1;
  • _calculate := SysUtils.Trim(_value);
  • if System.Assigned(_variables)
  • then _calculate := _ReplaceVariables(_calculate, _variables);
  • Result := SYsUtils.FloatToStr(_WhatIsCalculate);
  • end;
  • Remarque :
    Un autre code trouvé sur le net.

    J'ai seulement intégré le remplacement des variables depuis une TStringList sous la forme :

    PI=3.14159

    A venir, l'intégration de fonctions de base...

    Snippets en rapport avec : Expression, Delphi, Calculs



    Codes sources en rapport avec : Expression, Delphi, Calculs

    {Delphi} RUBIK'S CUBE AVEC FIREMONKEY 3D
    Le but de ce programme a été pour moi de travailler avec la partie 3D de Firemonkey et d'une certain...

    {C / C++ / C++.NET} EVALUATEUR D'EXPRESSION ARITHMÉTIQUE
    Je suis nouveau en programmation, cette application a été conçu dans le cadre d'un projet de fin d'a...

    {Visual Basic, VB6, VB.NET, VB 2005} SOMME DE CHIFFRES CONTENUE DANS UN NOMBRE
    Ce petit programme en VB 2008 Express permet de donner la somme des chiffres constituée par un nomb...

    {Delphi} FIREMONKEY : PATHDATA ET FORMAT SVG
    Troisième approche de FireMonkey avec l'animation d'objets sur des "chemins" au format SVG. Des bas...

    {Delphi} FIREMONKEY : ROTATION CUBE
    Seconde approche de FireMonkey avec Tutoriel en PDF. Ici je mixe les composants 2D et 3D en faisant...

    {Delphi} MOTEUR PHYSIQUE 2D CHIPMUNK.. EN DELPHI!
    Bonjour, en fouillant dans mes archives j'ai retrouvé ce code écrit il y a pas mal de temps (il y a...

    {C / C++ / C++.NET} ÉVALUATEUR D'EXPRESSIONS BOOLÉENNES (BEE)
    BEE(Boolean Expression Evaluator) permet d'évaluer des expressions booléennes. Les opérateurs...

    {JAVA / J2EE} CALCULATRICE AVEC PARSEUR D'EXPRESSION MATHÉMATIQUE
    Cette calculatrice utilise un parseur d'expression mathématique. L'expression en dans un premier tem...

    {Visual Basic, VB6, VB.NET, VB 2005} EVALUER UNE EXPRESSION MATHֹMATIQUE
    Comme je n'ai rien trouvé en net j'ai écrit une petite application pour évaluer une expression math...

    {Delphi} FICHIER DUPLIQUÉ AVEC UNE TABLE DE HACHAGE
    Ce petit programme permet de rechercher des fichiers dupliqués à l'aide d'une table de hachage, les ...