В заданном множестве точек на плоскости найдите четыре точки, которые могут служить вершинами квадрата - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

1)В заданном множестве точек на плоскости найдите четыре точки, которые могут служить вершинами квадрата.

Решение задачи: «В заданном множестве точек на плоскости найдите четыре точки, которые могут служить вершинами квадрата»

textual
Листинг программы
const nmax=20; //макс. кол.точек
type Point=record //тип - точка
           x,y:integer;
           end;
//является ли квадратом
function Square(a,b,c,d:Point):boolean;
var s1,s2,s3,s4,s5,s6:Longint;
begin
s1:=sqr(a.x-b.x)+sqr(a.y-b.y);
s2:=sqr(a.x-c.x)+sqr(a.y-c.y);
s3:=sqr(a.x-d.x)+sqr(a.y-d.y);
s4:=sqr(b.x-c.x)+sqr(b.y-c.y);
s5:=sqr(b.x-d.x)+sqr(b.y-d.y);
s6:=sqr(c.x-d.x)+sqr(c.y-d.y);
Square:=((s1=s3)and(s1=s4)and(s1=s6)and(s2=s5)and(s2=2*s1))
     or ((s1=s2)and(s1=s5)and(s1=s6)and(s3=s4)and(s3=2*s1))
     or ((s2=s3)and(s2=s4)and(s2=s5)and(s1=s6)and(s1=2*s2));
end;
var t:array[1..nmax] of Point;///массив точек
    n,i,j,k,l,p,q:byte;
    f:boolean;
begin
repeat
write('Количество точек от 4 до ',nmax,' n=');
readln(n);
until n in [4..nmax];
writeln('Введите координаты ',n,' точек, целые числа:');
for i:=1 to n do
  begin
   writeln('Точка ',i);
   write('x=');readln(t[i].x);
   write('y=');readln(t[i].y);
  end;
clrscr;
writeln('Координаты:');
for i:=1 to n do
 begin
  write(i:2,'(',t[i].x,';',t[i].y,') ');
  if i mod 5=0 then writeln;
 end;
writeln;
//выбираем по 4 разных точки
f:=false;//нет квадрата
i:=1;
while(i<=n-3)and not f do
 begin
  j:=i+1;
  while(j<=n-2)and not f do
   begin
    k:=j+1;
    while(k<=n-1)and not f do
     begin
      l:=k+1;
      while(l<=n)and not f do
       begin
        if Square(t[i],t[j],t[k],t[l])then
         begin
          writeln('Есть 4 точки, образующие квадрат, это:');
          writeln(i:2,'(',t[i].x,';',t[i].y,') ');
          writeln(j:2,'(',t[j].x,';',t[j].y,') ');
          writeln(k:2,'(',t[k].x,';',t[k].y,') ');
          writeln(l:2,'(',t[l].x,';',t[l].y,') ');
          f:=true;
         end
        else inc(l);
       end;
      if not f then inc(k);
     end;
    if not f then inc(j);
   end;
  if not f then inc(i);
 end;
if not f then write('Никакие 4 точки не образуют квадрат');
end.

Объяснение кода листинга программы

Данный код написан на языке Pascal ABC и выполняет следующую задачу: проверяет, можно ли из заданного множества точек на плоскости составить четыре точки, которые будут вершинами квадрата. В коде объявлены следующие переменные:

  • nmax - максимальное количество точек (не превышает 20).
  • Point - тип данных для представления точки.
  • s1, s2, s3, s4, s5, s6 - переменные для хранения результатов вычислений.
  • t - массив точек.
  • f - логическое значение, указывающее наличие квадрата.
  • i, j, k, l, p, q - переменные для индексации массива точек и циклов. В начале кода выводится запрос на ввод количества точек от 4 до 20, а затем вводятся координаты каждой точки. После этого выводится результат работы программы. Далее идет основной цикл, который выполняется до тех пор, пока не будет найден квадрат из четырех точек. Внутри цикла происходит проверка наличия квадрата путем вычисления значения функции Square. Если значение равно true, то выводится информация о найденных точках, составляющих квадрат. Если же значение равно false, то увеличивается значение переменной i, j, k или l, чтобы перейти к следующей комбинации точек. Если ни одна комбинация не образует квадрат, выводится сообщение об этом. Таким образом, данный код позволяет найти четыре точки, которые могут служить вершинами квадрата в заданном множестве точек на плоскости.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы