![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Вычисление простых арифметических выраженийDelphi , Синтаксис , МатематикаВычисление простых арифметических выражений
Оформил: DeeCo function Calculate(SMyExpression: string; digits: Byte): string; // Calculate a simple expression // Supported are: Real Numbers, parenthesis var z: Char; ipos: Integer; function StrToReal(chaine: string): Real; var r: Real; Pos: Integer; begin Val(chaine, r, Pos); if Pos > 0 then Val(Copy(chaine, 1, Pos - 1), r, Pos); Result := r; end; function RealToStr(inreal: Extended; digits: Byte): string; var S: string; begin Str(inreal: 0: digits, S); realToStr := S; end; procedure NextChar; var s: string; begin if ipos > Length(SMyExpression) then begin z := #9; Exit; end else begin s := Copy(SMyExpression, ipos, 1); z := s[1]; Inc(ipos); end; if z = ' ' then nextchar; end; function Expression: Real; var w: Real; function Factor: Real; var ws: string; begin Nextchar; if z in ['0'..'9'] then begin ws := ''; repeat ws := ws + z; nextchar until not (z in ['0'..'9', '.']); Factor := StrToReal(ws); end else if z = '(' then begin Factor := Expression; nextchar end else if z = '+' then Factor := +Factor else if Z = '-' then Factor := -Factor; end; function Term: Real; var W: Real; begin W := Factor; while Z in ['*', '/'] do if z = '*' then w := w * Factor else w := w / Factor; Term := w; end; begin w := term; while z in ['+', '-'] do if z = '+' then w := w + term else w := w - term; Expression := w; end; begin ipos := 1; Result := RealToStr(Expression, digits); end; procedure TForm1.Button1Click(Sender: TObject); var sMyExpression: string; begin sMyExpression := '12.5*6+18/3.2+2*(5-6.23)'; ShowMessage(sMyExpression + ' = ' + Calculate(sMyExpression, 3)); end; Привет! Я переведу контент на русский язык. Функция Delphi, написанная на Паскале, вычисляет простые арифметические выражения. Функция принимает два параметра: Разбивка на шаги:
Обратите внимание:
Альтернативные решения:
В статье описывается функция для вычисления простых арифметических выражений, которая может обрабатывать реальные числа, скобки и операции сложения, вычитания, умножения и деления. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Математика ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |