como converter ?
Tenho uma dúvia, se tenho
Var
a,b,c:real;
Begin
a:= strtofloat(edit1.text);
b:= strtofloat(edit2.text);
c:= a+b
Aí funciona direitinho, no caso acima temos uma adição, más suponhamos que eu queira determinar o tipo de calculo, soma, subtração, divisão ou multiplicação através de um edit , alguém já fez isto ? tipo
Var
a,b,c:real;
Begin
a:= strtofloat(edit1.text);
b:= strtofloat(edit2.text);
c:= a ´edit3.text´ b
más este aí num funciona se alguém tiver um palpite, agradeço...t+
Var
a,b,c:real;
Begin
a:= strtofloat(edit1.text);
b:= strtofloat(edit2.text);
c:= a+b
Aí funciona direitinho, no caso acima temos uma adição, más suponhamos que eu queira determinar o tipo de calculo, soma, subtração, divisão ou multiplicação através de um edit , alguém já fez isto ? tipo
Var
a,b,c:real;
Begin
a:= strtofloat(edit1.text);
b:= strtofloat(edit2.text);
c:= a ´edit3.text´ b
más este aí num funciona se alguém tiver um palpite, agradeço...t+
Gigatel
Curtidas 0
Respostas
Marco Salles
24/05/2005
Var
a,b,c:real;
Begin
a:= strtofloat(edit1.text);
b:= strtofloat(edit2.text);
c:= a ´edit3.text´ b
más este aí num funciona se alguém tiver um palpite, agradeço...t+
Porque voce não usa um alinhamentos de if
if edit3.text =´+´ Then c:=a+b else if edit3.text =´-´ then c:=a-b else if edit3.text =´*´ then c:=a*b else if edit3.text =´/´ then c:=a/b else showmessage(´Operador not aplicado´);
GOSTEI 0
Gigatel
24/05/2005
[quote:6812171f2b=´Marco Salles´]
[/quote:6812171f2b]
Legal, más analiza mais a fundo, no meu caso presciso de 4 operações seria assim
a+b+c+d
neste caso eu teria que um bocado de if ..... é que tem firma que para se chegar ao valor de custo de uma determinada mercadoria tem que fazer uma série de cálculos primeiro, aí decidi colocar 4 campos para receber valores em porcento e mais 4 para os sinais de cálculos...más esta idéia é válida, se num tiver uma condição + fácil terei que usar esta mesmo...
Var
a,b,c:real;
Begin
a:= strtofloat(edit1.text);
b:= strtofloat(edit2.text);
c:= a ´edit3.text´ b
más este aí num funciona se alguém tiver um palpite, agradeço...t+
Porque voce não usa um alinhamentos de if
if edit3.text =´+´ Then c:=a+b else if edit3.text =´-´ then c:=a-b else if edit3.text =´*´ then c:=a*b else if edit3.text =´/´ then c:=a/b else showmessage(´Operador not aplicado´);
Legal, más analiza mais a fundo, no meu caso presciso de 4 operações seria assim
a+b+c+d
neste caso eu teria que um bocado de if ..... é que tem firma que para se chegar ao valor de custo de uma determinada mercadoria tem que fazer uma série de cálculos primeiro, aí decidi colocar 4 campos para receber valores em porcento e mais 4 para os sinais de cálculos...más esta idéia é válida, se num tiver uma condição + fácil terei que usar esta mesmo...
GOSTEI 0
Gigatel
24/05/2005
deixa eu expor exatamente o X da questão
tenho 8 edit´s 4 deles recebem valores ( 1, 8, 20, etc. Depende da firma )para cálculos de porcentagem
e 4 que recebe sinais ( + - * / ) e fuciona assim tem um edit que recebe o valor de referencia, aí vem um edit o sinal de + ou - ou * ou / aí vem outro edit que vai receber um valor para o calculo, e isso se repete por 3 vezes..
seria assim
100 [+] [10] [+] [5] [+] [3] [+] [0] imagine que os colchetes seriam os edit´s...será muito complicado isto ?
Valew...
tenho 8 edit´s 4 deles recebem valores ( 1, 8, 20, etc. Depende da firma )para cálculos de porcentagem
e 4 que recebe sinais ( + - * / ) e fuciona assim tem um edit que recebe o valor de referencia, aí vem um edit o sinal de + ou - ou * ou / aí vem outro edit que vai receber um valor para o calculo, e isso se repete por 3 vezes..
seria assim
100 [+] [10] [+] [5] [+] [3] [+] [0] imagine que os colchetes seriam os edit´s...será muito complicado isto ?
Valew...
GOSTEI 0
Marco Salles
24/05/2005
neste caso eu teria que um bocado de if
acho que naõ.. Voce pode colocar estes comando if em uma função
onde os parametros passados são a,b,edit1.text e o retorno é a operação
tipo isto: function RetornarValorOperacao(a,b:Real;Texto:String):Real; begin bla.. bla.. end;
assim:
:arrow: assim se voce quer fazer ::: [b:7d7e0e28de]e:=a+b+c+d [/b:7d7e0e28de].. acho que pode ser feito assim:
e:=RetornarValorOperacao(a,b,edit1.texto); e:=RetornarValorOperacao(e,c,edit1.text); e:=RetornarValorOperacao(e,d,edit1.text);
em outras palavras , voce pode aplicar as propriedas de comutação , adição etc das operaçoes quando lhe for conveniente.
GOSTEI 0
Andremuller
24/05/2005
Eu só retirei um edit com o operador porque se tu tem 4 edits com valores vão ser realizadas três operações entre eles.
Bom de qualquer forma segue o código que tu altera com a tua necessidade caso eu não tenha entendido o problema.
Pra ficar bom mesmo eu acho que seria interessante transformar o RealizaOperacao em recursivo, mas no momento estou sem tempo pra fazer isso.
Bom de qualquer forma segue o código que tu altera com a tua necessidade caso eu não tenha entendido o problema.
Pra ficar bom mesmo eu acho que seria interessante transformar o RealizaOperacao em recursivo, mas no momento estou sem tempo pra fazer isso.
procedure TForm1.Button3Click(Sender: TObject); function ConsisteOperadores(AOper: array of string): boolean; var i: integer; begin Result := True; for i := 0 to High(AOper) do if not ((Length(AOper[i]) = 1) and (AOper[i][1] in [´+´, ´-´, ´*´, ´/´])) then begin Result := False; Exit; end; end; function RealizaOperacao(AVal1, AVal2: real; AOper: string): Real; begin Result := 0; case AOper[1] of ´+´: Result := AVal1 + AVal2; ´-´: Result := AVal1 - AVal2; ´*´: Result := AVal1 * AVal2; ´/´: Result := AVal1 / AVal2; end; end; var rResultado: real; begin if not ConsisteOperadores([edtOper1.Text, edtOper2.Text, edtOper3.Text]) then raise Exception.Create(´Operadores inválidos.´); rResultado := RealizaOperacao(StrToFloat(edtVal1.Text), StrToFloat(edtVal2.Text), edtOper1.Text); rResultado := RealizaOperacao(rResultado, StrToFloat(edtVal3.Text), edtOper2.Text); rResultado := RealizaOperacao(rResultado, StrToFloat(edtVal4.Text), edtOper3.Text); Label1.Caption := FloatToStr(rResultado); end;
GOSTEI 0
Gigatel
24/05/2005
agradeço pela atenção, deu tudo certo agora usei a função do andremuller valeu msm...funciona perfeitinho...t+
GOSTEI 0
Marco Salles
24/05/2005
Amigo , so me responde uma coisa.. qual o resultado que vceo espera nesta operação
:?: :?: :?: :?:
100 [+] [10] [*] [5] [/] [3]
:?: :?: :?: :?:
GOSTEI 0
Gigatel
24/05/2005
[quote:1514591d2e=´Marco Salles´]Amigo , so me responde uma coisa.. qual o resultado que vceo espera nesta operação
:?: :?: :?: :?:[/quote:1514591d2e]
Amigo, isso foi só um exemplo. Era só para efeito de ordenação. más valeu mesmo pela atenção e muito obrigado, o função que o nosso amigo passou acima deu certinho, só tive que dar uns toques caseiros ( rsss ), muito obrigado galera....t+
100 [+] [10] [*] [5] [/] [3]
:?: :?: :?: :?:[/quote:1514591d2e]
Amigo, isso foi só um exemplo. Era só para efeito de ordenação. más valeu mesmo pela atenção e muito obrigado, o função que o nosso amigo passou acima deu certinho, só tive que dar uns toques caseiros ( rsss ), muito obrigado galera....t+
GOSTEI 0