Новые сообщения · Правила  
  • Страница 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
Поиск: