Смекни!
smekni.com

Условие задачи аналитической геометрии Найти минимальное и максимальные расстояние от з точек на (стр. 2 из 2)

n : word; {Кол-во точек для проверки}

i : byte; {параметр цикла}

ch : char;

size : longint;

{ ------------------------------------------------------------ }

Procedure FrazaReadError(k:integer);

{ Сообщение о неправильном формате вводимого числа с подачей }

{ звукового сигнала }

Begin

If k<>0 then

Begin

Writeln(#7'Неправильный формат числа');

Writeln('Повторите ввод');

End;

End { FrazaReadError };

{ ------------------------------------------------------------ }

Procedure ReadInt(Var Number:integer);

{ Ввод с клавиатуры и проверка формата переменной типа integer }

Var k : integer;

Begin

Repeat

{$I-} Read(Number); {$I+}

k:=IOResult;

FrazaReadError(k);

Until k=0;

End { ReadInt };

{ ------------------------------------------------------------ }

Procedure ReadWord(Var Number:word);

{ Ввод с клавиатуры и проверка формата переменной типа word}

Var k : word;

Begin

Repeat

{$I-} Read(Number); {$I+}

k:=IOResult;

FrazaReadError(k);

Until k=0;

End { ReadWord };

{ ------------------------------------------------------------ }

Procedure PrintInData;

Var i : byte;

Begin

Writeln(' Исходные данные');

Writeln('Точки на плоскости:');

For i:=1 to n do

Begin

Write(i,':','(',PointAr[i].x,':',PointAr[i].y,')','; ');

End;

Writeln;

Writeln('Коэффициенты прямой:');

Writeln('a=',a);

Writeln('b=',b);

Writeln('c=',c);

End {PrintInData};

{ ------------------------------------------------------------ }

Procedure PrintHead;

Begin

ClrScr;

Writeln('▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒');

Writeln('▒ Лабораторная работа №2 ▒');

Writeln('▒ студента гр. ▒');

Writeln('▒ ▒');

Writeln('▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒');

Writeln('▒ Условие задачи по аналитической геометрии: ▒');

Writeln('▒ Найти минимальное и максимальное расстояние▒');

Writeln('▒ от точек до прямой на плоскости. ▒');

Writeln('▒ ▒');

Writeln('▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒');

End { ReadInt };

{ ------------------------------------------------------------ }

Function CalcDist(Var a,b,c,x,y:integer):real;

Begin

CalcDist:=abs(a*X+b*Y+c)/sqrt(a*a+b*b);

End {CalcDist};

{ ------------------------------------------------------------ }

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(PointAr[i].x);

Write('y='); ReadInt(PointAr[i].y);

End;

Writeln('Введите коэффициенты прямой:');

Write('a='); ReadInt(a);

Write('b='); ReadInt(b);

Write('c='); ReadInt(c);

PrintHead;

PrintInData;

Writeln('Записать введённые данные в файлы входных данных?');

Writeln('(y - Да, n - Нет)');

Repeat

ch:=ReadKey;

Until ((ch='y') or (ch='n'));

if (ch='y') then

Begin

Assign(PointFile,'point.dat'); Rewrite(PointFile);

Assign(LineFile,'line.dat'); Rewrite(LineFile);

For i:=1 to n do

Write(PointFile,PointAr[i]);

Writeln('Файл point.dat перезаписан!!! Текущий размер ',size,' компонент.');

Write(LineFile,a);

Write(LineFile,b);

Write(LineFile,c);

Writeln('Файл line.dat перезаписан!!!');

Close(PointFile); Close(LineFile);

End;

End

else

Begin

Assign(PointFile,'point.dat'); Reset(PointFile);

Assign(LineFile,'line.dat'); Reset(LineFile);

size:=FileSize(PointFile);

n:=size;

For i:=1 to n do

Read(PointFile,PointAr[i]);

Read(LineFile,a);

Read(LineFile,b);

Read(LineFile,c);

Close(PointFile); Close(LineFile);

Writeln('Данные из входных файлов загружены!!!');

PrintInData;

End;

{Уствновка начальных значений переменных}

Xmin:=PointAr[1].x;

Xmax:=PointAr[1].x;

Ymin:=PointAr[1].y;

Ymax:=PointAr[1].y;

Dmin:=CalcDist(a,b,c,PointAr[1].x,PointAr[1].y);

Dmax:=Dmin;

{Цикл вычисления}

For i:=2 to n do

Begin

D:=CalcDist(a,b,c,PointAr[i].x,PointAr[i].y);

if D>Dmax then

Begin

Xmax:=PointAr[i].x;

Ymax:=PointAr[i].y;

Dmax:=D

End

Else

Begin

if D<Dmin then

Begin

Xmin:=PointAr[i].x;

Ymin:=PointAr[i].y;

Dmin:=D

End

End

End;

Writeln('Минимальное расстояние до точки (',Xmin,';',Ymin,') Dmin=',Dmin:8:5);

Writeln('Максимальное расстояние до точки (',Xmax,';',Ymax,') Dmax=',Dmax:8:5);

Assign(ResultFile,'result.txt');

Rewrite(ResultFile);

Writeln(ResultFile,'Минимальное расстояние до точки (',Xmin,';',Ymin,') Dmin=',Dmin:8:5);

Write(ResultFile,'Максимальное расстояние до точки (',Xmax,';',Ymax,') Dmax=',Dmax:8:5);

Close(ResultFile);

Readln;

End.

Экранные формы: