Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal] Найти значение максимального периметра


Автор: Foxy 15.1.2007, 21:07
Дано N треугольников и координаты их вершин (х,у). Вывести значение максимального периметра. (Задачу нужно решить с помошью подрограммы-процедуры)

Автор: Ramzey 15.1.2007, 21:15
так что надо найти максимальный периметр из этих треугольников?

Автор: sergejzr 15.1.2007, 21:15
Для домашних заданий, курсовых, существует "Центр Помощи"

Тема перенесена! 

Автор: Sunvas 15.1.2007, 21:31
Все просто. Задача решается в несколько этапов.
1. Сначала по теореме Пифагора вычисляем все стороны треугольника
2. Потом их суммируем
3. Запоминаем периметр треугольника и его номер в какой-нить массив
4. Ищим номер треугольника у которого самый большой перимтр.
Я бы закодил, но что-то вломно страшно.

Автор: powerfox 15.1.2007, 22:09
Код

program max_perimetr;
const
N=3;
type pair=record
 x:Integer;
 y:Integer;
 end;
type triangle=record
 points:Array[1..3] of Pair;
 end;

function perimetr(abs:triangle):Real;
var
a,b,c:Real;
begin
a:=sqrt( sqr(abs.points[2].x-abs.points[1].x)+sqr(abs.points[2].y-abs.points[1].y) );
b:=sqrt( sqr(abs.points[3].x-abs.points[2].x)+sqr(abs.points[3].y-abs.points[2].y) );
c:=sqrt( sqr(abs.points[3].x-abs.points[1].x)+sqr(abs.points[3].y-abs.points[1].y) );
perimetr:=a+b+c;
end;

var
triangles:Array[1..N] of triangle;
i,j:Integer;
current,max:Real;
begin
for i:=1 to N do
  begin
  Writeln('Введите координаты ',i,'-го треугольника');
  for j:=1 to 3 do
   begin
   write('Введите x y точки ', j ,':');
   read(triangles[i].points[j].x);
   readln(triangles[i].points[j].y);
   end;
  end;

max:=0;
for i:=1 to N do
  begin
  current:=perimetr(triangles[i]);
  if current > max then
   max:=current;
end;

writeln('Наибольший периметр: ', max);

end.

Автор: powerfox 15.1.2007, 22:35
Цитата(Sunvas @  15.1.2007,  22:31 Найти цитируемый пост)
1. Сначала по теореме Пифагора вычисляем все стороны треугольника

При чём здесь Пифагор?

Автор: Sunvas 15.1.2007, 23:38
Цитата(powerfox @  15.1.2007,  22:35 Найти цитируемый пост)
При чём здесь Пифагор?

А чья это теорема про два катета и гипотенузу?

Автор: V.A.KeRneL 16.1.2007, 03:15
Цитата(sergejzr @  15.1.2007, 21:15 Найти цитируемый пост)

Для домашних заданий, курсовых, существует "Центр Помощи"

Тема перенесена!

Что-то не похоже... 
Или, похоже, Alexeis решил, что она интересная... 
smile

Автор: Magister Y0da 16.1.2007, 03:32
ты не мог бы спросить что-нибудь посложнее?

Автор: powerfox 16.1.2007, 17:16
Цитата(Sunvas @  16.1.2007,  00:38 Найти цитируемый пост)
А чья это теорема про два катета и гипотенузу?

А при чём здесь катеты и гипотенуза? Треугольники не прямоугольные ;) И стороны неизвестны ;)

Автор: Sunvas 16.1.2007, 17:49
Цитата(powerfox @  16.1.2007,  17:16 Найти цитируемый пост)
А при чём здесь катеты и гипотенуза? Треугольники не прямоугольные ;) И стороны неизвестны ;)

А длину сторон ты как находишь? По-моиму по теореме Пифагора! - Когда даны координаты начала и конца отрезнка и надо найти его длину.

Автор: powerfox 16.1.2007, 21:15
Цитата(Sunvas @  16.1.2007,  18:49 Найти цитируемый пост)
А длину сторон ты как находишь? По-моиму по теореме Пифагора! - Когда даны координаты начала и конца отрезнка и надо найти его длину.

Теорема Пифагора - частный случай теоремы косинусов. Служит для нахождения одной из сторон по двум другим. Нахождение длины стороны по координатам идёт по формуле длины вектора.
Цитата(powerfox @  15.1.2007,  23:09 Найти цитируемый пост)
a:=sqrt( sqr(abs.points[2].x-abs.points[1].x)+sqr(abs.points[2].y-abs.points[1].y) );

Вектор а: (abs.points[2].x-abs.points[1].x, abs.points[2].y-abs.points[1].y).

Автор: V.A.KeRneL 17.1.2007, 14:31
По-моему, powerfox решил задачу. 
Только нечаянно вставил следующий кусочек кода дважды.
Код

max:=0;
for i:=1 to N do
  begin
  current:=perimetr(triangles[i]);
  if current > max then
   max:=current;
end;

Если это поправит, то будет совсем красиво! smile

Давайте автор пометит вопрос решённым, и перенесём топик в «Центр помощи». smile

Автор: powerfox 17.1.2007, 16:05
Цитата(V.A.KeRneL @  17.1.2007,  15:31 Найти цитируемый пост)
Только нечайно вставил следующий кусочек кода дважды.

 smile Отредактировал 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)