unit MySubs;interfaceuses
Math, Graphics;
type
function Power10N(n:INteger):Integer; //计算10的n次方
function StandReal(x:Real;n:Integer):Real; //计算时数保留n位小数的转换结果
procedure PaintG(PCanvas:TCanvas;a,b,c:Integer); //在画布上画出一元二次方程的图形
end;implementation function Power10N(n:INteger):Integer;
var
i:Integer;
Result:=1;
for i:=1 to n do
Result:=Result*10;
end; function StandReal(x:Real;n:Integer):Real;
begin
Result:=Trunc(Abs(x)*Power10N(n)+0.5)/Power10N(n)*Sign(x);
end; procedure PaintG(PCanvas:TCanvas;a,b,c:Integer);
var
x,y,first:Integer;
begin
PCanvas.Pen.Color:=clRed; //用红色画坐标线和坐标值
PCanvas.MoveTo(10,210);
PCanvas.LineTo(410,210);
PCanvas.MoveTo(210,10);
PCanvas.LineTo(210,410);
PCanvas.TextOut(220,10,'200');
PCanvas.TextOut(220,400,'-200');
PCanvas.TextOut(10,220,'-50');
PCanvas.TextOut(400,220,'50');
PCanvas.Pen.Color:=clBlue; //用蓝线画函数曲线
first:=0;
for x:=-50 to 50 do begin
y:=a*Sqr(x)+b*x+c;
if Abs(y)<200 then
first:=first+1;
else
first:=0;
if first=1 then
PCanvas.MoveTo(4*x+210,210-y);
if first=1 then
PCanvas.LineTo(4*x+210,210-y);
end;
end;
end.
Math, Graphics;
type
function Power10N(n:INteger):Integer; //计算10的n次方
function StandReal(x:Real;n:Integer):Real; //计算时数保留n位小数的转换结果
procedure PaintG(PCanvas:TCanvas;a,b,c:Integer); //在画布上画出一元二次方程的图形
end;implementation function Power10N(n:INteger):Integer;
var
i:Integer;
Result:=1;
for i:=1 to n do
Result:=Result*10;
end; function StandReal(x:Real;n:Integer):Real;
begin
Result:=Trunc(Abs(x)*Power10N(n)+0.5)/Power10N(n)*Sign(x);
end; procedure PaintG(PCanvas:TCanvas;a,b,c:Integer);
var
x,y,first:Integer;
begin
PCanvas.Pen.Color:=clRed; //用红色画坐标线和坐标值
PCanvas.MoveTo(10,210);
PCanvas.LineTo(410,210);
PCanvas.MoveTo(210,10);
PCanvas.LineTo(210,410);
PCanvas.TextOut(220,10,'200');
PCanvas.TextOut(220,400,'-200');
PCanvas.TextOut(10,220,'-50');
PCanvas.TextOut(400,220,'50');
PCanvas.Pen.Color:=clBlue; //用蓝线画函数曲线
first:=0;
for x:=-50 to 50 do begin
y:=a*Sqr(x)+b*x+c;
if Abs(y)<200 then
first:=first+1;
else
first:=0;
if first=1 then
PCanvas.MoveTo(4*x+210,210-y);
if first=1 then
PCanvas.LineTo(4*x+210,210-y);
end;
end;
end.
...
end;1.type和end去掉var
i:Integer;
begin
Result:=1;2.少了beginif Abs(y)<200 then
first:=first+1;
else
first:=0;3.分號去掉
unit MySubs;interfaceuses
Math, Graphics;
//type
function Power10N(n:INteger):Integer; //计算10的n次方
function StandReal(x:Real;n:Integer):Real; //计算时数保留n位小数的转换结果
procedure PaintG(PCanvas:TCanvas;a,b,c:Integer); //在画布上画出一元二次方程的图形
//end;implementation function Power10N(n:INteger):Integer;
var
i:Integer;
begin
Result:=1;
for i:=1 to n do
Result:=Result*10;
end; function StandReal(x:Real;n:Integer):Real;
begin
Result:=Trunc(Abs(x)*Power10N(n)+0.5)/Power10N(n)*Sign(x);
end; procedure PaintG(PCanvas:TCanvas;a,b,c:Integer);
var
x,y,first:Integer;
begin
PCanvas.Pen.Color:=clRed; //用红色画坐标线和坐标值
PCanvas.MoveTo(10,210);
PCanvas.LineTo(410,210);
PCanvas.MoveTo(210,10);
PCanvas.LineTo(210,410);
PCanvas.TextOut(220,10,'200');
PCanvas.TextOut(220,400,'-200');
PCanvas.TextOut(10,220,'-50');
PCanvas.TextOut(400,220,'50');
PCanvas.Pen.Color:=clBlue; //用蓝线画函数曲线
first:=0;
for x:=-50 to 50 do begin
y:=a*Sqr(x)+b*x+c;
if Abs(y)<200 then
first:=first+1
else
first:=0;
if first=1 then
PCanvas.MoveTo(4*x+210,210-y);
if first=1 then
PCanvas.LineTo(4*x+210,210-y);
end;
end;
end.
unit MySubs;interfaceuses
Math, Graphics; function Power10N(n:INteger):Integer; //计算10的n次方
function StandReal(x:Real;n:Integer):Real; //计算时数保留n位小数的转换结果
procedure PaintG(PCanvas:TCanvas;a,b,c:Integer); //在画布上画出一元二次方程的图形
implementation function Power10N(n:INteger):Integer;
var
i:Integer;
begin
Result:=1;
for i:=1 to n do
Result:=Result*10;
end; function StandReal(x:Real;n:Integer):Real;
begin
Result:=Trunc(Abs(x)*Power10N(n)+0.5)/Power10N(n)*Sign(x);
end; procedure PaintG(PCanvas:TCanvas;a,b,c:Integer);
var
x,y,first:Integer;
begin
PCanvas.Pen.Color:=clRed; //用红色画坐标线和坐标值
PCanvas.MoveTo(10,210);
PCanvas.LineTo(410,210);
PCanvas.MoveTo(210,10);
PCanvas.LineTo(210,410);
PCanvas.TextOut(220,10,'200');
PCanvas.TextOut(220,400,'-200');
PCanvas.TextOut(10,220,'-50');
PCanvas.TextOut(400,220,'50');
PCanvas.Pen.Color:=clBlue; //用蓝线画函数曲线
first:=0;
for x:=-50 to 50 do begin
y:=a*Sqr(x)+b*x+c;
if Abs(y)<200 then
first:=first+1
else
first:=0;
if first=1 then
PCanvas.MoveTo(4*x+210,210-y);
if first=1 then
PCanvas.LineTo(4*x+210,210-y);
end;
end;
end.
Project Project1.exe raised exception class EInvalidOperation with message 'Cannot focus a disabled or invisible window'.Process stopped.Use Step or Run to continue.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls;type
TfrmMain = class(TForm)
pnlPaint: TPanel;
pnlSet: TPanel;
pbResult: TPaintBox;
pnlTop: TPanel;
pnlBottom: TPanel;
gbA: TGroupBox;
EdtA: TEdit;
gbB: TGroupBox;
EdtB: TEdit;
gbC: TGroupBox;
EdtC: TEdit;
cbRandom: TCheckBox;
btnProject: TButton;
btnCalc: TButton;
gbPoint: TGroupBox;
edtNum: TEdit;
udNum: TUpDown;
lblDescription: TLabel;
lblX1: TLabel;
lblX2: TLabel;
procedure FormActivate(Sender: TObject);
procedure btnProjectClick(Sender: TObject);
procedure btnCalcClick(Sender: TObject);
procedure udNumClick(Sender: TObject; Button: TUDBtnType);
private
{ Private declarations }
a,b,c:Integer; //保存一元二次方程系数
BITS:SmallInt; //
public
{ Public declarations }
end;var
frmMain: TfrmMain;implementationuses MySubs;{$R *.dfm}procedure TfrmMain.FormActivate(Sender: TObject);
begin
btnProject.SetFocus; //将输入焦点设置到出题按钮上
Randomize; //初始化随机数发生器
BITS:=3; //设定结果值的小数位数
end;procedure TfrmMain.btnProjectClick(Sender: TObject);
begin
pbResult.Canvas.FillRect(ClientRect); //清除画布
lblDescription.Caption:=''; //清除输出的结果
lblX1.Caption:='';
lblX2.Caption:='';
if cbRandom.Checked then begin
a:=Random(50)-Random(50);
b:=Random(100)-Random(100);
c:=Random(200)-Random(200);
edtA.Text:=IntToStr(a);
edtB.Text:=IntToStr(b);
edtC.Text:=IntToStr(c);
end
else begin
a:=StrToInt(edtA.Text);
b:=StrToInt(edtB.Text);
c:=StrToInt(edtC.Text);
end;
PaintG(pbResult.Canvas,a,b,c); //调用画图过程画出做标及函数曲线
btnProject.Enabled:=false; //切换状态按钮
btnCalc.Enabled:=true;
btnCalc.SetFocus;
cbRandom.Enabled:=false;
end;procedure TfrmMain.btnCalcClick(Sender: TObject);
var
delta,m,n:real;
begin
if a<>0 then begin
delta:=b*b-4*a*c;
m:=-b/(2*a);
if delta>=0 then
if delta>0 then begin
n:=Sqrt(delta)/(2*a);
lblDescription.Caption:='两个不相等实根';
lblX1.Caption:=FloatToStr(StandReal((m+n),BITS));
lblX2.Caption:=FloatToStr(StandReal((m-n),BITS));
end
else begin
lblDescription.Caption:='两个相等实根';
lblX1.Caption:=FloatToStr(StandReal(m,BITS));
end
else begin
n:=Sqrt(-delta)/(2*a);
lblDescription.Caption:='两个不相等复根';
m:=(StandReal(m,BITS));
n:=(StandReal(n,BITS));
lblX1.Caption:=FloatToStr(m)+'+'+FloatToStr(Abs(n))+'i';
lblX2.Caption:=FloatToStr(m)+'-'+FloatToStr(Abs(n))+'i';
end;
end
else
if b<>0 then begin
m:=-c/b;
lblDescription.Caption:='一个实根';
lblX1.Caption:=FloatToStr(StandReal(m,BITS));
end
else
if c=0 then
lblDescription.Caption:='无穷实根'
else
lblDescription.Caption:='无解';
btnProject.Enabled:=true; //切换状态按钮
btnCalc.Enabled:=false;
btnCalc.SetFocus;
cbRandom.Enabled :=true;
end;procedure TfrmMain.udNumClick(Sender: TObject; Button: TUDBtnType);
begin
BITS:=udNum.Position;
end;end.