Найти четырехугольник наибольшей площади с вершинами в заданных точках - PascalABC.NET

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

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

На плоскости дан набор точек с целочисленными координатами. Необходимо найти четырехугольник наибольшей площади с вершинами в этих точках, две вершины которого лежат на оси Ox, а две оставшиеся - по разные стороны от оси Ox. В первой строке вводиться одно целое число положительное - количество точек N.Каждая из следующих строк содержит два целых числа: сначала координата Х затем координата Y очередной точки. Программа должна вывести одно целое число - максимальную площадь четырехугольника удовлетворяющего условиям задачи. У меня получилось так(можно ли это как-то улучшить? Если не трудно помогите)
Листинг программы
  1. program C4;
  2. var
  3. x: array [1..1000] of integer;
  4. y: array [1..1000] of integer;
  5. N, i, c, maxx, maxxr, maxxl, maxy, maxy1: integer;
  6. s: real;
  7. begin
  8. readln(N);
  9. c := 0;
  10. for i := 1 to N do
  11. begin
  12. read(x[i], y[i]);
  13. end;
  14. for i := 1 to N do
  15. begin
  16. if y[i] = 0 then
  17. c := c + 1;
  18. end;
  19. if c < 2 then exit;
  20. if ((maxxr > 0) and (maxxl < 0)) or ((maxxr < 0) and (maxxl > 0)) then begin
  21. for i := 1 to n do
  22. begin
  23. if y[i] = 0 then begin
  24. if (maxxl > x[i]) then
  25. begin
  26. maxxl := x[i];
  27. end;
  28. end;
  29. end;
  30. maxx := abs(maxxl) + abs(maxxr);
  31. end;
  32. if ((maxxr <= 0) and (maxxl <= 0)) or ((maxxr >= 0) and (maxxl >= 0)) then begin
  33. for i := 1 to n do
  34. begin
  35. if y[i] = 0 then begin
  36. if (maxxr < x[i]) then
  37. begin
  38. maxxr := x[i];
  39. end;
  40. end;
  41. end;
  42. maxx := abs(abs(maxxl) - abs(maxxr));
  43. end;
  44. for i := 1 to N do
  45. begin
  46. if (maxy < y[i]) then
  47. begin
  48. maxy := y[i];
  49. end;
  50. if (maxy1 > y[i]) then
  51. begin
  52. maxy1 := y[i];
  53. end;
  54. end;
  55. s := 0.5 * maxx * (maxy + abs(maxy1));
  56. writeln(s);
  57. end.

Решение задачи: «Найти четырехугольник наибольшей площади с вершинами в заданных точках»

textual
Листинг программы
  1. const
  2.   MaxInt = 2147483647;
  3.   MinInt = -2147483648;
  4.  
  5. var
  6.   N, i, x, y, xRight, xLeft, yHigh, yLow: integer;
  7.   s: real;
  8.  
  9. begin
  10.   readln(N);
  11.   xRight := MinInt; xLeft := MaxInt;
  12.   yHigh := MinInt; yLow := MaxInt;
  13.   for i := 1 to N do
  14.   begin
  15.     read(x, y);
  16.     if y = 0 then
  17.     begin
  18.       if xRight < x then
  19.         xRight := x;
  20.       if xLeft > x then
  21.         xLeft := x;
  22.     end
  23.     else
  24.     begin
  25.       if yLow > y then
  26.         yLow := y;
  27.       if yHigh < y then
  28.         yHigh := y;
  29.     end;
  30.   end;
  31.   if (xRight = MinInt) or (xLeft = MaxInt) or (yHigh < 0) or (yLow > 0) then halt(1);
  32.   writeln((xRight - xLeft) * (yHigh - yLow) / 2);
  33. end.

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

В этом коде выполняется поиск четырёхугольника наибольшей площади, заданного набором вершин в пространстве (с координатами по осям x и y). Код считывает количество вершин этого четырёхугольника (N) и затем считывает координаты вершин. Затем он вычисляет границы этого четырёхугольника, т.е. наименьшую и наибольшую оси x и y, и записывает их в переменные xRight, xLeft, yHigh, yLow. Далее, после цикла по всем вершинам, он проверяет, является ли одна из границ x или y «слишком большой» (т.е. равной min_int или max_int), и если это так, то прерывает выполнение программы, выводя сообщение об ошибке. Если все границы в порядке, то он выводит площадь этого четырёхугольника, вычисляя её как разность произведений (xRight — xLeft) * (yHigh — yLow) / 2.

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


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

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

12   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы