Люди!Помогите убить до конца задачу!возникают затруднения с последним подзаданием.вот задача:
Определить длины ломаных линий, которые начинаются в точке А(хА, уА), проходят через одну из точек множества М (х1, у1), (х2, у2)…. (хn, уn) и заканчиваются в точке В(хВ, уВ). Сформировать множество точек Р ≤ М, принадлежащих ломаным, длина которых удовлетворяет определенному условию:
1. Наименьшая длина
2. Длина меньше заданной величины.
А(71, 27) B(192, 79)
M{(104,51);(71,15);(91, 93);(31, 84.5);(11,19);(5, 29);(0, 52);(2, 7)}
точки данного множества находятся в порядке возрастания длин ломаных, проходящих через них.
а вот это мои соображения:
program trudno;
const
N=8; M:array[1..N,1..2] of Real =
((104, 51),
(71, 15) ,
(91, 83),
(31,84.5),
(11, 19),
(5, 29) ,
(0, 52),
(2, 7));
Type
TMatrix=array[1..N] of real;
TMnozhestvo=array[1..N,1..2] of real;
Var
x,d,k,p,y,b,k2,y3,k3,b3,b2,k1,b1,y1,y2,S,Min,xA,yA,xB,yB,k4,b4,y4:real;
i,c,g,j:integer;
L:TMatrix;
A:TMnozhestvo;
begin
xA:=71;
yA:=27;
xB:=192;
yB:=79;
for i:=1 to N do
L[i]:=sqrt(sqr(xA-M[i,1])+sqr(yA-M[i,2]))+sqrt(sqr(xB-M[i,1])+sqr(yB-M[i,2]));
writeln('„«Ёл «®¬ ле:');
for i:=1 to N do begin
write('L[',i,']=',L[i]:5:3);
writeln;end;
Min:=L[i];
for i:=1 to N do
if (L[i]<Min) then begin
Min:=L[i];
c:=i;
end;
writeln('Наименьшая длина:');
writeln('L[',c,']=',Min:3:3);
i:=c;
k2:=(yB-M[i,2])/(xB-M[i,1]);
b2:=M[i,2]-M[i,1]*k2;
k1:=(yA-M[i,2])/(xA-M[i,1]);
b1:=M[i,2]-M[i,1]*k1;
writeln('Множество Р для ломаной с наименьшей длиной:');
writeln(' x: y: ');
for i:=1 to N do begin
repeat begin d:=random(39);
x:=xA+d;
k1:=(yA-M[i,2])/(xA-M[i,1]);
b1:=M[i,2]-M[i,1]*k1;
y1:=k1*x+b1;
writeln('x=',x:0:0,' y=',y1:5:3); end; until (x>M[i,1]-1);
repeat begin d:=random(130);
x:=M[i,1]+d;
k2:=(yB-M[i,2])/(xB-M[i,1]);
b2:=M[i,2]-M[i,1]*k2;
y2:=k2*x+b2;
writeln('x=',x:0:0,' y=',y2:5:3); end; until (x>=xB-1);
repeat begin write('введите произвольную длину ломаной:');
readln(S);
if (S<Min)
then writeln('ломаной с такой длиной не существует');
end;
until (S>=Min);
for i:=1 to N do begin
if (L[i]<=S) then begin
c:=i; end;
end;
begin repeat begin
d:=random(98);
k4:=(yA-M[c,2])/(xA-M[c,1]);
b4:=M[c,2]-M[c,1]*k4;
A[g,1]:=xA+d;
A[g,2]:=k4*A[g,1]+b4;
writeln('x=',A[g,1]:0:0,' k4=',k4:0:3,' y=',A[g,2]:5:3); end; until A[g,1]>M[c,1]-3;
repeat begin
d:=random(250);
k3:=(yB-M[c,2])/(xB-M[c,1]);
b3:=M[c,2]-M[c,1]*k3;
A[g,1]:=M[c,1]+d;
A[g,2]:=k3*A[g,1]+b3;
writeln('x=',A[g,1]:0:0,' k3=',k3:0:3,' y=',A[g,2]:5:3); end; until A[g,1]>xB-2;
readln;
end;
end;
for i:=1 to N do begin
if xA=M[i,1] then begin
repeat begin
d:=random(43);
A[g,2]:=M[i,2]+d;
writeln('x=',xA:0:0,' y=',A[g,2]:0:0);end; until (A[g,2]>yA) end else
readln;
end;
end.
Проблема в том, что я не знаю как сделать так, чтобы прога выдавала мне множество точек, принадлежащих ломаным, т.е Я пока только сделал это только для одной ломаной, для самой первой, а вот как для двух и более.......ломаю голову, ведь нужно чтоб, вывелись на экран точки, принадлежащие не только для текущей ломаной, но и для предыдущих с точки зрения возрастания длин ломаных.У кого какие есть мысли?Что делать?