А18

Задача. Треугольник задан величинами своих углов [latex]x[/latex], [latex]y[/latex], [latex]z[/latex]   и радиусом описанной окружности [latex]R[/latex].

Найти стороны треугольника.

x y z R a b c Комментарий
95 36 49 3  5.98 3.53 4.53 Тест пройден
90 45 45 7 14 9.9 9.9 Тест пройден
60 60 60 14 24.25 24.25 24.25 Тест пройден
47 34 56 9 Неверное значение углов.

Для решения этой задачи использовалась формулы:

[latex]a=R\sin(x)[/latex] [latex]b=R\sin(y)[/latex] [latex]c=R\sin(z)[/latex]

Если при выполнении программы вы зададите некоторое значение углов и при проверке программой окажется , что значение углов  больше или меньше 180+»eps» ( eps=0.01 ) , то программа не выполнит поставленную задачу, т.к. в этом случае треугольник существовать не будет.

Для выполнения программы и проверки тестов вы можете воспользоваться этой ссылкой

Related Images:

Ю2.7

Задача.

Треугольник и круги.

Лежит ли заданный  на плоскости треугольник АВС в области пересечения заданных кругов:

[latex](x-a1)^2+(y-b1)^2<r1^2[/latex] , и [latex](x-a2)^2+(y-b2)^2<r2^2[/latex]  ?
Ссылка на программу на С++: http://ideone.com/NYTAWN

Код программы на Java:

Ссылка на программу на Java:http: //ideone.com/QZ7RB1

Решение:

Поскольку все фигуры выпуклые достаточно проверить вершины треугольника. Подставляем координаты всех трёх вершин в оба неравенства. Если все условия удовлетворены, то лежит. Если хоть одно условие не выполняется, то не лежит.

Тест

a1 b1 r1 a2 b2 r2 ax bx cx ay by cy Принадлежит?
1 2 3 3 4 5 6 7 8 6 7 4 нет
1 2 15 3 4 12 6 7 8 6 7 4 да
7 5 10 4 6 16 6 7 3 5 6 7 да
7 5 5 4 6 3 6 7 3 5 6 7 нет

 

Related Images:

Ю2.1

Задача. Заданы три числа: [latex]a[/latex], [latex]b[/latex], [latex]c[/latex]. Определить, могут ли они быть сторонами треугольника, и если да, то определить его тип: равносторонний, равнобедренный, разносторонний. Замечание. Условие существования треугольника: [latex]a\leq b+c[/latex];  [latex]b\leq a+c[/latex];  [latex]c\leq a+b[/latex]. Нельзя исключать экстремальных случаев, когда одна (или несколько) сторон равны нулю либо когда одно из неравенств переходит в равенство (треугольник нулевой площади).

a b c Тип треугольника Комментарий
0 3 7 Не треугольник
-2 5 4 Не треугольник
1 3 4 Треугольник нулевой площади Пройден
7 7 7 Равносторонний Пройден
15 9 15 Равнобедренный Пройден
3 4 5 Разносторонний Пройден
После ввода чисел [latex]a [/latex], [latex]b [/latex], [latex]c [/latex] проверяем, есть ли равные нулю или есть ли сторона, равная сумме двух других сторон, если такие числа или такая сторона есть, то такой треугольник с нулевой площадью. Далее проверяем условие существования треугольника. Если в треугольнике все стороны равны, то он является равносторонним, если равны только две стороны-равнобедренным, а если нет равных между собой сторон, то треугольник разносторонний. Также мы проверяем, есть ли числа меньше нуля (если такие числа есть, то треугольника со сторонами [latex]a [/latex], [latex]b [/latex], [latex]c [/latex] не существует).

Для проверки выполнения программы можно воспользоваться ссылкой.

Решение на Java:

Ссылка на решение.

Related Images:

А23б

Задача. Треугольник задан длинами сторон. Найти длины медиан.

Длины сторон: [latex]a[/latex], [latex]b[/latex], [latex]c[/latex]. Длины медиан: [latex]a_1[/latex], [latex]b_1[/latex], [latex]c_1[/latex].

Тесты:

a b c a1 b1 c1 Комментарий
1 4 5 4,5 3 1,5 Пройден
21 12 9 1,5 15 16,5 Пройден
24 17 9 6,40312 16,0078 20,3039 Пройден
 

Решение:

Когда известны все стороны треугольника, медианы вычисляются по следующей формуле: [latex]\frac{1}{2}\sqrt{2a^2+2b^2-c^2}[/latex], где [latex]c[/latex] — сторона к которой проведена медиана, а [latex]a[/latex] , [latex]b[/latex] стороны треугольника.

Для проверки выполнения программы можно воспользоваться ссылкой .

Решение на Java:

Ссылка на решение.

Related Images:

Ю2.2

Задача: Треугольник задан длинами своих сторон: a, b, c. Определить, является ли он тупоугольным, прямоугольным или остроугольным.

Тесты:

угол №1 угол №2 угол №3 Результат Комментарий
30 60 90 треугольник прямоугольный тест пройден
60 60 60 треугольникостроугольный равностороннийравнобедренный тест пройден
70 70 40 треугольникостроугольный равнобедренный тест пройден
45 90 45 треугольник прямоугольный равнобедренный тест пройден
80 20 80 треугольникостроугольный равнобедренный тест пройден
30 120 30 треугольник тупоугольный равнобедренный тест пройден
50 90 150 треугольник не существует тест пройден
120 150 160 треугольник не существует тест пройден

Код программы:

 

Решение задачи:

1) Вводим данные стороны a,b,c;

2) Вводим условия для выполнимости определения треугольников (ограничения для углов):

а) для остроугольных

б) для равносторонних

в) для прямоугольных

г) пишем условие, при котором выполняется для тупоугольных треугольников

д) для равнобедренных

е) если ни одно из условий не выполняется, значит треугольника не существует

Посмотреть и протестировать программу можно на этом сайте: http://ideone.com/uAyr4x

 

Related Images:

А23a

Задача: Треугольник задан длинами сторон [latex] a,b,c [/latex].

Найти длины высот [latex] h_{1},h_{2},h_{3}[/latex].

a b c p h1 h2 h3 Коментарий
1 2 3 3 0 0 0 Пройден
3 4 5 6 4 3 2,4 Пройден
6 8 10 12 8 6 4,8 Пройден
13 14 15 21 12,92 12 11,2 Пройден
Решение:
Высота треугольника находится по формуле [latex]h=\frac{2S}{a}[/latex].
[latex] S [/latex]- площадь треугольника [latex] S=\sqrt{p(p-a)(p-b)(p-c)} [/latex].
[latex] p [/latex]- полупериметр треугольника [latex] p=\frac{a+b+c}{2} [/latex].
Затем вычисляем высоты [latex] h_{1},h_{2},h_{3}[/latex].

Related Images:

Ю1.25

Задача Ю 1.25

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

тесты:

x1 y1 x2 y2 x3 y3 результат №1 результат №2 результат №3 комментарий
0 0 1 0 0 1 45 90 45 тест пройден
1 3 1 1 2 1 63,4 26,5 90 тест пройден
1 4 2 3 1 1 26,5 45 108,4 тест пройден
1 2 1 1 2 1 45 45 90 тест пройден

 

 Идея решения задачи: В начале программы мы объявляем нужные библиотеки, затем после оператора double перечисляем все используемые переменные, после этого, с помощью оператора  scanf  объявляем те переменные, которые нужно будет вводить для выполнения программы, далее пишем формулы:

1) Для вычисления длин сторон по координатам точек

 

 

 

2) Для вычисления углов в радианах

3) Для перевода значений углов из радиан в градусы.

После этого, с помощью оператора printf   перечисляем переменные, которые программа будет вычислять и показывать нам. После компиляции вводим в строчку stdin значения координат точек, и в поле stdout программа выдает нам значения углов.

Чтоб посмотреть и протестировать программу, пройдите по этой ссылке: http://ideone.com/7YLyBt

Related Images:

Ю1.17

ЗАДАЧА

tupougolnyi-treugolnik

Длинна высоты. Треугольник [latex]ABC[/latex] задан длинами своих сторон. Найти длину высоты, опущенной из вершины А.

Экстремальные тесты: сумма двух сторон равна третьей; одна из сторон равна нулю.

Для справки.

Высота в произвольном треугольнике вычисляется по формуле:

[latex]h=2\cdot\frac{\sqrt{(p\cdot(p-a)\cdot(p-c)\cdot(p-b)}}{b}[/latex]

где

[latex]p=\frac{a+b+c}{2}[/latex]

В таблице представлены возможные треугольники: прямоугольный, равнобедренный, равносторонний и с неизвестными углами (произвольный). Также тут указаны условия, при которых треугольник существовать не может.

a

b

c

h

Коментарии

2 3 4 1.94 Тест пройден.
0 4 5 Ошибка в условии.Одна из сторон равна или меньше 0.
3 3 6 Ошибка в условии. Сумма двух сторон равна или меньше третьей стороны.
-4 3 6 Ошибка в условии.Одна из сторон равна или меньше 0.
6 6.5 2.6 2.4 Тест пройден.
4.4 4.4 5 4.11 Тест пройден.
4 4 4 3.46 Тест пройден.

Программа позволяет вычислять высоту произвольного треугольника по его трем сторонам. Существуют некоторые условия, при которых треугольник не может существовать, следовательно не может существовать его высота.
Алгоритм проверяет возможность  существования  треугольника с исходными данными: сумма длин двух сторон не должна равняться длине третьей стороны; длина стороны не должна равняться нулю; длина стороны не должна быть отрицательной; сумма длин двух сторон не должна быть меньше длины третьей.

Код на С++:

Код на Java:

 

Для выполнения программы и проверки тестов можно воспользоватся следующей ссылкой (C++)/ссылкой(Java).

Related Images:

Ю 3.4

Задача: Прямоугольник на плоскости [latex]a \le x \le b, \quad c \le y \le d[/latex] задаётся четырьмя числами (его габаритами): [latex]a, b, c, d.[/latex] Последовательно вводятся габариты [latex]n[/latex] прямоугольников. В процессе ввода находить площадь их пересечения, не запоминая самих габаритов.

NI — «no intersection» — нет общего сегмента

[latex]a[/latex] [latex]b[/latex] [latex]c[/latex] [latex]d[/latex] [latex]S[/latex] Комментарий
1 -5 -3 1 4 NI Пройден: нет общего интервала
-2 0 1 4
2 0 4.5 1.2 4.6 NI Пройден: нет общего интервала
2 4 5 7.4
3 2 5 1 4 NI Пройден: общая сторона не считается пересечением, т.к. даёт нулевую площадь
5 6 1 4
4 2 4 2 4 4 Пройден
2 4 2 4
5 2 5 1 4 NI Пройден: не все данные прямоугольники имеют общий сегмент
0 3 2 3
6 7 3 5
6 0 7 0 3 1 Пройден
2 6 1 5
3 5 2 5
4 8 2 3
 

Алгоритм решения:
1. Для удобства, запрограммировать задачу можно, сведя её к одномерному случаю: рассматривать проекции сторон прямоугольников на координатные оси. (см. рис. 1)
2. Проверка на пересечение: данные прямоугольники пересекаются и имеют общую площадь, если их проекции имеют общий интервал значений, больший одной точки.
3. Так как запоминать габариты прямоугольников нельзя по условию, работать будем с габаритами «общего» прямоугольника, которые сохраняются соотв. в переменные [latex]x1 \le x2, y1 \le y2[/latex]. Если новый прямоугольник пересекается с «общим», то определить обновленные габариты общего прямоугольника и рассчитать площадь(см. рис. 2). Если не пересекается, то выполнение программы прерывается, т.к. нужно вывести площадь прямоугольника, общего для всех [latex]n[/latex] прямоугольников.

Значения переменных в условии задачи не ограничены, так что для хранения габаритов был использован тип double, для всех порядковых переменных — тип int.

Протестировать решение можно по ссылке.

Related Images:

Ю2.32

Задача:  Из круга какого наименьшего радиуса можно вырезать треугольник со сторонами   [latex]a,b,c[/latex]

Указание: Пусть  [latex]c[/latex]    — большая из сторон треугольника. Если угол [latex]C[/latex] — тупой, сторона совпадает с диаметром круга и его радиус: [latex]r=\frac {C}{2}[/latex] .
В противном случае имеем описанную окружность: [latex]r=\frac {abc}{4\sqrt {p(p-a)(p-b)(p-c)}}[/latex] где [latex]p=\frac{(a+b+c)}{2}[/latex]

a b c r Комментарий:
6 8 11 5.5 Пройден (Есть тупой угол С)
11 8 6 5.5 Пройден (Есть тупой угол А)
8 11 6 5.5 Пройден (Есть тупой угол B)
5.97 9.55 11.07 5.53894 Пройден (Дробные значения)
3 3 4 2.01246 Пройден (Равнобедренный без тупого угла)
3 3 6 3 Пройден (Равнобедренный с тупым углом)
7 7 7 4.04145 Пройден (Равносторонний)
1 1 20 не треугольник Не пройден (Не треугольник)

До ветвлений:

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

2. Вычисление большей стороны треугольника

Алгоритм ветвлений:

Один из углов треугольника  находится в сегменте (90, 180)
Правда Не правда
[latex]r=\frac {C}{2}[/latex] . [latex]r=\frac{abc}{ 4\sqrt{ p(p-a)(p-b)(p-c)} }[/latex]
Вывод

 

Проверить программу на ideone

Вывод: Программа выполняет поставленные задачей условия. Если хоть один угол находится в сегменте (90, 180), то [latex]r=\frac{finding}{2}[/latex]  , где  [latex]finding[/latex]   это большая сторона треугольника (см. 8). В другом случае  [latex]r=\frac{abc}{ 4\sqrt{ p(p-a)(p-b)(p-c)} }[/latex]   . Если треугольник не существует — не выполняется и программа сообщает об этом.

Related Images:

А47

Задача:
Даны действительные положительные числа [latex]x[/latex], [latex]y[/latex], [latex]z[/latex].
а) Выяснить существует ли треугольник с длинами сторон [latex]x[/latex], [latex]y[/latex], [latex]z[/latex].
б) Если треугольник существует, то ответить — является ли он остроугольным?

NA — «not acute» — существует, но не остроугольный
A — «acute» — остроугольный
DE — «doesn’t exist» — не существует

[latex]x[/latex] [latex]y[/latex] [latex]z[/latex] Результат Комментарий:
3 4 5 NA Пройден: трегольник прямоугольный
1.30 3.86 5.14 NA Пройден
1.67 2.29 8 NE Пройден: нарушено условие (I)
811 22 790 NA Пройден: треугольник тупоугольный
10 11 12 A Пройден

Алгоритм:
I. Необходимым и достаточным условием существования треугольника с тремя заданными сторонами является условие вида:
[latex] x + y > z[/latex] (вырожденный случай не рассматривается)

(аналогичные неравенства можно записать и для остальных сторон треугольника, но т.к. переменные в программе упорядочены по возрастанию, одного неравенства достаточно.)

II. Вид треугольника определяется углом, лежащим против большей стороны:
[latex]\alpha \in [ 0; \frac{ \pi }{ 2 } ]\Leftrightarrow \cos{(\alpha)}>0[/latex]

Знак косинуса угла легко определить через теорему косинусов:
[latex]z^{ 2 }=x^{ 2 }+y^{ 2 }-2xy\cos { (\alpha ) } \\ \cos { (\alpha ) } =\frac { x^{ 2 }+y^{ 2 }-z^{ 2 } }{ 2xy }[/latex]

Если входные данные удовлетворяют вышеперечисленным условиям, то треугольник существует и является остроугольным.

Программное решение состоит из двух этапов:
0. Поиск наибольшей стороны.
1. Проверка условия (I).
2. Проверка условия (II).

Функция swap() взята из заголовочного файла algorithm.
В программе использован тип данных с плавающей точкой и двойной точностью (для отображения действительных чисел).
Для выполнения программы и проверки тестов можно воспользоваться следующим объектом. (реализация на Java)

Related Images:

Ю2.14

Задача.

Треугольник  и точка. Лежит ли точка  [latex] M \left( x_{m}, y_{m} \right) [/latex]  внутри треугольника, заданного координатами своих вершин  [latex] \left( x_{A}, y_{A} \right) [/latex],   [latex] \left( x_{A}, y_{A} \right) [/latex],   [latex] \left( x_{A}, y_{A} \right) [/latex].

Комментарий.

Предполагаем, что треугольник невырожденный, т.е. точки  [latex] A [/latex], [latex] B [/latex]  и  [latex] C [/latex]  не лежат на одной прямой.

Слово «внутри» будем понимать следующим образом: точка «лежит внутри треугольника», если она принадлежит внутренности (в топологическом смысле) этого треугольника. Как следствие, если точка лежит на одной из сторон треугольника, внутри треугольника она НЕ лежит.

Тесты.

Ввод Вывод
0  0  1  0  1  1  0.5  0.25 Да
0  0  1  0  1  1  -1  -1.5 Нет
-1.5  -1.5  -1.5  4  1  0.5  -1  2 Да
-1.5  -1.5  -1.5  4  1  0.5  -1  0 Нет
0.3  0.2  1.3  0.2  0.3  0.8  0.7  0.4 Да
0.3  0.2  1.3  0.2  0.3  0.8  0.3  0.6 Нет
2  1  0.5  -2  -2  -0.5  0.5  -1 Да
2  1  0.5  -2  -2  -0.5  2  1 Нет

Рассмотрим четыре основных типа треугольников:

  • ровно одна сторона параллельна оси абсцисс;
  • ровно одна сторона параллельна оси ординат;
  • две стороны параллельны координатным осям;
  • ни одна из сторон не параллельна ни к одной из осей.

Для каждого типа рассмотрим два случая: точка принадлежит его внутренности и не принадлежит. При этом рассмотрим случай (восьмая строка таблицы), когда точка лежит на стороне и постараемся рассмотреть случаи, когда координатами являются нецелые и отрицательные числа.

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

Код.

Ideone (C++)

Код (Java)

Ideone (Java)

Решение.

  1.  Составим уравнения сторон треугольника. Как известно, в эвклидовой геометрии в прямоугольных декартовых координатах уравнение прямой, проходящей через две (различные!) точки  [latex] \left( r1, r2 \right) [/latex]  и  [latex] \left( s1, s2 \right) [/latex]  есть  [latex] \left(y — r2 \right) \left( s1 — r1 \right) — \left( x — r1 \right) \left( s2 — r2 \right) = 0[/latex] . Эта прямая разбивает плоскость на три части: собственно прямую и две открытые полуплоскости, задаваемые неравенствами  [latex] \left(y — r2 \right) \left( s1 — r1 \right) — \left( x — r1 \right) \left( s2 — r2 \right) < 0[/latex]  и  [latex] \left(y — r2 \right) \left( s1 — r1 \right) — \left( x — r1 \right) \left( s2 — r2 \right) > 0[/latex].
  2. Как известно, точка лежит внутри невырожденного треугольника, если и только если она лежит с каждой вершиной этого треугольника в одной полуплоскости относительно стороны, противоположной этой вершине.
  3. Из  1.  заключаем, что точки с декартовыми координатами  [latex] \left( x,y \right)[/latex]  и  [latex] \left( u,v \right)[/latex]  лежат по одну сторону от прямой, проходящей через точки  [latex] \left( r1,r2 \right)[/latex]  и  [latex] \left( s1,s2 \right)[/latex], если и только если числа  [latex] \left(y — r2 \right) \left( s1 — r1 \right) — \left( x — r1 \right) \left( s2 — r2 \right)[/latex]  и   [latex] \left(v — r2 \right) \left( s1 — r1 \right) — \left( u- r1 \right) \left( s2 — r2 \right)[/latex]   отличны от нуля и одного знака, т.е. если произведение этих чисел  —  строго положительное число.
  4. Проверяем условие из пункта  3.  для вершины  [latex] C [/latex]  и стороны  [latex] AB [/latex]. Если условие выполнено, переходим к пункту  5. В противном случае точка внутри треугольника не лежит.
  5. Проверяем  условие из пункта  3.  для вершины  [latex] B [/latex]  и стороны  [latex] AC [/latex]. Если условие выполнено, переходим к пункту  5. В противном случае точка внутри треугольника не лежит.
  6. Проверяем  условие из пункта  3.  для вершины  [latex] A [/latex]  и стороны  [latex] BC [/latex]. Если условие выполнено, точка лежит внутри треугольника. В противном случае точка внутри треугольника не лежит.

Related Images:

Ю1.16

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

h a b c Комментарий
5 7.07107 7.07107 10 Пройдено.
7 9.89949 9.89949 14 Пройдено.
3.53553 5 5 7.07106 Пройдено.
Довольно простая задача в виду того, что прямоугольный равнобедренный треугольник это квадрат с сечением по диагонали. Диагональ [latex]c=a\sqrt { 2 } [/latex],  а

[latex]h=\frac { a\sqrt {2}}{2}[/latex],   т.к. это половина диагонали.

Из этого следует, что      [latex]a=\frac{c}{\sqrt{ 2 }}[/latex],   [latex]a=b[/latex]

 

Алгоритм выполнения задачи:

1. Узнаю [latex]c=2h[/latex]

2. Узнаю    [latex]a=\frac{c}{\sqrt{ 2 }}[/latex],   [latex]a=b[/latex]

 

Вывод: В виду того, что треугольник равнобедренный, задача не вызывает никаких трудностей и легко решаема.

Related Images:

А25а

Задача «Периметр треугольника». Произвольный треугольник задан координатами его вершин [latex]A[/latex],  [latex]B[/latex],  [latex]C[/latex]. Вычислите длины его сторон  [latex]|AB|[/latex],  [latex]|BC|[/latex],  [latex]|AC|[/latex], а также его периметр  [latex]p[/latex].

Для нахождения длин сторон используется формула расстояния между точками:

[latex]|AB|=\sqrt{\left(x_{A}-x_{B}\right)^{2}+\left(y_{A}-y_{B}\right)^{2}}[/latex],

[latex]|BC|=\sqrt{\left(x_B-x_C\right)^2+\left(y_B-y_C\right)^2}[/latex],

[latex]|AC|=\sqrt{\left(x_A-x_C\right)^2+\left(y_A-y_C\right)^2}[/latex],

периметр – это сумма длин сторон:

[latex]p=|AB|+|BC|+|AC|[/latex]

[latex]A[/latex] [latex]B[/latex] [latex]C[/latex] [latex]\left|AB\right|[/latex] [latex]\left|BC\right|[/latex] [latex]\left|AC\right|[/latex] [latex]p[/latex]  Комментарий
(0,0) (0,3) (4,0) 3 5 4 12 Пройден
(0,0) (0,1) (1,0) 1 [latex]\sqrt{2}\approx 1.414[/latex] 1 [latex]2+\sqrt{2}\approx 3.414[/latex] Пройден
(0,0) (0,1) (0,2) 1  1 2 4 Пройден

Заметим, что в третьем тесте треугольник является вырожденным – в программе нет отдельной проверки на вырожденность треугольника, для таких треугольников все характеристики рассчитываются верно.

Код программы:

Программа протестирована в среде ideone.com и Virtual C. Пройден тест «Test Coding Rules» среды Virtual C на стиль написания кода. Для всех числовых значений в программе используется вещественный тип данных двойной точности. Исходные данные – координаты точек [latex]A[/latex], [latex]B[/latex], [latex]C[/latex] – содержатся в переменных xA, yA, xB, yB, xC, xC, значения которых вводятся со стандартного потока ввода.

Проверить работу программы можно здесь.

Related Images: