unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
LabeledEdit3: TLabeledEdit;
LabeledEdit4: TLabeledEdit;
LabeledEdit5: TLabeledEdit;
LabeledEdit6: TLabeledEdit;
Button1: TButton;
LabeledEdit7: TLabeledEdit;
btn2: TButton;
procedure Button1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// думал сделать так, добавить еще одну кнопку и сохранять данные, но абракадабра получается (
procedure TForm1.btn2Click(Sender: TObject);
var x1,y1,r1,x2,y2,r2:integer;
a:textfile;
begin
AssignFile(a,'Coord.txt');//файл в папке с программой
Rewrite(a);
Writeln (a,x1,y1,r1,x2,y2,r2);
CloseFile(a);
LabeledEdit1.Text:=IntToStr(x1);
LabeledEdit2.Text:=IntToStr(y1);
LabeledEdit3.Text:=IntToStr(r1);
LabeledEdit4.Text:=IntToStr(x2);
LabeledEdit5.Text:=IntToStr(y2);
LabeledEdit6.Text:=IntToStr(r2);
Append(a);
Read(a);
end;
// программа чтения из файла к примеру 4 4 4 и в след строке 5 5 5 - работает
procedure TForm1.Button1Click(Sender: TObject);
const e=0.0001;
var x1,y1,r1,x2,y2,r2:integer;
x,y,a,b,h,d,x3,y3,x4,y4:real;
f:textfile;
begin
AssignFile(f,'Coord.txt');//файл в папке с программой
Reset(f);
Read(f,x1,y1,r1,x2,y2,r2);
CloseFile(f);
LabeledEdit1.Text:=IntToStr(x1);
LabeledEdit2.Text:=IntToStr(y1);
LabeledEdit3.Text:=IntToStr(r1);
LabeledEdit4.Text:=IntToStr(x2);
LabeledEdit5.Text:=IntToStr(y2);
LabeledEdit6.Text:=IntToStr(r2);
Append(f);
Writeln(f,'');
if (abs(x1-x2)<e)and(abs(y1-y2)<e)and(abs(r1-r2)<e)
then
begin
LabeledEdit7.Text:='Окружности совпадают';
Writeln(f,'Окружности совпадают');
end
else
begin
d:=sqrt(sqr(x1-x2)+sqr(y1-y2));
if (d>r1+r2)or(d<abs(r1-r2)) then
begin
LabeledEdit7.Text:='Точек пересечения нет';
Writeln(f,'Точек пересечения нет');
end
else if abs(d-(r1+r2))<0.000001 then
begin
x:=(x1+x2)/2;
y:=(y1+y2)/2;
LabeledEdit7.Text:='Окружности касаются в точке x='
+FloattostrF(x,ffFixed,6,2)+' y='
+FloattostrF(y,ffFixed,6,2);
Writeln(f,'Окружности касаются в точке x=',x:0:2,' y=',y:0:2);
end
else
begin
b:=(sqr(r2)-sqr(r1)+sqr(d))/(2*d);
a:=d-b;
h:=sqrt(sqr(r2)-sqr(b));
x:=x1+(x2-x1)/(d/a);
y:=y1+(y2-y1)/(d/a);
x3:=x-(y-y2)*h/b;
y3:=y+(x-x2)*h/b;
x4:=x+(y-y2)*h/b;
y4:=y-(x-x2)*h/b;
LabeledEdit7.Text:='Точки пересечения x1='
+FloattostrF(x3,ffFixed,6,2)+' y1='
+FloattostrF(y3,ffFixed,6,2)
+' x2='+FloattostrF(x4,ffFixed,6,2)+' y2='
+FloattostrF(y4,ffFixed,6,2);
Writeln(f,'Точки пересечения x1=',x3:0:2,' y1=',y3:0:2,' x2=',x4:0:2,' y2=',y4:0:2);
end;
end;
CloseFile(f);
end;
end.