Найти три треугольника самой большой площади - Free Pascal

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

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

Дано n точек необходимо найти три треугольника самой большой площади и вывести их координаты

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

textual
Листинг программы
  1. uses crt;
  2. const nmax=20;{максимальное количество точек}
  3. type point=record {тип точка}
  4.            x,y:integer;
  5.            end;
  6.      trg=record {тип треугольник}
  7.          v1,v2,v3:point;{вершины}
  8.          s:real; {площадь}
  9.          end;
  10. var a:array[1..nmax] of point;
  11.     t:array[1..1140] of trg;{массив точек, максимально 20!/17!/3!=1140}
  12.     n,m,i,j,k,imx,jmx,kmx:integer;
  13.     x:trg;
  14. begin
  15. clrscr;
  16. randomize;
  17. {зададим количество точек}
  18. repeat
  19. write('Количество точек от 4 до ',nmax,' n=');
  20. readln(n);
  21. until n in [4..nmax];
  22. writeln('Координаты точек');
  23. {зададим координаты точек}
  24. for i:=1 to n do
  25.  begin
  26.   a[i].x:=-10+random(21);
  27.   a[i].y:=-10+random(21);
  28.   write(i:2,'(',a[i].x:3,';',a[i].y:3,')  ');
  29.   if i mod 6=0 then writeln;
  30.  end;
  31. writeln;
  32. {создадим массив возможных треугольников}
  33. m:=0;
  34. for i:=1 to n-2 do
  35. for j:=i+1 to n-1 do
  36. for k:=j+1 to n do
  37.  begin
  38.   m:=m+1;
  39.   t[m].v1.x:=a[i].x;
  40.   t[m].v1.y:=a[i].y;
  41.   t[m].v2.x:=a[j].x;
  42.   t[m].v2.y:=a[j].y;
  43.   t[m].v3.x:=a[k].x;
  44.   t[m].v3.y:=a[k].y;
  45.   t[m].s:=abs((t[m].v1.x-t[m].v3.x)*(t[m].v2.y-t[m].v3.y)-
  46.               (t[m].v2.x-t[m].v3.x)*(t[m].v1.y-t[m].v3.y))/2;
  47.  end;
  48. {отсортируем его по убыванию}
  49. for i:=1 to m-1 do
  50. for j:=i+1 to m do
  51. if t[i].s<t[j].s then
  52.  begin
  53.   x:=t[i];
  54.   t[i]:=t[j];
  55.   t[j]:=x;
  56.  end;
  57. writeln('3 треугольника самой большой площади');
  58. {возьмем 3 первых}
  59. for i:=1 to 3 do
  60.  begin
  61.   write('Площадь=',t[i].s:6:2,' координаты: (',t[i].v1.x:3,';',t[i].v1.y:3,') ');
  62.   write('(',t[i].v2.x:3,';',t[i].v2.y:3,') ');
  63.   writeln('(',t[i].v3.x:3,';',t[i].v3.y:3,')');
  64.  end;
  65. readln
  66. end.

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

  1. Объявление переменных и типов данных: — uses crt; — const nmax=20; {максимальное количество точек} — type point=record {тип точка} x,y:integer; end; — type trg=record {тип треугольник} v1,v2,v3:point; {вершины} s:real; {площадь} end; — var a:array[1..nmax] of point; {массив точек} — var t:array[1..1140] of trg; {массив возможных треугольников, максимально 20!/17!/3!=1140} — var n,m,i,j,k,imx,jmx,kmx:integer; — var x:trg;
  2. Задание количества точек: — repeat write('Количество точек от 4 до ',nmax,' n='); readln(n); until n in [4..nmax]; writeln('Координаты точек');
  3. Задание координат точек: — for i:=1 to n do begin a[i].x:=-10+random(21); a[i].y:=-10+random(21); write(i:2,'(',a[i].x:3,';',a[i].y:3,')  '); if i mod 6=0 then writeln; end; writeln;
  4. Создание массива возможных треугольников: — m:=0; — for i:=1 to n-2 do for j:=i+1 to n-1 do for k:=j+1 to n do begin m:=m+1; t[m].v1.x:=a[i].x; t[m].v1.y:=a[i].y; t[m].v2.x:=a[j].x; t[m].v2.y:=a[j].y; t[m].v3.x:=a[k].x; t[m].v3.y:=a[k].y; t[m].s:=abs((t[m].v1.x-t[m].v3.x)(t[m].v2.y-t[m].v3.y)-             (t[m].v2.x-t[m].v3.x)(t[m].v1.y-t[m].v3.y))/2; end;
  5. Сортировка массива треугольников по убыванию площади: — for i:=1 to m-1 do for j:=i+1 to m do if t[i].s<t[j].s then begin x:=t[i]; t[i]:=t[j]; t[j]:=x; end;
  6. Вывод трех треугольников самой большой площади: — for i:=1 to 3 do begin write('Площадь=',t[i].s:6:2,' координаты: (',t[i].v1.x:3,';',t[i].v1.y:3,') '); write('(',t[i].v2.x:3,';',t[i].v2.y:3,') '); writeln('(',t[i].v3.x:3,';',t[i].v3.y:3,')'); end;
  7. Чтение из ввода для завершения программы: — readln end.

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


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

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

7   голосов , оценка 4 из 5

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

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

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