Новые сообщения · Правила  
  • Страница 1 из 1
  • 1
Модератор форума: Berestovskiy  
Помоги плиз найти что не так
Выбрать три различные точки из заданного множества точек на плоскости так, чтобы была минимальной разность между количествами точек, лежащих внутри и вне треугольника с вершинами в выбранных точках.
Делала сама, но найти ошибку не могу( рисует совсем не то что нужно(
Добавлено (31.01.11, 22:47)
---------------------------------------------
Code

uses Graph, crt;
const nmax=100; x4=500; y4=500; rad=2;
var d, m, n, i, j, k, l, z1, z2, z3, inside, outside, InOut, minraz, cross : integer;
x: array[1..nmax] of real; y: array[1..nmax] of real; f: text;
S, s1, s2, s3, X1, X2, X3, Y1, Y2, Y3 : real;
procedure OpenInFile(var f: text);
var
name: string;
error: integer;
begin
repeat
writeln('Vvedite put k faily:');
readln(name);
assign(f, name);
{$i-} reset(f); {$i+}
error:=ioresult;
if error<>0 then
writeln('not');
until error=0;
end;

procedure crossing(var x1,x2,y1,y2, x3, y3 : real; x4,y4: real; cross: integer);
var
ua, ub, a, b, del : real;
begin
a:=(x4-x3)*(y1-y3) - (y4-y3)*(x1-x3);
b:=(x2-x1)*(y1-y3) - (y2-y1)*(x1-x3);
del:=(y4-y3)*(x2-x1) - (x4-x3)*(y2-y1);
if del<>0 then begin
ua:=a/del;
ub:=b/del;
end;
if ((ua>0) and (ua<1)) and ((ub>0)and(ub<1)) then
cross:=cross+1;
end;

[b]Добавлено[/b] (31.01.11, 22:48)
---------------------------------------------
BEGIN
d := Detect;
OpenInFile(f);
n:=1;
while not eof(f) do begin
readln(f, x[n], y[n]);
n:=n+1;
end;
inside:=0;
outside:=0;
minraz:=n;
for i:=1 to n do begin
for j:=i+1 to n do begin
for k:=j+1 to n do begin
for m:=1 to n do begin
cross:=0;
crossing(x[i], y[i], x[j], y[j], x[m], y[m], x4, y4, z1);
crossing(x[k], y[k], x[j], y[j], x[m], y[m], x4, y4, z2);
crossing(x[i], y[i], x[k], y[k], x[m], y[m], x4, y4, z3);
cross:=cross+z1+z2+z3;
if cross=1 then
inside:=inside+1
else
outside:=outside+1;
end;

InOut:=abs(inside-outside);
if InOut<=minraz then begin
minraz:=InOut;
X1:=x[i];
Y1:=y[i];
X2:=x[j];
Y2:=y[j];
X3:=x[k];
Y3:=y[k];
end;
end;
end;
end;
InitGraph(d, m, '');
SetColor(green);
Line(round(X1), round(Y1), round(X2), round(Y2));
Line(round(X2), round(Y2), round(X3), round(Y3));
Line(round(X3), round(Y3), round(X1), round(Y1));
close (f);
readln;
closeGraph;
end.
1 | Автор: МарьЯ | 2011-01-31, 22:48 | Изменено: МарьЯ - Пн, 2011-01-31, 22:48   |  Репутация: [ + 2 ]
  • Страница 1 из 1
  • 1
Поиск: