DELPHI - TEDIT COM EXPRESSÃO MATEMATICA

Delphi

17/04/2015

Como faço para calcular uma expressão matematica carregado num edit?
Por exemplo:
Tenho um Edit1.Text = 0+50*1-60-60*0+10
Defino uma variável s : integer;
Quando tento carregar a varável s com o resultado da edit diz que a expressão não é um inteiro válido.

s := StrToInt(Edit1.Text) - aqui dá o erro.

Como resolver?

Obrigado.
Clovis Perazza

Clovis Perazza

Curtidas 0

Melhor post

Lucas Ramos

Lucas Ramos

18/04/2015

Bom Dia

Se for expressão simples assim, você terá que ir quebrando a string exemplo: Valor Operador Valor Operador Valor, e fazer uma lógica onde verifica quais deve ser calculados primeiro, no caso do seu exemplo a multiplicação, qual a necessidade desse tipo de cálculo?

Essa função para calcular Expressão por expressão, agora tem que ver a lógica para qual vai calcular primeiro.
function CalculaValor(pValor1: extended; pValor2: Extended; pOperador: string): Extended;
var
        lRetorno: Extended;
begin
         if(pOperador = '+') then
           lRetorno := pValor1 + pValor2;
   
         if(pOperador = '-') then
           lRetorno := pValor1 - pValor2;

         if(pOperador = '*') then
           lRetorno := pValor1 * pValor2;

         if(pOperador = '/') then
           lRetorno := pValor1 / pValor2;

         result := lRetorno;
end;
GOSTEI 1

Mais Respostas

William

William

17/04/2015


Tenho um Edit1.Text = 0+50*1-60-60*0+10

s := StrToInt(Edit1.Text) - aqui dá o erro.


Só complementando a excelente resposta do colega Lucas em relação ao erro!

Esses caracteres (*, -, +) são considerados strings, então quando você usa a função StrToInt() ela vai tentar converter números dentro da string em inteiros, mas como mencionei os caracteres que você usa para operações matemáticas são lidos como string por isso gera o erro.

O ideal seria você quebrar em operações menores mesmo.
GOSTEI 1
Clovis Perazza

Clovis Perazza

17/04/2015

Obrigado ao Lucas e ao William pela colaboração.
Valeu amigos.
GOSTEI 0
Elison Faria

Elison Faria

17/04/2015

um pequeno ajuste, se for (10) - (-5) == 15 então colocando o abs antes 10 - abs(-5) => 10 - 5 = 5
mas se vc não precisar desta regra, use sem o abs

function CalculaValor(pValor1: extended; pValor2: Extended; pOperador: string): Extended;
var
lRetorno: Extended;
begin
if(pOperador = '+') then
lRetorno := pValor1 + pValor2;

if(pOperador = '-') then
lRetorno := pValor1 - abs(pValor2); // se o valor for negativo vira positivo, o abs resolve este problema

if(pOperador = '*') then
lRetorno := pValor1 * pValor2;

if(pOperador = '/') then
lRetorno := pValor1 / pValor2;

result := lRetorno;
end;
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

17/04/2015

utilize um expression parser. há vários. segue um exemplo (gratuito e com fonte):

http://www.sparcs-center.org/expression-parser



GOSTEI 0
POSTAR