Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практикум по программированию Обработка числовых данных

.pdf
Скачиваний:
562
Добавлен:
23.03.2016
Размер:
3 Мб
Скачать
☆

7. МОДУЛИ ПОЛЬЗОВАТЕЛЕЙ

261

 

 

//Процедура ввода данных

procedure Input(out n:Integer; out x,y:mas); var i:Integer;

begin

WriteLn(Rus('Введите количество точек')); ReadLn(n);

if n<0 then WriteLn(Rus('Количество точек ')

,Rus('не может быть отрицательным') else if n<3 then

WriteLn(Rus('Количество точек недостаточно')) else

begin

WriteLn(Rus('Введите координаты точек x,y')); SetLength(x,n);

SetLength(y,n); for i:=0 to n-1 do

Read(x[i],y[i]);

ReadLn;

end;

end;

//Процедура вывода исходных данных

procedure Output(const n:Integer;const x,y:mas); var i:Integer;

begin

for i:=0 to n-1 do Write(x[i]:6:1,' ',y[i]:6:1);

WriteLn;

end;

//Функция проверки //возможности построения окружности

function WozmPostr(const x1,y1,x2 ,y2,x3,y3:Real):Boolean;

begin

if (x2-x1)*(y3-y2)=(x3-x2)*(y2-y1) then Result:=False

else Result:=True;

end;

//Процедура определения параметров окружности //по координатам трех точек

procedure ParamOkr(const x1,y1,x2,y2,x3,y3:Real; out xc,yc,r:Real);

262 ПРАКТИКУМ ПО ПРОГРАММИРОВАНИЮ

var a,b,c,d,e,f:Real;

 

begin

 

a:=2*(x2-x1); b:=2*(y1-y2);

 

c:=y2*y2-y1*y1+x2*x2-x1*x1;

 

d:=2*(x3-x1); e:=2*(y1-y3);

 

f:=y3*y3-y1*y1+x3*x3-x1*x1;

 

xc:=(b*f-c*e)/(b*d-a*e);

//координаты центра

yc:=(a*f-c*d)/(b*d-a*e);

//окружности

r:=dlina(xc,yc,x1,y1);

//радиус окружности

end;

 

//Функция вычисления

 

//расстояния между двумя точками

function Dlina(const x1,y1,x2,y2:Real):Real; begin

Result:=Sqrt(Sqr(x2-x1)+Sqr(y2-y1)); end;

//Функция вычисления //разности площадей четырехугольников function RasnPl(const x1,y1,r1

,x2,y2,r2:Real):Real; var lc,rs,lk,lk1,lk2,s1,s2:Real;

begin

//Расстояние между центрами окружностей lc:=Dlina(x1,y1,x2,y2);

//сумма радиусов окружностей rs:=r1+r2;

//Проверка существования внутренней касательной if lc>rs then

begin

//Длина внутренней касательной lk:=Sqrt(Sqr(lc)-Sqr(rs)); //Катет первого треугольника lk1:=lk*r1/rs;

//Катет второго треугольника lk2:=lk-lk1;

//Площадь первого четырехугольника s2:=r2*lk2;

//Площадь второго четырехугольника Result:=Abs(s1-s2);

end else

Result:=-1;

end;

end.

7. МОДУЛИ ПОЛЬЗОВАТЕЛЕЙ

263

 

 

В основной программе с помощью подпрограмм рассмотренно - го модуля осуществляется ввод исходных данных: при количе стве точек в множестве, меньшем трех, программа завершает выпо лнение. При достаточном количестве точек в обоих множествах поставленная задача решается методом полного перебора. При этом берутся три очередные точки первого множества, проверяет ся возможность построения окружности на них (не должны лежать н а одной прямой). Если окружность существует, то рассматрива ют оче- редные три точки второго множества. Если существует окруж ность, построенная на очередных точках второго множества, то выч исляют параметры окружностей и разность площадей четырехуго льников. Если внутренняя касательная не существует, то функци я вы- числения разности площадей возвращает −1. Поскольку вычисляется модуль разности площадей, то при поиске максимальной р азности подобный вариант взаимного расположения окружностей на результат не влияет.

Для исключения повторного рассмотрения вариантов точек номер второй должен превышать номер первой точки, а номер третьей должен превышать номер второй точки. Поэтому инде кс внешнего цикла должен меняться от номера первой точки до номера третьей от конца точки, индекс второго цикла долже н меняться от значения, на единицу большего индекса первого цикла, до номера предпоследней точки, а индекс внутреннего ци к- ла — от значения, на единицу большего значения индекса второго цикла, до номера последней точки.

Текст основной программы выглядит следующим образом:

program Modul2; {$APPTYPE CONSOLE} uses

SysUtils, ModulGeom; var

x1,y1,x2,y2:mas;

n1,n2,i1,i2,i3,j1,j2,j3:Integer;

i1m,i2m,i3m,j1m,j2m,j3m,kol:Integer;

xc1,yc1,r1,xc2,yc2,r2,rasn,maxrasn:Real; begin

Input(n1,x1,y1);

kol:=0; maxrasn:=-1; if n1>=3 then begin

264

ПРАКТИКУМ ПО ПРОГРАММИРОВАНИЮ

 

 

 

WriteLn(

 

Rus('Координаты точек первого множества'));

 

Output(n1,x1,y1);

 

ReadLn;

 

Input(n2,x2,y2);

 

if n2>=3 then

 

begin

WriteLn(

Rus('Координаты точек второго множества)); Output(n2,x2,y2);

ReadLn;

for i1:=0 to n1-3 do

for i2:=i1+1 to n1-2 do for i3:=i2+1 to n1-1 do

//Возможность построения окружности на //очередных трех точках первого множества

if WozmPostr(x1[i1],y1[i1] ,x1[i2],y1[i2] ,x1[i3],y1[i3]) then

begin

for j1:=0 to n2-3 do

for j2:=j1+1 to n2-2 do for j3:=j2+1 to n2-1 do

//Возможность построения окружности на //очередных трех точках второго множества

if WozmPostr(x2[j1],y2[j1] ,x2[j2],y2[j2] ,x2[j3],y2[j3]) then

begin

//Определение параметров окружности, //построенной на трех точках первого множества

ParamOkr(x1[i1],y1[i1],x1[i2]

,y1[i2],x1[i3],y1[i3]

,xc1,yc1,r1); //Определение параметров окружности, //построенной на трех точках второго множества

ParamOkr(x2[j1],y2[j1],x2[j2]

,y2[j2],x2[j3],y2[j3]

,xc2,yc2,r2);

rasn:=RasnPl(xc1,yc1,r1

,xc2,yc2,r2); //Определение разности площадей //четырехугольников, построенных на паре

7. МОДУЛИ ПОЛЬЗОВАТЕЛЕЙ

265

 

 

//окружностей двух множеств

if rasn>maxrasn then begin

//Количество рассмотренных пар окружностей //с общей касательной

kol:=kol+1;

maxrasn:=rasn; //Номера точек первого множества

i1m:=i1;

i2m:=i2;

i3m:=i3; //Номера точек второго множества

j1m:=j1;

j2m:=j2;

j3m:=j3;

end;

end;

end;

end;

if kol>0 then

WriteLn(Rus('Максимальная разность =') ,maxrasn:8:2

,Rus(' номера точек первого множества ') ,i1m:3,i2m:3,i3m:3

,Rus(' номера точек второго множества') ,j1m:3,j2m:3,j3m:3)

else

WriteLn(Rus('Нет ни одной пары окружностей')); ReadLn;

end;

end.

7.5. Задания для самостоятельной работы

Основные расчетные формулы для решения предлагаемых задач приведены в приложении 3.

1. В массивах X(n), Y(n), n ≤ 15 хранятся координаты точек на плоскости. Рассматривая эти точки как вершины, найти треугольник с максимальной медианой. Вывести номера точек ре - зультирующего треугольника, координаты его вершин и меди а- ны, ее длину. Если все треугольники вырожденные, вывести об этом сообщение и вычислений не производить. Проверить кор -

266

ПРАКТИКУМ ПО ПРОГРАММИРОВАНИЮ

 

 

ректность вводимого количества точек, в случае некоррект ности вывести соответствующее сообщение (отрицательное колич ество, недостаточное количество).

2.В массивах X(n), Y(n), n ≤ 15 хранятся координаты точек на плоскости. Рассматривая эти точки как вершины, найти треугольник с максимальной высотой. Вывести номера точек результирующего треугольника, координаты его вершин, коорд инаты высоты и ее длину. Если все треугольники вырожденные, вы - вести об этом сообщение и вычислений не производить. Пров ерить корректность вводимого количества точек, в случае некорр ектности вывести соответствующее сообщение (отрицательное кол ичество, недостаточное количество).

3.В массивах X(n), Y(n), n ≤ 15 хранятся координаты точек на плоскости. Рассматривая эти точки как вершины, найти треугольник с максимальной биссектрисой. Вывести номера точ ек результирующего треугольника, координаты его вершин, коо рдинаты биссектрисы и ее длину. Если все треугольники вырожд енные, вывести об этом сообщение и вычислений не производит ь. Проверить корректность вводимого количества точек, в слу чае некорректности вывести соответствующее сообщение (отри цательное количество, недостаточное количество).

4.В массивах X(n), Y(n), n ≤ 15 хранятся координаты точек на плоскости. Рассматривая эти точки как вершины треугольни ков, найти треугольник с максимальным углом между медианой и высотой. Вывести номера точек результирующего треугольн ика, координаты его вершин, высоты, медианы, значение угла. Если все треугольники вырожденные, вывести об этом сообщение и вычислений не производить. Проверить корректность вводи мого количества точек, в случае некорректности вывести соотве тствующее сообщение (отрицательное количество, недостаточное количество).

5.В массивах X(n), Y(n), n ≤ 15 хранятся координаты точек на плоскости. Рассматривая эти точки как вершины треугольни ков, найти треугольник с максимальным углом между медианой и биссектрисой. Вывести номера точек результирующего треу гольника, координаты его вершин, биссектрисы, медианы, значени е угла. Если все треугольники вырожденные, вывести об этом с о- общение и вычислений не производить. Проверить корректно сть вводимого количества точек, в случае некорректности выве сти соответствующее сообщение (отрицательное количество, не достаточное количество).

7. МОДУЛИ ПОЛЬЗОВАТЕЛЕЙ

267

 

 

6.В массивах X(n), Y(n), n ≤ 15 хранятся координаты точек на плоскости. Рассматривая эти точки как вершины треугольни ков, найти треугольник с максимальным углом между высотой и би с- сектрисой. Вывести номера точек результирующего треугол ьника, координаты его вершин, биссектрисы, высоты, значение угла . Если все треугольники вырожденные, вывести об этом сообщение и вычислений не производить. Проверить корректность вводи мого количества точек, в случае некорректности вывести соотве тствующее сообщение (отрицательное количество, недостаточное количество).

7.В массивах X(n), Y(n), n ≤ 15 хранятся координаты точек на плоскости. Рассматривая эти точки как вершины треугольни ков, найти треугольник с максимальной площадью вписанного кр уга. Вывести номера точек результирующего треугольника, коор динаты его вершин, центра круга, его радиус и площадь. Если вс е треугольники вырожденные, вывести об этом сообщение и вы- числений не производить. Проверить корректность вводимо го количества точек, в случае некорректности вывести соответс твующее сообщение (отрицательное количество, недостаточное к оли- чество).

8.В массивах X(n), Y(n), n ≤ 15 хранятся координаты точек на плоскости. Рассматривая эти точки как вершины треугольни ков, найти треугольник с максимальной площадью описанного кр уга. Вывести номера точек результирующего треугольника, коор динаты его вершин, центра круга, его радиус и площадь. Если вс е треугольники вырожденные, вывести об этом сообщение и вы- числений не производить. Проверить корректность вводимо го количества точек, в случае некорректности вывести соответс твующее сообщение (отрицательное количество, недостаточное к оли- чество).

9.В массивах X(n), Y(n), n ≤ 15 хранятся координаты точек на плоскости. Рассматривая эти точки как вершины треугольни ков, найти треугольник с максимальной разностью площадей опи - санного и вписанного кругов. Вывести номера точек результ ирующего треугольника, координаты его вершин, центров кругов , их радиусы, площади и разность площадей. Если все треугольни ки вырожденные, вывести об этом сообщение и вычислений не пр о- изводить. Проверить корректность вводимого количества т очек, в случае некорректности вывести соответствующее сообщени е (отрицательное количество, недостаточное количество).

268

ПРАКТИКУМ ПО ПРОГРАММИРОВАНИЮ

 

 

10.Переменные XC, YC, R хранят соответственно координаты центра и радиус окружности. В массивах X(n), Y(n), n ≤ 15 хранятся координаты точек на плоскости. Рассматривая эти точки как вершины треугольников, найти такой треугольник, у которог о сторона является касательной к окружности, а площадь треугол ьника, образованного его центром (точка пересечения медиан), центром окружности и точкой касания, максимальна. Вывести но мера точек результирующего треугольника, координаты его ве ршин, координаты вершин треугольника, площадь которого вычисл я- лась, саму его площадь. Если все треугольники вырожденные или нет искомого треугольника, вывести об этом сообщение и вы - числений не производить. Проверить корректность вводимо го количества точек, в случае некорректности вывести соответс твующее сообщение (отрицательное количество, недостаточное к оли- чество).

11.Переменные XC, YC, R хранят соответственно координаты центра и радиус окружности. В массивах X(n), Y(n), n ≤ 15 хранятся координаты точек на плоскости. Рассматривая эти точки как вершины треугольников, найти такой треугольник, для котор ого прямая, соединяющая точку пересечения его медиан с центро м окружности, образует максимальный угол с осью абсцисс. Вы вести номера точек результирующего треугольника, координат ы его вершин. Если все треугольники вырожденные, вывести об это м сообщение и вычислений не производить. Проверить коррект - ность вводимого количества точек, в случае некорректност и вывести соответствующее сообщение (отрицательное количес тво, недостаточное количество).

12.Переменные XC, YC, R хранят соответственно координаты центра и радиус окружности. В массивах X(n), Y(n), n ≤ 15 хранятся координаты точек на плоскости. Рассматривая эти точки как вершины треугольников, найти такой треугольник, для котор ого прямая, соединяющая точку пересечения его высот с центром окружности, образует максимальный угол с осью абсцисс. Вы вести номера точек результирующего треугольника, координат ы его вершин. Если все треугольники вырожденные, вывести об это м сообщение и вычислений не производить. Проверить коррект - ность вводимого количества точек, в случае некорректност и вывести соответствующее сообщение (отрицательное количес тво, недостаточное количество).

13.Переменные XC, YC, R хранят соответственно координаты центра и радиус окружности. В массивах X(n), Y(n), n ≤ 15 хранят-

7. МОДУЛИ ПОЛЬЗОВАТЕЛЕЙ

269

 

 

ся координаты точек на плоскости. Рассматривая эти точки как вершины треугольников, найти такой треугольник, для котор ого прямая, соединяющая точку пересечения его биссектрис с це нтром окружности, образует максимальный угол с осью абсцисс . Вывести номера точек результирующего треугольника, коор динаты его вершин. Если все треугольники вырожденные, вывес ти об этом сообщение и вычислений не производить. Проверить корректность вводимого количества точек, в случае некорр ектности вывести соответствующее сообщение (отрицательное количество, недостаточное количество).

14.В массивах X(n), Y(n), n ≤ 15 хранятся координаты точек на плоскости. Рассматривая эти точки как вершины треугольни ков, найти такой треугольник, внутри которого расположено мак симальное количество заданных в массивах X, Y точек. Вывести номера точек результирующего треугольника, координаты его вершин, номера точек, лежащих внутри, и их количество. Если все треугольники вырожденные, вывести об этом сообщение и выч ислений не производить. Проверить корректность вводимого к оли- чества точек, в случае некорректности вывести соответств ующее сообщение (отрицательное количество, недостаточное коли чество).

15.В массивах X(n), Y(n), n ≤ 15 хранятся координаты точек на плоскости. Рассматривая эти точки как вершины треуголь ников, найти треугольник с максимальной разностью его площа ди

èплощади вписанного круга. Вывести номера точек результи рующего треугольника, координаты его вершин, координаты цен т- ра круга, радиус, площади треугольника и круга и их разност ь. Если все треугольники вырожденные, вывести об этом сообще - ние и вычислений не производить. Проверить корректность в водимого количества точек, в случае некорректности вывести соответствующее сообщение (отрицательное количество, недост аточ- ное количество).

16.В массивах X(n), Y(n), n ≤ 15 хранятся координаты точек на плоскости. Рассматривая эти точки как вершины треуголь ников, найти треугольник с максимальной разностью площади о писанного круга и площади треугольника. Вывести номера точе к результирующего треугольника, координаты его вершин, коо рдинаты центра круга, радиус, площади круга и треугольника и и х разность. Если все треугольники вырожденные, вывести об э том сообщение и вычислений не производить. Проверить коррект - ность вводимого количества точек, в случае некорректност и вывести соответствующее сообщение (отрицательное количес тво, недостаточное количество).

270

ПРАКТИКУМ ПО ПРОГРАММИРОВАНИЮ

17.В массивах X(n), Y(n), n ≤ 15 хранятся координаты точек на плоскости. Рассматривая эти точки как вершины треугольни ков, найти треугольник с минимальной площадью вписанного кру га. Вывести номера точек результирующего треугольника, коор динаты его вершин, координаты центра круга, радиус и площадь. Ес ли все треугольники вырожденные, вывести об этом сообщение и вычислений не производить. Проверить корректность вводи мого количества точек, в случае некорректности вывести соотве тствующее сообщение (отрицательное количество, недостаточное к оличе- ство).

18.В массивах X(n), Y(n), n ≤ 15 хранятся координаты точек на плоскости. Рассматривая эти точки как вершины треугольни ков, найти треугольник с минимальной площадью описанного кру га. Вывести номера точек результирующего треугольника, коор динаты его вершин, координаты центра круга, радиус и площадь. Ес ли все треугольники вырожденные, вывести об этом сообщение и вычислений не производить. Проверить корректность вводи мого количества точек, в случае некорректности вывести соотве тствующее сообщение (отрицательное количество, недостаточное к оличе- ство).

19.В массивах X(n), Y(n), n ≤ 15 хранятся координаты точек на плоскости. Рассматривая эти точки как вершины треугольни ков, найти треугольник с минимальной разностью площадей опис анного и вписанного кругов. Вывести номера точек результиру ющего треугольника, координаты его вершин, координаты центров к ругов, их радиусы, площади и разность площадей. Если все треугольники вырожденные, вывести об этом сообщение и вычисле - ний не производить. Проверить корректность вводимого кол иче- ства точек, в случае некорректности вывести соответствую щее сообщение (отрицательное количество, недостаточное коли чество).

20.Переменные XC, YC, R хранят соответственно координаты центра и радиус окружности. В массивах X(n), Y(n), n ≤ 15 хранятся координаты точек на плоскости. Рассматривая точки как вершины треугольников, найти треугольник, у которого сторона является касательной к окружности, а площадь треугольника, образованного его центром (точка пересечения медиан), центром окружности и точкой касания, минимальна. Вывести номера т о- чек результирующего треугольника, координаты его вершин , координаты вершин треугольника, площадь которого вычислял ась, саму его площадь. Если все треугольники вырожденные или н ет искомого треугольника, вывести об этом сообщение и вычисл е- ний не производить. Проверить корректность вводимого кол иче-