Практикум по программированию Обработка числовых данных
.pdf7. МОДУЛИ ПОЛЬЗОВАТЕЛЕЙ |
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 хранятся координаты точек на плоскости. Рассматривая точки как вершины треугольников, найти треугольник, у которого сторона является касательной к окружности, а площадь треугольника, образованного его центром (точка пересечения медиан), центром окружности и точкой касания, минимальна. Вывести номера т о- чек результирующего треугольника, координаты его вершин , координаты вершин треугольника, площадь которого вычислял ась, саму его площадь. Если все треугольники вырожденные или н ет искомого треугольника, вывести об этом сообщение и вычисл е- ний не производить. Проверить корректность вводимого кол иче-
