Как посчитать корни квадратного уравнения?
unit SqRoot_;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Button1: TButton;
Label5: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
// решает квадратное уравнение
procedure SqRoot(a, b, c: real; var x1, x2: real; var ok: boolean);
{ a,b,c - коэффициенты уравнения
x1,x2 - корни уравнения
ok = True - решение есть ok = False - решения нет }
var
d: real; // дискриминант
begin
d := Sqr(b) - 4 * a * c;
if d < 0
then
ok := False // уравнение не имеет решения
else begin
ok := True;
x1 := (-b + Sqrt(d)) / (2 * a);
x2 := (b + Sqrt(d)) / (2 * a);
end;
end;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var k1, k2: real; // корни уравнения
rez: boolean; // True - решение есть, False - решения нет
mes: string; // сообщение begin
SqRoot(StrToFloat(Edit1.Text), StrToFloat(Edit2.Text),
StrToFloat(Edit3.Text), k1, k2, rez);
if rez then
mes := 'Корни уравнения' + #13 + 'x1=' + FloatToStrF(k1, ffGeneral, 4, 2) + #13 +
'x2=' + FloatToStrF(k2, ffGeneral, 4, 2) + #13
else
mes := 'Уравнение не имеет решения';
label5.Caption := mes; end;
procedure TForm1.Button2Click(Sender: TObject);
begin
winhelp(Form1.Handle, 'sqroot.hlp', HELP_CONTEXT, 1);
end; end. |