Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задачка про треугольники

Автор: gulldan 9.10.2007 0:17

Всем привет
Перейду непосредственно к задаче:
Нужно при заданных значениях сторон треугольника определить его вид
сложность у меня возника при определение прямоугольного треугольника ,немогу понять как определить что он прямоугольный (зная только что стороны должны быть кратны 3 ,4 ,5 соответственно)
помогите пожалуйста rolleyes.gif

Автор: мисс_граффити 9.10.2007 0:25

blink.gif почему они должны быть кратны 3,4,5?
Длина стороны - обязательно целое число, что ли?

Автор: gulldan 9.10.2007 0:36

вроде треугольники со сторонами кратными 3.4.5 то он прямоугольный я неособо много знаю я еще ученик 11 класса,но если Вы правы тогда тем более незнаю..

Автор: Айра 9.10.2007 0:43

Ну, по идее, в прямоугольном треугольнике квадрат гипотенузы равен сумме квадратов катетов, т.е. если у тебя строго выполняется это равенство, значит треугольник прямоугольный))

Автор: мисс_граффити 9.10.2007 0:43

неужели до 11 класса еще не проходили теорему Пифагора?

Автор: gulldan 9.10.2007 0:45

точно xD
забыл про нее...
спс

Автор: Neznaika 9.10.2007 1:18

Извиняюсь, но если подкоренное выражение в формуле Герона, используемое для вычисления площади треугольника по трём его сторонам, меньше или равно нулю, то эти самые три стороны треугольник не образуют.
И дальнейшие проверки бесполезны.

Автор: Айра 9.10.2007 2:33

Цитата
но если подкоренное выражение в формуле Герона ... то эти самые три стороны треугольник не образуют

Да, как-то про такую ситуацию и не сказали.. По-моему, можно пойти еще проще: "в треугольнике любая сторона меньше суммы двух других сторон", если это условие не выполняется, то нет и треугольника))

Автор: Lapp 9.10.2007 7:20

Цитата(Айра @ 8.10.2007 23:33) *
По-моему, можно пойти еще проще: "в треугольнике любая сторона меньше суммы двух других сторон", если это условие не выполняется, то нет и треугольника))

Верно, только я бы на всякий случай подчеркнул тут слово "любая". Выполнение этого условия для одной или двух сторон недостаточна для существования треугольника, то есть проверять нужно все три:
TriangCanBeBuild := (a+b>=c) and (b+c>=a) and (c+a>=b);
. Дополнительная информация, если интересует, здесь: http://forum.pascal.net.ru/index.php?showtopic=15698 .

Еще можно сказать, остроугольный треугольник или тупоугольный, все по той же теореме Пифагора. Берем наибольшую сторону и сравниваем ее с суммой квадратов остальных.

М
А вообще, не понимаю, что эта тема делает в Задачах. До моего поста она не имела к Паскалю никакого отношения - я ее за уши притянул.. gulldan, учти это, пожалуйста.


Автор: Neznaika 9.10.2007 15:27

Наверно задача все же имеет отношение к программированию.
Но сначала математика.

Теорема 1.
В любом треугольнике против большего угла лежит большая сторона.
-----------------------------------------------------------------------------------
По значению самого большого угла можно определить вид треугольника.
По условию заданы стороны треугольника, следовательно нужно нужно найти
максимальную из трех сторон(вот тут можно применить программирование - лучше всего
создать массив из трёх элементов - сторон треугольника - и отсортировать его по убыванию,
тогда первый элемент массива - большая сторона).

Теорема 2.
Теорема косинусов или обобщённая теорема Пифагора.
c*c = a*a + b*b - 2*a*b*cosC, где С - угол напротив стороны c.
----------------------------------------------------------------------------------
Про косинус известно, что он больше нуля для [0:pi/2),
равен нулю при pi/2,
и меньше нуля для (pi/2,pi].
Следовательно, нужно узнать знак 2*a*b*cosC= a*a + b*b - c*c (так как выражение 2*a*b > 0,
то оно не помешает для вычисления знака косинуса, т.е. делить на него не нужно).
Иногда для обозначения знака используют функцию Sign(X), которая равна -1, 0 и 1
для отрицательных, нулевого и положительных значений X соответственно.
Тогда получим:
case Sign(a*a + b*b - c*c) of
-1 : Угол > pi/2
0 : Угол = pi/2
1 : Угол < pi/2
end.

Если например стророны треугольника объявить как массив Line = array[1..3] of LongInt
то после его сортировки по убыванию можно записать следующие операторы
(тип переменной X - LongInt):


X := Line[2]*Line[2] + Line[3]*Line[3] - Line[1]*Line[1];
if X < 0 then
Write('Треугольник тупоугольный.')
else
if X > 0 then
Write('Треугольник остроугольный.')
else
Write('Треугольник прямоугольный.')


===========================================================
Поправка. Весь массив сортировать не нужно, нужно только выделить в нём максимальный элемент,
то есть достаточно одного прохода:

if Line[3] > Line[2] then
begin
X := Line[2]; Line[2] := Line[3]; Line[3] := X
end;
if Line[2] > Line[1] then
begin
X := Line[1]; Line[1] := Line[2]; Line[2] := X
end;



Теперь можно сконструировать целую программу и поместить в архив...
Правда для не очень больших целых чисел можно решить эту задачу в уме.

Автор: Айра 9.10.2007 21:31

Цитата
Верно, только я бы на всякий случай подчеркнул тут слово "любая".

Ага. Там должно быть "каждая", ошибочка вышла wink.gif
Цитата
Еще можно сказать, остроугольный треугольник или тупоугольный, все по той же теореме Пифагора. Берем наибольшую сторону и сравниваем ее с суммой квадратов остальных.

Т.е. если с^2>a^2+b^2, то треугольник тупоугольный, если меньше, то остроугольный?.. smile.gif

Автор: Lapp 10.10.2007 6:15

Цитата(Айра @ 9.10.2007 18:31) *
Т.е. если с^2>a^2+b^2, то треугольник тупоугольный, если меньше, то остроугольный?.. smile.gif

Да. Neznaika, кажется, раскрыл это еще более подробно - хотя, точно это утверждать не могу, так как не нашел в себе сил дочитать его пост. Неясно, зачем столько теории для такой простой задачки..

Автор: Lapp 10.10.2007 7:14

Все же нашел в себе силы прочитать пост Незнайки..
Возможно, это оффтоп, но я все же выскажу свое мнение, которое одновременно и админское, и пользовательское.

2 Neznaika:
Мне нравится твоя эрудиция. Я давно ищу возможность повысить тебе репутацию, но.. не могу.
Скажи, почему большинство твоих постов совершенно не по делу? На Форуме (по крайней, мере на этом) не принято повторять то, что уже сказано выше в теме (а особенно, без ссылки на автора). Также, не принято сильно выходить за рамки темы (без необходимости). Твой пост - сплошная математика, теория, хотя я указал, что это не приветствуется в разделе Задачи. Далее - что нового он привнес по сравнению последним предложением в моем посте?.. Ничего.
Я читаю твои ответы, читаю замечания Волво к ним. И в большинстве случаев Волво прав.. Будь так добр - умерь свой пыл, отвечай только по делу и только то, что еще не сказали до тебя. И тогда все будет хорошо.
Еще раз: я симпатизирую тебе. Но я буду понижать тебе репутацию, если будешь продолжать отвечать не по делу. Спасибо за внимание.