(97+25)*(14/2+0.98)
Veremos que a partir da criação de uma rotina fixa através de uma function será possível executar toda esta expressão de uma única vez. No Delphi crie uma nova aplicação, altere o caption do formulário principal para "Resolvendo Expressões Matemáticas" e salva os arquivos em um diretório do seu computador. Arraste ao formulário dois componentes Label alterando suas propriedade caption para "Expressão Matemática" e "Dígitos após a vírgula". Arraste também dois componentes Edit (edtExpressao, edtDigitos) e remova o texto presente na propriedade Text. Por último adicione também um Button alterando o caption para "Resolver Expressão".
Acessando o código do formulário, declare na seção private a seguinte function, que será a responsável por resolver a expressão:
function CalculaExpressao(expressao: string; digitos: Byte): string;
Utilizando as teclas de atalho Shift + Ctrl + C crie a implementação para a função onde deverá incluir a seguinte codificação:
function TForm1.CalculaExpressao(expressao: string; digitos: Byte): string;
// Calculo de expressoes matematicas simples
// Suporta numeros inteiros, numeros reais, parenteses
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(expressao) then
begin
z := #9;
Exit;
end
else
begin
s := Copy(expressao, 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, digitos);
end;
Nesta codificação, a função recebe a expressão por completa e vai verificando a prioridade das operações de sinais a serem executadas bem como resolvendo parenteses e cálculos até que o resultado final seja obtido. A quantidade de dígitos após a virgula também pode ser controlada passando o valor como parâmetro para a função. Para utilizar a função, adicione ao evento OnClick do botão o seguinte código responsável por passar a expressão e quantidade de digitos informados nos campos Edit e retornar o resultado através de uma mensagem na tela do usuário.

A partir deste post, faça a implementação da rotina em seus sistemas ou implemente novos recursos. Abraço e até a próxima.