Код: Выделить всё
function dlina (x1,x2,y1,y2:integer):real;
begin
dlina:=sqrt(sqr(x1-x2)+sqr(y1-y2));
end;
function perimetr (x1,x2,x3,y1,y2,y3:integer):real;
begin
perimetr:=dlina(x1,x2,y1,y2)+dlina(x1,x3,y1,y3)+dlina(x2, x3,y2,y3);
end;
procedure proverka (perimetr:real);
var Pmax:real;
Xmax1,Xmax2,Xmax3,Ymax1,Ymax2,Ymax3:integer;
begin
Pmax:=0;
if perimetr>Pmax them begin
Pmax:=perimetr;
Ymax1:=y1;
Ymax2:=y2;
Ymax3:=y3;
Xmax1:=x1;
Xmax2:=x2;
Xmax3:=x3;
end;
begin
for x1:=0 to 639 do
for x2:=0 to 639 do
for x3:=0 to 639 do
for y1:=0 to 479 do
for y2:=0 to 479 do
for y3:=0 to 479 do
proverka(perimetr(x1,x2,x3,y1,y2,y3)) ;
end;
Это не совсем то, что тебе надо, но циклы должны работать. Прога переберёт много вырожденных треугольников, в том числе, с нулевым периметром, но ни один из них не может иметь максимльного периметра, поэтому будут выбраны вершины невырожденного треугольника, в котором ни одна вершина не совпадает с другой. В функциях dlina и perimetr ошибочны альтерантивы: если условие не выполняется, то что будет возвращено? А должне возращаться ноль. По графике есть конкретные вопросы? И в следующий раз подсвечивай синтаксис тегами
Код: Выделить всё
, [/ code] без пробелов и форматируй код пробелами.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
[code]
uses Crt, Graph;
var
grMode, grDriver: Integer;
x1,x2,x3,y1,y2,y3:integer;
Pmax:real;
Xmax1,Xmax2,Xmax3,Ymax1,Ymax2,Ymax3:integer;
function dlina (x1,x2,y1,y2:integer):real;
begin
dlina:=sqrt(sqr(x1-x2)+sqr(y1-y2));
end;
function perimetr (x1,x2,x3,y1,y2,y3:integer):real;
begin
perimetr:=dlina(x1,x2,y1,y2)+dlina(x1,x3,y1,y3)+dlina(x2, x3,y2,y3);
end;
procedure proverka (perimetr:real);
begin
Pmax:=0;
if perimetr>Pmax them begin
Pmax:=perimetr;
Ymax1:=y1;
Ymax2:=y2;
Ymax3:=y3;
Xmax1:=x1;
Xmax2:=x2;
Xmax3:=x3;
end;
begin
grDriver:=0;
grMode:=0;
InitGraph(grDriver, grMode, '');
ang := 1; m := 100;
for x1:=0 to 639 do
for x2:=0 to 639 do
for x3:=0 to 639 do
for y1:=0 to 479 do
for y2:=0 to 479 do
for y3:=0 to 479 do
proverka(perimetr(x1,x2,x3,y1,y2,y3)) ;
MoveTo(x1,y1);
LineTo(x2,y2);
LineTo(x3,y3);
LineTo(x1,y1);
repeat until KeyPressed;
CloseGraph;
end.