grf
Зарегистрирован: 05.04.2005 Сообщения: 1242 Откуда: Москва
|
Добавлено: Пн Янв 28 2008 09:59 Заголовок сообщения: |
|
|
а в чем проблемы то?
1. генеришь числа,
2. берешь первую точку, берешь любую вторую точку, берешь третью точку, измеряешь угол, заносишь в отдельные переменные эти три точки и угол.
3. циклом перебираешь третью точку, если текущий угол больше того, что хранится, то переписываешь угол и точки.
4. берешь следующую второю точку и повторяешь п.3
повторяя пункт 4 в цикле.
В итоге просто получается двойной цикл
for to do
begin
for to do
begin
....
end;
end;
если есть желание, можно оптимизировать что бы не брать одинаковые три точки несколько раз.
P.S. попутно делая проверку на деление на 0, если три точки лежат на одной прямой.
P.P.S.
Вообще при решении подобных задач, сначала составляется алгоритм решения, потом пишется его реализация на конкретном языке программирования.
Сообщите, что конкретно у Вас не получается, тогда и будем говорить)))))))))) а просто так решать за вас типовой расчет желания нет совершенно)))))))))) тем более в свое время решалось-перешалось их великое множество, так что никакого интереса не представляет))))))))))))
удачи
_________________ Errare humanum est |
|
grf
Зарегистрирован: 05.04.2005 Сообщения: 1242 Откуда: Москва
|
Добавлено: Вт Янв 29 2008 14:52 Заголовок сообщения: |
|
|
Цитата: | вот если ученье свет, то не ученье, получается - тьма? |
на скорую руку, примерно так
Код: |
program treg;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, math
{ add your units here };
var
i,j,k,n:integer;
x1,x2,x3,y1,y2,y3,a,amax,xm1,xm2,xm3,ym1,ym2,ym3,x,y,ax,by:real;
xn,yn:array[0..5] of real;
function anglevector(x1,y1,x2,y2:real):real;
begin
anglevector:=arccos((x1*x2+y1*y2)/(sqrt(x1*x1+y1*y1)*sqrt(x2*x2+y2*y2)));
end;
function angle(x1,x2,x3,y1,y2,y3:real):real;
var
a1: array[0..2] of real;
xx1,xx2,yy1,yy2:real;
begin
{1 }
xx1:=x2-x1;
xx2:=x3-x1;
yy1:=y2-y1;
yy2:=y3-y1;
a1[0]:=anglevector(xx1,yy1,xx2,yy2);
{2 }
xx1:=x1-x2;
xx2:=x3-x2;
yy1:=y1-y2;
yy2:=y3-y2;
a1[1]:=anglevector(xx1,yy1,xx2,yy2);
{3 }
xx1:=x1-x3;
xx2:=x2-x3;
yy1:=y1-y3;
yy2:=y2-y3;
a1[2]:=anglevector(xx1,yy1,xx2,yy2);
if a1[0]>a1[1] then
angle:=a1[0]
else
angle:=a1[1];
if a1[2]>angle then
angle:=a1[2];
end;
begin
randomize;
amax:=0;
xm1:=-1;
xm2:=-1;
xm3:=-1;
writeln('insert number points');
readln(n);
if n<3 then
begin
write('It''s cool to be in school!!!! n=3');
n:=3;
end;
n:=n-1;
for i:=0 to n do
begin
xn[i]:=random(100);
yn[i]:=random(100);
end;
for i:=0 to n do
for j:=1 to n do
for k:=2 to n do
if (i<>j) then
if (i<>k) then
if (j<>k) then
if not ((xn[i]=xn[j]) and (yn[i]=yn[j])) then
if not ((xn[j]=xn[k]) and (yn[k]=yn[j])) then
if not ((xn[i]=xn[k]) and (yn[i]=yn[k]) )then
begin
ax:=(yn[i]-yn[j])/(xn[i]-xn[j]);
by:=yn[i]-ax*yn[i];
y:=ax*xn[k]+by;
if y<>yn[k] then
begin
a:=angle(xn[i],xn[j],xn[k],yn[i],yn[j],yn[k]);
if a>amax then
begin
amax:=a;
xm1:=i;
xm2:=j;
xm3:=k;
end;
end;
end;
amax:=RadToDeg(amax);
writeln;
writeln('---------------------POINTS----------------------------------');
for i:=0 to n do
writeln(' x',i,'=',xn[i],' y',i,'=',yn[i]);
writeln;
writeln('----------------- MAX points Angle -------------------------');
writeln('point 1 number',xm1);
writeln('point 2 number',xm2);
writeln('point 3 number',xm3);
writeln('MAX angle',amax,' grad');
end.
|
дальше разбирайся сам)))))))))))
_________________ Errare humanum est |
|
grf
Зарегистрирован: 05.04.2005 Сообщения: 1242 Откуда: Москва
|
Добавлено: Чт Янв 31 2008 09:44 Заголовок сообщения: |
|
|
только здесь еще до фига подводных камней. Например, не проверяется соответствие типа вводимого значения пользователем.
Проверяется, если три точки лежат на одной прямой, этот случай просто игнорируется, так же как и случай, если две точки совпадают, но если три точки не лежат на одной прямой, но две первые лежат на вертикальной прямой, то программа просто молча выкинет, с сообщением - деление на 0, хотя реально этот угол можно обсчитать)))))))))) в общем работы здесь еще вагон)))))))))))))
потому, если препод у вас нормальный, за мою прогу в том виде, какая она сейчас, он вам поставит банан!!!!!!! и будет абсолютно прав!!!!! Если же вы удалите все (наивно), большинство камней, то вы и разберетесь с ней)))))))))))))))))))))))
_________________ Errare humanum est |
|