Ю2.4

Задача: Числа [latex]a, b, c[/latex] тогда и только тогда являются сторонами треугольника, когда существуют такие положительные [latex]x, y, z[/latex], что:

[latex]\begin{cases}& \text{ } a=x+y \\& \text{ } b=y+z \\& \text{ } c=x+z\end{cases}[/latex]

[latex]a[/latex] [latex]b[/latex] [latex]c[/latex] [latex]x[/latex] [latex]y[/latex] [latex]z[/latex] Комментарий
10 5 7 6 4 1 Выполняется
3.5 6.8 4 0.35 3.15 3.65 Выполняется
-5 7 3  — Не треугольник
17 4 8  — Не треугольник

C++:

Java:

Для всех переменных ( [latex]a, b, c[/latex] — даны по условию, [latex]x, y, z[/latex] — нужно найти) я использовала тип данных double, так как числа могут быть вещественными.

[latex]a, b, c[/latex] — стороны треугольника, поэтому они не могут быть отрицательными. И по соотношениям между сторонами треугольника каждая сторона меньше суммы двух других сторон. В противном случае [latex]a, b, c[/latex] не являются сторонами треугольника.

Чтобы получить значения [latex]x, y, z[/latex], решаем систему, данную в условии. Из первого уравнения: [latex]x=a-y[/latex]. Из второго: [latex]z=b-y[/latex]. Подставляем [latex]x=a-y[/latex] и [latex]z=b-y[/latex] в третье уравнение: [latex]c=a+b-2\cdot y[/latex]. Находим [latex]y=\frac{a+b-c}{2}[/latex], [latex]x=a-y[/latex], [latex]z=b-y[/latex].

Задача на Ideone:
C++
Java

Related Images:

А59в

Задача. Даны действительные числа   [latex]x[/latex] и [latex]y[/latex]. Определить, принадлежит ли точка [latex]x[/latex] ,[latex]y[/latex]заштрихованной области.

VbnLavS7Azw

х у результат комментарий
0 0 принадлежит пройдено
0.5 1 принадлежит пройдено
-2 -5 не принадлежит пройден

Код программы на языке C++:

Код программы на языке Java:

Ccылка на программу на языке Java: http://ideone.com/QBb6dQ

Решение

Решение задачи сводится к поиску условия, при котором точка будет принадлежать данной части плоскости. Далее вводим  оператор  условия «if» и ставим  ограничения на [latex]x[/latex] и [latex]y[/latex].

Анализируем наше условие, при каких значениях  [latex]x[/latex] и [latex]y[/latex] точка будет принадлежать заштрихованной плоскости, а в  каких нет.

 

 

Related Images:

Ю1.2

Задача Ю1.2 : Из радианов в градусы. Угол  [latex]\alpha[/latex]  задан в радианах. Найти его величину в градусах, минутах и секундах

rad deg m s
3 171 53 14
-2.5 -143 14 22
21 123 12 41
-9.1 -161 23 30

Решение:

Код программы на C++:

Ссылка на ideone Java: http://ideone.com/PTbhOy

 

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

[latex]Deg=Rad\frac{180}{\pi }[/latex]

Далее ищу остаток от деления на   [latex]360[/latex] т.к. угол  [latex]\alpha < 360[/latex].

Для вычисления минут отбрасываю от градусов целую часть (округляя вниз) и умножаю на [latex]60[/latex]

Для вычисления секунд отбрасываю от минут целую часть (округляя вниз) и умножаю на [latex]60[/latex]

секунды округляю функцией round

Ответ выводит в градусах минута и секундах

Related Images:

А52

Задача: Даны действительные числа [latex]a, b, c, d, s, t, u[/latex]( [latex]s[/latex] и [latex]t[/latex] одновременно не раны нулю). Известно, что точки [latex] (a, b) [/latex]и [latex] (c, d)[/latex] не лежат на прямой [latex] l[/latex], заданной уравнением [latex] sx+ty+u=0[/latex]. Прямая [latex] l[/latex] разбивает координатную плоскость на две полуплоскости . Выяснить, верно ли, что точки  [latex] (a, b)[/latex] и[latex] (c, d)[/latex] принадлежат разным полуплоскостям?

a b c d s t u
2 -1 3 4 5 3 -7 (a,b) или  (b,c) принадлежат прямой
6 -3  2 -5 2  3 1 (a,b) и (c,d) принадлежат разным полуплоскостям
0 7 3 6 4 9 1 (a,b) и (c,d) принадлежат одной полуплоскости
Если точка  [latex](a, b)[/latex] или [latex](c, d)[/latex] лежит на прямой [latex] l[/latex] то уравнение [latex] sx+ty+u=0[/latex] должно выполнятся при подстановке значений  [latex](a, b)[/latex] или [latex](c, d)[/latex] вместо [latex] x[/latex] и [latex] y[/latex]. Если точки лежат в одной полуплоскости то [latex] sa+tb+u[/latex] и [latex] sc+td+u[/latex] — должны быть числами одного знака, в противном случае точки лежат в разных полуплоскостях.

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

 

Related Images:

Ю1.23

Задача

Треугольник  задается координатами своих вершин на плоскости: [latex]A\left(x_{1};y_{1} \right)[/latex], [latex] B\left(x_{2};y_{2} \right)[/latex], [latex] C\left(x_{3};y_{3} \right)[/latex].
Найти сумму длин медиан данного треугольника.

Тесты:

[latex]x_{1}[/latex] [latex]y_{1}[/latex] [latex]x_{2}[/latex] [latex]y_{2}[/latex] [latex]x_{3}[/latex] [latex]y_{3}[/latex] Результат Прохождение теста
0 4 0 7 0 2 Не является треугольником… Пройден
51 0 97 0 68 0 Не является треугольником… Пройден
1 7 3 13 6 22 Не является треугольником… Пройден
0 3 0 0 4 0 10.3775 Пройден
0 0 1 1.7320 2 0 5.1960 Пройден

Исходный код программы:

Алгоритм:

  1. Вводим переменные;
  2. Вводим координаты точек [latex]A[/latex], [latex]B[/latex], [latex]C[/latex];
  3. Используем условный оператор для выделения частного случая.
    • Если точки будут лежать на одной прямой, то медиан, как и самого треугольника не может быть в принципе. Для проверки  используем уравнение прямой, проходящей через две несовпадающие точки: [latex]\frac{y-y_{1}}{y_{2}-y_{1}}=\frac{x-x_{1}}{x_{2}-x_{1}}[/latex]. С помощью эквивалентных преобразований получаем формулу:[latex]\left(y_{2}-y_{1} \right) \left(x-x_{1}\right)-\left(y-y_{1} \right) \left(x_{2}-x_{1}\right)=0[/latex] c помощью которой (подставив вместо [latex]x[/latex] и [latex]y[/latex]  [latex]x_{3}[/latex] и [latex]y_{3}[/latex] соответственно) сможем определить, находятся ли данные точки на одной прямой).
    • В случае, если точки не находятся на одной прямой, находим длины  отрезков соединяющих середины сторон с противоположными им вершинами(эти отрезки и являются медианами); (Координаты середин отрезков находим по формулам: [latex]\frac{\left(x_{1}+x_{2} \right)}{2}[/latex], [latex]\frac{\left(y_{1}+y_{2} \right)}{2}[/latex], где [latex]\left(x_{1};y_{1} \right)[/latex] и [latex]\left(x_{2};y_{2} \right)[/latex] — координаты концов отрезка, середину которого мы находим. Длину медианы находим по формуле: [latex]AB=\sqrt{\left(x_{1}-x_{2} \right)^{2}+\left(y_{1}-y_{2} \right)^{2}}[/latex] , где  [latex]\left(x_{1};y_{1} \right)[/latex] и [latex]\left(x_{2};y_{2} \right)[/latex] — координаты точек [latex]A[/latex] и [latex]B[/latex] соответственно).
  4. Находим сумму длин этих отрезков. (Простое сложение).

 

Related Images:

А59е

Задача А59е. Даны действительные числа [latex]x[/latex], [latex]y[/latex]. Определить, принадлежит ли точка [latex]x[/latex], [latex]y[/latex] заштрихованной части плоскости.

A59е

Значение  [latex]x[/latex] Значение [latex]y[/latex] Комментарий
0 0 Принадлежит фигуре.
-2 0 Принадлежит фигуре.
0 1 Принадлежит фигуре.
1 0 Принадлежит фигуре.
0 -1 Принадлежит фигуре.
-2 1 Не принадлежит фигуре.
-2 -0.5 Принадлежит фигуре.
1 -1 Не принадлежит фигуре.
0.5 0.5 Принадлежит фигуре.

С++:

Java:

Если точка [latex]D[/latex] лежит справа от оси [latex]OY[/latex], ищем расстояние от неё до точки [latex]O\left(0,0 \right)[/latex]. Если оно меньше либо равно [latex]1[/latex], точка [latex]D[/latex] принадлежит полукругу.

Если точка [latex]D[/latex] лежит слева от оси [latex]OY[/latex], будем проводить прямые через каждые две вершины треугольника [latex]ABC[/latex], где [latex]A\left(-2,0 \right)[/latex], [latex]B\left(0,1 \right)[/latex], [latex]C\left(1,0 \right)[/latex].

Воспользуемся уравнением прямой:
[latex]\left ( x-x_{A} \right )\left ( y_{B}-y_{A} \right )-\left ( y-y_{A} \right )\left ( x_{B}-x_{A} \right )=0[/latex]

Прямая разделит плоскость на две части. При подстановке в уравнение точек из одной части плоскости, левая часть уравнения даст значение одного знака.

Функция dotLine определяет положение точки относительно прямой: она вычисляет значение в уравнении прямой и определяет, к какой части плоскости относится точка.

Для того, чтобы точка [latex]D[/latex] принадлежала треугольнику, она должна с каждой вершиной треугольника находиться по одну сторону от прямой, проходящей через две другие вершины.

Функция dotDot определяет, расположены ли точки в одной части плоскости.

Если уравнение прямой даст 0, то точка [latex]D[/latex] лежит на прямой и принадлежит треугольнику.

Задача на Ideone:
C++
Java

Related Images:

Ю2.8

Задача

Пройдет ли кирпич со сторонами [latex]a[/latex], [latex]b[/latex] и [latex]c[/latex] сквозь прямоугольное отверстие со сторонами [latex]r[/latex] и [latex]s[/latex]? Стороны отверстия должны быть параллельны граням кирпича.

A B C R S Ответ
10 8 7 4 3 Impossible
1 9 8 5 9 Possible
5 5 5 8 2 Impossible
4.5 4 4 5 5 Possible
0.5 3.4 0.8 4 2.5 Possible

Код программы на C++

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

 

В этой задаче я считаю, что если длины соответствующих сторон равны — то кирпич проходит не будет. Также считаем что ни одна из сторон не может быть нулем. Поскольку нам надо проверить входит ли кирпич в щель в общем, мы имеем право рассматривать три варианта положения кирпича относительно щели. Во всех трех случаях алгоритм одинаков. Он состоит в сравнении сторон щели и сторон грани.  По крайней мере две стороны кирпича должны быть меньше двух сторон щели. Если два условия выполняются — то переменной [latex]x[/latex] присваивают значение true и выводится на экран сообщение, что выполнить задачу возможно. В противном случае значение переменной останется неизменным. Как следствие будет выведено на экран сообщение, что эта задача не разрешима.

Related Images:

Ю2.11

Задача жестянщика. Можно ли из круглой заготовки радиусом  [latex]r[/latex] вырезать две прямоугольные пластинки с размерами  [latex] a[/latex] × [latex] b[/latex] и [latex] c[/latex] × [latex]d[/latex]?

1.6 3 0 3 0 We can
1.6 3 1 3 1 We can’t
  2  3 1 3 1 We can
  2  5 1 4 1 We can’t
 

Рассмотрим как выглядит прямоугольник в круге.

Безымянный

Можно заметить, что [latex] h=d1[/latex] (длина до центра окружности) — это катет прямоугольного треугольника, значит его можно найти по теореме Пифагора , зная радиус круга [latex] R[/latex]  и катит [latex] r[/latex] (в нашем случае [latex] a/2[/latex]) [latex] h=\sqrt{R^2-r^2}[/latex]). Вычитая из полученного [latex] h=d1[/latex]  ширину [latex] b[/latex] мы получим  сколько он места занимает при данной длине и ширине относительно центра круга. (Если у нас  [latex] b<d1[/latex], то для второго прямоугольника у нас будет больше места) Тоже самое мы проделываем и для второго прямоугольника и получаем наше [latex] h2=d2[/latex]. Дальше размещаем наши прямоугольники параллельно друг другу и смотрим, хватает ли места второму прямоугольнику места с учетом его ширины (Если по ширине второй прямоугольник не превышает оставшегося места) [latex]d<d2+(d1-b)[/latex].

 

Реализация на Java:

 

Ссылка на код программы.

Related Images:

Ю1.13

Задача. Заданы уравнения двух пересекающихся прямых на плоскости: [latex]y=k_{1}+b_{1}[/latex]; [latex]y=k_{2}+b_{2}[/latex] . Найти (в градусах и минутах) угол между ними, используя формулу: [latex]\tan\varphi=\frac{(k_{2}-k_{1})}{(1+k_{2}*k_{1})} [/latex] .

 Значение k1  Значение k2 Ответ
 -6  -38  -7 градусов 57 минут (два целых отрицательных числа)
 13  15  0 градусов 35 минут (два целых числа)
 33.7  21.6  0 градусов 57 минут (два числа с запятой)
 1  1  0 градусов 0 минут (получаем 0 в числителе)
 1  -1  0 градусов (получаем ноль в знаменателе)

 

Для вычисления угла между двумя прямыми, зная тангенс, воспользуемся формулой [latex]\varphi=atan\tan\varphi[/latex]. Полученный результат переводим в градусы по формуле: [latex]\varphi=\frac{180*\varphi}{\Pi}[/latex] . Далее переведем результат в градусы и минуты. Для этого сначала найдем ближайшее целое число меньше полученного и запишем его, как градусы(при этом, если градусы отрицательные, то мы найдем ближайшее большее целое число, и запишем его, как градусы). После этого, от первоначального  числа отнимем полученное и переведем его в минуты( если градусы были отрицательными, то от полученного отнимем первоначальное). Для этого результат вычитания домножим на 60. Этот результат запишем в минуты. ( Примечание: если [latex]k2*k1=-1[/latex] , то ответ — 0 градусов )

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:

А50

Задача А50. Даны действительные числа [latex]a_{1}[/latex], [latex]b_{1}[/latex], [latex]c_{1}[/latex], [latex]a_{2}[/latex], [latex]b_{2}[/latex], [latex]c_{2}[/latex]. Выяснить, верно ли что [latex]\left|a_{1} b_{2} -a_{2} b_{1} \right|\geq 0.0001[/latex], и если верно, то найти решение системы линейных уравнений

[latex]a_{1} x+b_{1} y+c_{1} =0[/latex],

[latex]a_{2} x+b_{2} y+c_{2} =0[/latex]

(при выполнении выписанного неравенства система заведомо совместна и имеет единственное решение).

[latex]a_{1}[/latex] [latex]b_{1}[/latex] [latex]c_{1}[/latex] [latex]a_{2}[/latex] [latex]b_{2}[/latex] [latex]c_{2}[/latex] [latex]x[/latex] [latex]y[/latex] Комментарий.
 3,8  5  -2  6  8,4  3  16,5625  -12,1875  Тест пройден.
 0 4  5  2  0  9  -4,5  -1,25  Тест пройден.
 1 2  -3  3  2  -1  -1  2  Тест пройден.
 1  0.00002  5  2  0.00005  8  —  —  Тест не пройден. Неравенство не выполняется.
 1  4  5  2  8  3  —  —  Тест не пройден. Неравенство не выполняется.

Код программы (C++):

Java:

 

По условию задачи необходимо решить систему линейных уравнений и вывести на экран [latex]x[/latex], [latex]y[/latex].

Программа решает это уравнение по методу Гаусса.

Изначально она делает проверку на наличие ненулевого аргумента [latex]a_{1}[/latex]. Если таковой имеется, то программа решает задачу, исходя из первого уравнения системы, в противном случае — решение начинается со второго уравнения.

Далее я ввела в программу переменные [latex]b_{0}[/latex], [latex]c_{0}[/latex], чтобы не перегружать формулы большим количеством данных. Алгоритм действий таков:

1) Перенести  [latex]c_{1}[/latex] и  [latex]c_{2}[/latex] в правую часть уравнения, что автоматически меняет их знак на противоположный.

2) Если в программе присутствует ненулевой аргумент [latex]a_{1}[/latex], то она вычитает из второго уравнения первое, предварительно домножив второе на [latex]\frac{b_{1} a_{2} }{a_{1} }[/latex].

3) Из преобразованного второго уравнения находится [latex]y[/latex], который впоследствии подставляется в первое уравнение системы для нахождения [latex]x[/latex] .

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

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.24

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

x y x1 y1 x2 y2 x3 y3
3 6 1 1 3 7 2 5 Угроза от второй ладьи
1 2 7 8 4 6 3 6 Угрозы нет
1 2 5 4 3 7 1 2 Ошибка
Введем координаты каждой фигуры на шахматной доске от 1 до 8 (использовать отрицательные или дробные числа не имеет смысла). Проверим совпадает ли хотя бы один из координат короля с координатой хотя бы одной ладьи. Если, да то выводим соответствующее сообщение, если нет то выведем, что угрозы нет.

Код программы на 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:

Ю2.22

Задача Ю2.22. Голодная зима. Суточный рацион коровы составляет [latex]u[/latex] кг сена, [latex]v[/latex] кг силоса и [latex]w[/latex] кг комбикорма. В хозяйстве, содержащем стадо из [latex]k[/latex] голов, осталось [latex]s[/latex] центнеров сена, [latex]t[/latex] тонн силоса и [latex]f[/latex] мешков комбикорма по 50 кг. Сколько ещё дней хозяйство сможет кормить коров по полному рациону? Какой из кормов кончится раньше других?

[latex]u[/latex] [latex]v[/latex] [latex]w[/latex] [latex]s[/latex] [latex]t[/latex] [latex]f[/latex] [latex]k[/latex] Результат. Комментарий.
1 0,5 3 3 0,2 7 15 7. Комбикорм. Тест пройден.
4 7 5 6 0,6 8 13 6. Комбикорм. Тест пройден.
8 5 3,5 4 1 9 11 4. Сено. Тест пройден.
1 1 1 1 0,1 2 2 50. Сено. Силос. Комбикорм. Тест пройден.

C++:

Java:

По условию задачи необходимо найти количество полных дней, в течение которых корова будет обеспечен полный рацион.

Так как изначально в условии задачи данные различались по единицам измерения, я перевела их все в килограммы. Так же было предусмотрено, что количество килограмм может быть дробным положительным, в то время как количество голов в стаде — только натуральным. Для удобства вычисления я ввела дополнительные переменные [latex]a[/latex], [latex]b[/latex], [latex]c[/latex].

Затем я столкнулась с проблемой округления полученного минимального дробного числа к целому количеству дней. Возьмём первый тест для примера. Минимальное дробное количество дней — 7,77. Функция lround округляет число лишь к ближайшему целому. Поэтому мне потребовалось ввести проверку. Если разница между округлённым минимальным и неокруглённым больше нуля, то программа вычитает из полученного значения единицу. Таким образом программа не считает дни, когда корма бы хватило лишь на определённую часть суток.

Следующей задачей было выведение на экран данных о корме, который закончится первым. Тут я действовала по принципу элементарного сравнения.

В программе использован тип данных с плавающей точкой.

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

Related Images: