GARANTIR DESCONTO

Fórum Ajuda com equação do 2° grau #551326

13/04/2016

0

Olá,

criei um programa pra resolver uma equação do 2° grau e tá dando o seguinte erro depois de eu inserir os coeficientes e clicar no botão:



[img]http://arquivo.devmedia.com.br/forum/imagem/480368-20160413-153734.png[/img]

Invalid float point value.


Eis a Unit:


unit calcularaizesequação2grau;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, Math;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
a, b, c,raiz1,raiz2,delta: Real;



begin
  a := StrToFloat(Edit1.Text);
  b := StrToFloat(Edit2.Text);
  c := StrToFloat(Edit3.Text);

  delta:= power (b,2) -4*a*c;

  begin

  raiz1 := (-(b)+(sqrt(delta)))/2*a;
  raiz1 := StrToFloat(Edit4.Text);

  raiz2:= (-(b)-(sqrt(delta)))/2*a;
  raiz2 := StrToFloat (Edit5.Text);
  end;


end;

end.



Se alguém puder ajudar a resolver esse problema agradeço.
Adriano Freitas

Adriano Freitas

Responder

Posts

13/04/2016

Raylan Zibel

Exatamente em qual linha deu erro?

"StrToFloat(Edit4.Text);" vai dar erro se "Edit4.Text" não tiver valor...
Responder

Gostei + 0

13/04/2016

Natanael Ferreira

O erro acontece porque neste caso (a=5, b=2, c=10) tem como resultado um delta negativo.

Nas regras matemáticas:

Delta = 0 (Duas raízes iguais)
Delta > 0 (Duas raízes diferentes)
Delta < 0 (Não há raízes)

O seu código deve seguir estas regras. Teste assim:

var
  a, b, c, raiz1, raiz2, delta: Double;
begin
  a := StrToFloat(Edit1.Text);
  b := StrToFloat(Edit2.Text);
  c := StrToFloat(Edit3.Text);

  delta := power(b, 2) - 4 * a * c;

  if delta > 0 then
  begin
    raiz1 := ((-b) + sqrt(delta)) / (2 * a);
    Edit4.Text := FloatToStr(raiz1);

    raiz2 := ((-b) - sqrt(delta)) / (2 * a);
    Edit5.Text := FloatToStr(raiz2);
  end;

  if delta = 0 then
  begin
    raiz1 := ((-b) - sqrt(delta)) / (2 * a);
    Edit4.Text := FloatToStr(raiz1);
    Edit5.Text := FloatToStr(raiz1);
  end;

  if delta < 0 then
    ShowMessage('Não há raízes para delta menor que zero');
end;
Responder

Gostei + 0

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

Aceitar