48704 (566530), страница 2
Текст из файла (страница 2)
Writeln('Верхняя правая точка: (',RectangleAr[2].x,':',RectangleAr[2].y,')');
End {PrintInData};
{ ------------------------------------------------------------ }
Function Cross1(Var R:word; P,C:integer):boolean;
Begin
Cross1:=false;
if (R*R-(P-C*C))>=0 then Cross1:=true;
End {Cross1};
{ ------------------------------------------------------------ }
Function Cross2(Var Inter1,Inter2:integer; R:word; P,C1,C2:integer):boolean;
Var Buf : real;
Begin
Cross2:=false;
Buf:=sqrt(R*R-(P-C1*C1))+C2;
if Buf<=Inter2 then
if Buf>=Inter1 then Cross2:=true;
End {Cross2};
{ ------------------------------------------------------------ }
Procedure PrintHead;
Begin
ClrScr;
Writeln('▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒');
Writeln('▒ Лабораторная работа №2 ▒');
Writeln('▒ студента гр▒');
Writeln('▒ ▒');
Writeln('▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒');
Writeln('▒ Условие задачи по аналитической геометрии: ▒');
Writeln('▒ Найти количество окружностей на плоскости ▒');
Writeln('▒ имеющих пересечение с прямоугольником стороны ▒');
Writeln('▒ которого параллельны осям координат. ▒');
Writeln('▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒');
End { ReadInt };
{ ------------------------------------------------------------ }
Begin
PrintHead;
Writeln('Откуда произвести ввод исходных данных?');
Writeln('f - файл, k-клавиатура');
Repeat
ch:=ReadKey;
Until ((ch='k') or (ch='f'));
if (ch='k') then
Begin
Writeln('Набор параметров завершайте нажатием клавиши Enter');
Write('Введите количество окружностей:'); ReadWord(n);
For i:=1 to n do
Begin
Writeln('Введите кординаты центра ',i,' окружности.');
Write('x='); ReadInt(CircleAr[i].x);
Write('y='); ReadInt(CircleAr[i].y);
Writeln('Введите радиус ',i,' окружности.');
Write('R='); ReadWord(CircleAr[i].R);
End;
For i:=1 to 2 do
Begin
Writeln('Введите кординаты ',i,' точки прямоугольника');
Write('x='); ReadInt(RectangleAr[i].x);
Write('y='); ReadInt(RectangleAr[i].y);
End;
PrintHead;
PrintInData;
Writeln('Записать введённые данные в файлы входных данных?');
Writeln('(y - Да, n - Нет)');
Repeat
ch:=ReadKey;
Until ((ch='y') or (ch='n'));
if (ch='y') then
Begin
Assign(CircleFile,'circle.dat'); Rewrite(CircleFile);
Assign(RectangleFile,'rectangl.dat'); Rewrite(RectangleFile);
For i:=1 to n do
Write(CircleFile,CircleAr[i]);
size:=FileSize(CircleFile);
Writeln('Файл circle.dat перезаписан!!! Текущий размер ',size,' компонент.');
For i:=1 to 2 do
Write(RectangleFile,RectangleAr[i]);
Writeln('Файл rectangle.dat перезаписан!!!');
Close(RectangleFile); Close(CircleFile);
End;
End
else
Begin
Assign(CircleFile,'circle.dat'); Reset(CircleFile);
Assign(RectangleFile,'rectangl.dat'); Reset(RectangleFile);
size:=FileSize(CircleFile);
n:=size;
For i:=1 to n do
Read(CircleFile,CircleAr[i]);
For i:=1 to 2 do
Read(RectangleFile,RectangleAr[i]);
Close(RectangleFile); Close(CircleFile);
Writeln('Данные из входных файлов загружены!!!');
PrintInData;
End;
S:=0;
{Цикл проверки}
For i:=1 to n do
Begin
if Cross1(CircleAr[i].R,RectangleAr[1].y,CircleAr[i].y) then
Begin
if Cross2(RectangleAr[1].x,RectangleAr[2].x,CircleAr[i].R,RectangleAr[1].y,CircleAr[i].y,CircleAr[i].x) then
Begin
S:=S+1; GoTo ExitFromCalc;
End
End;
if Cross1(CircleAr[i].R,RectangleAr[2].y,CircleAr[i].y) then
Begin
if Cross2(RectangleAr[1].x,RectangleAr[2].x,CircleAr[i].R,RectangleAr[2].y,CircleAr[i].y,CircleAr[i].x) then
Begin
S:=S+1; GoTo ExitFromCalc;
End
End;
if Cross1(CircleAr[i].R,RectangleAr[1].x,CircleAr[i].x) then
Begin
if Cross2(RectangleAr[1].y,RectangleAr[2].y,CircleAr[i].R,RectangleAr[1].x,CircleAr[i].x,CircleAr[i].y) then
Begin
S:=S+1; GoTo ExitFromCalc;
End
End;
if Cross1(CircleAr[i].R,RectangleAr[2].x,CircleAr[i].x) then
Begin
if Cross2(RectangleAr[1].y,RectangleAr[2].y,CircleAr[i].R,RectangleAr[2].x,CircleAr[i].x,CircleAr[i].y) then
Begin
S:=S+1; GoTo ExitFromCalc;
End
End;
ExitFromCalc:
End;
{Конец цикла проверки}
Writeln('С прямоугольником пересекаются ',S,' окружности(ей) из ',n,'.');
Assign(ResultFile,'result.txt');
Rewrite(ResultFile);
Write(ResultFile,'С прямоугольником пересекаются ',S,' окружности(ей) из ',n,'.');
Close(ResultFile);
Readln;
End.
4. Экранные формы:















