Fórum Funçao 2º Grau #279615

29/04/2005

0

bom, eu tava tentando fazer uma aplicaçao que calcula funçoes de 2º grau com coeficientes definidos pelo usuario, eu fiz todas as funçoes mas esta dando raízes erradas...O codigo esta aqui sera que alguem poderia me informar no que que eu errei??

[b:a96130b491][u:a96130b491]CODIGO[/u:a96130b491][/b:a96130b491]:

unit EquacaoUnt;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
edA: TEdit;
edB: TEdit;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
edC: TEdit;
edX1: TEdit;
Label6: TLabel;
Label7: TLabel;
edX2: TEdit;
Button1: TButton;
Label8: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
a,b,c,Delta,Func1,Func2,Z,W: real;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
a:=StrToFloat(edA.Text);
b:=strtofloat(edB.Text);
c:=strtofloat(edC.Text);

Delta:=b*b - 4*a*c;

Z:=-b + sqrt(Delta);

W:=-b - sqrt(Delta);

Func1:=Z/2*a;
Func2:=W/2*a;

edX1.Text:=floattostr(Func1);
edX2.Text:=floattostr(Func2);
end;

end.


Plinho_v

Plinho_v

Responder

Posts

29/04/2005

Massuda

... Func1:=Z/2*a; Func2:=W/2*a; ...
Acho que o certo seria...
...
Func1:=Z/(2*a);
Func2:=W/(2*a);
...



Responder

Gostei + 0

29/04/2005

Plinho_v

Ae valeu era esse o problema!!

[]´s


Responder

Gostei + 0

30/04/2005

Plinho_v

Putz eu to com otra duvida, como da pra ver no codigo que eu passei eu defini todas as variaveis [a, b, c, Delta, Func1, Func2, Z e W] como reais, porem eu axo que no tipo real não existe o 0 porque eu vi em um site que ele vai do 10 elevado a -39 até o 10 elevado a 38... o problema é que quando o Delta da 0 ele gera um erro ´Invalid Floating Point´, alguem sabe como eu poderia arrumar isso ou qual outra variavel eu poderia usar?

[]´s


Responder

Gostei + 0

30/04/2005

Marco Salles

o problema é que quando o Delta da 0 ele gera um erro ´Invalid Floating Point´,


Acredito , que o Problema da , quando Delta form Menor que zero --->>>
Porque ai se tem Raizes Complezas

Para este caso , eu não sei se lembro bem. mas as raizes são

Z:=-b + i*sqrt(Delta);

W:=-b - i*sqrt(Delta);

Onde i é o numero complexo

Para este casos , acredito que voce deve testar uma condição que separe as Respostas reais das complexas

Tente isto :arrow: :arrow:

procedure TForm1.Button1Click(Sender: TObject);
begin
a:=StrToFloat(edA.Text);
b:=strtofloat(edB.Text);
c:=strtofloat(edC.Text);

Delta:=b*b - 4*a*c;

if Delta >= 0 then
  begin
    Z:=-b + sqrt(Delta);
    W:=-b - sqrt(Delta);
    Func1:=Z/(2*a);
    Func2:=W/(2*a);
    edX1.Text:=floattostr(Func1);
    edX2.Text:=floattostr(Func2);
  end
else
  begin
    Delta:=-1*Delta;
    edX1.Text:=FloatToStr(-b)+´ +i*´+FloatToStr(sqrt(Delta));
    edX2.Text:=FloatToStr(-b)+´ -i*´+FloatToStr(sqrt(Delta));
  end
end;



Responder

Gostei + 0

30/04/2005

Plinho_v

Mas o problema tambem esta quando o delta é zero eu testei e deu erro... agora eu vo tenta digerir esse seu conselho, porque, afinal de contas, eu vi alguma coisa bem basica de numeros complexos ano passado hehehe....vlw a ajuda....

[]´s


Responder

Gostei + 0

30/04/2005

Massuda

...eu axo que no tipo real não existe o 0 porque eu vi em um site que ele vai do 10 elevado a -39 até o 10 elevado a 38...
Existe o zero. Talvez o site onde você viu essa informação tenha omitido o fato que os valores podem ser positivos ou negativos.

... o problema é que quando o Delta da 0 ele gera um erro ´Invalid Floating Point´
Existem dois problemas que você precisa estar atento[list=1:88b0df8607][*:88b0df8607]matematicamente, se delta < 0, então a equação não possui raízes reais (mas possui raízes imaginárias); caso seu programa tente prosseguir o cálculo nesse caso, irá gerar a mensagem que você citou[*:88b0df8607]por problemas na representação computacional de números reais, as vezes valores muitos pequenos (na prática, zero) são mostrados na tela, depois de formatados, como sendo zero, embora internamente sejam (por exemplo) -1x10^-38[/list:o:88b0df8607]


Responder

Gostei + 0

30/04/2005

Marco Salles

Mas o problema tambem esta quando o delta é zero eu testei e deu erro


Não tem porque da erro , quando Delta = 0 , pois a raiz quadrada de Zero é Zero

A função sqtr(0) = 0 e pronto.


Responder

Gostei + 0

30/04/2005

Marco Salles

Amigo na pressa eu esqueci do denominador


begin
a:=StrToFloat(edA.Text);
b:=strtofloat(edB.Text);
c:=strtofloat(edC.Text);

Delta:=b*b - 4*a*c;

if Delta >= 0 then
begin
Z:=-b + sqrt(Delta);
W:=-b - sqrt(Delta);
Func1:=Z/(2*a);
Func2:=W/(2*a);
edX1.Text:=floattostr(Func1);
edX2.Text:=floattostr(Func2);
end
else
begin
Delta:=-1*Delta;
edX1.Text:=FloatToStr(-b/(2*a))+´ +i*´+FloatToStr(sqrt(Delta)/(2*a));
edX2.Text:=FloatToStr(-b/2*a)+´ -i*´+FloatToStr(sqrt(Delta)/(2*a));
end
end;


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar