ML39. Старинное окно

Задача

Окно в университетской аудитории имеет форму прямоугольника с присоединенным в верхней части полукругом. Периметр всего окна равен [latex]P[/latex]. Определить радиус полукруга [latex]R[/latex], при котором площадь окна максимальна.
Входные данные: Периметр окна [latex]P[/latex].
Выходные данные: Радиус полукруга [latex]R.[/latex] 2

Тесты

Входные данные Выходные данные
[latex]P[/latex] [latex]R[/latex]
1 100 14.0025
2 73 10.2218
3 14 1.96035
4 0 0

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

Решение

Университетское окно

Университетское окно

Обозначим боковую сторону окна [latex]b[/latex], а нижнюю [latex]a[/latex]. [latex]R=\frac { a }{ 2 } [/latex], тогда периметр окна [latex]P=a+2b+\frac { \pi a }{ 2 } [/latex], а площадь равна сумме площадей прямоугольника и полукруга [latex]S=ab+\frac { \pi { a }^{ 2 } }{ 8 } [/latex]. Выразим сторону [latex]b[/latex] через [latex]a[/latex] и периметр [latex]P[/latex] : [latex]b=\frac { 2P-2a-\pi a }{ 4 } [/latex], тогда [latex]S=\frac { 4Pa-4a^{ 2 }-\pi a^{ 2 } }{ 8 } [/latex]. Вычислим производную функции [latex]S(a)[/latex]. [latex]S'(a)=\frac { 2P-4a-\pi a }{ 4 } [/latex], затем найдем точки экстремума функции:
[latex]\frac { 2P-4a-\pi a }{ 4 } =0[/latex], тогда [latex]a=\frac { 2P }{ 4+\pi } [/latex].
Найдём область допустимых значений для [latex]a[/latex]. Наибольшего значения [latex]a[/latex] достигает при [latex]b=0[/latex], [latex]P=a+ \frac {\pi a}{2}[/latex], соответственно [latex]a=\frac { 2P }{ 1+\pi } [/latex]. Значит областью допустимых значений является отрезок [latex][0; \frac { 2P }{ 2+\pi } ] [/latex]. Поскольку [latex]0 < \frac { 2P }{ 4+\pi } < \frac { 2P }{ 2+\pi }[/latex] делаем вывод, что [latex]a=\frac { 2P }{ 4+\pi } [/latex] попадет в область допустимых значений. Найдём максимальное значение функции на отрезке:
[latex]S(0)=0[/latex].
[latex]S(\frac { 2P }{ 4+\pi })= \frac { 4P ^ {2} }{ 32 + 8 \pi } [/latex].
[latex]S( \frac { 2P }{ 2+\pi })= \frac { 4P ^ {2} }{ 16 + 8 \pi } \cdot \frac { \pi }{ 2+ \pi } [/latex].
[latex] \frac {S(\frac { 2P }{ 4+\pi })}{S( \frac { 2P }{ 2+\pi })} = \frac { 4+4\pi +{ \pi }^{ 2 } }{ 4\pi +{ \pi }^{ 2 } } [/latex].
Тогда [latex]S(0) < S(\frac { 2P }{ 2+\pi }) < S(\frac { 2P }{ 4+\pi }) [/latex].
Значит площадь окна [latex]S[/latex] достигает максимального значения при [latex]a=\frac { 2P }{ 4+\pi }[/latex], из чего следует [latex]R=\frac { P }{ 4+\pi }[/latex].

Ссылка на код

ideone

Related Images:

ML 36. Движение катера

Задача. Катер движется по течению реки из пункта в A в пункт B и обратно с собственной скоростью [latex]v[/latex] км/час. Скорость течения постоянна — [latex]u[/latex] км/час. Расстояние между пунктами составляет [latex]s[/latex] км. Для любых неотрицательных действительных значений расстояния и скоростей вычислите время в пути.

Решение. Пусть катер движется со скоростью [latex]v[/latex] км/час, соответственно, учитывая скорость течения [latex]u[/latex] км/час, скорость катера движущегося по течению равна [latex]v+u[/latex] км/час и против течения — [latex]v-u[/latex] км/час. Используя физическую формулу [latex]t=\frac{s}{v}[/latex], где [latex]t[/latex]-время, [latex]s[/latex]-путь, [latex]v[/latex]-скорость, можем выразить время всего пути [latex]t=\frac{s}{v+u}+\frac{s}{v-u}[/latex]. Так как физическая величина [latex]t[/latex] всегда больше 0, и по математическому свойству делитель дроби не должен равняться нулю, имеем ограничение: [latex]v>u[/latex];

Решение на языке C++ имеет вид:

Тесты

Входные данные
Физические величины: v, u, s

Выходные данные
Физическая величина t

u v s t
2 2 4 inf
1 2 6 8
5 4 8 inf

Решение на ideone.

Related Images:

ML25. Расстояние между двумя точками

Задача

Вычислить расстояние между двумя точками [latex]A\left(x_a,y_a,z_a\right)[/latex] и [latex]B\left(x_b,y_b,z_b\right)[/latex] по известным координатам.

Входные данные

Координаты: [latex]x_a, y_a, z_a, x_b, y_b, z_b[/latex].

Выходные данные

[latex]|AB|[/latex] — расстояние между точками [latex]A[/latex] и [latex]B[/latex].

Тесты

[latex]x_a[/latex] [latex]y_a[/latex] [latex]z_a[/latex] [latex]x_b[/latex] [latex]y_b[/latex] [latex]z_b[/latex] [latex]|AB|[/latex]
0 1 0 1 0 1 1.73205
0 0 0 0 0 0 0
6 6 4 4 2 8 6

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

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

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

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

Вычисляем [latex]|AB|[/latex] между точками [latex]A\left(x_a,y_a,z_a\right)[/latex] и [latex]B\left(x_b,y_b,z_b\right)[/latex] по такой формуле : [latex]|AB|=\sqrt{(x_b-x_a)^2+(y_b-y_a)^2+(z_b-z_a)^2}[/latex] и получаем результаты.

Ссылка: Условие задачи
Ссылка: Решение задачи на сайте Ideone.com (C++)
Ссылка: Решение задачи на сайте Ideone.com (Java)

Related Images:

ML29. Площадь тетраэдра

Тетраэдр

Тетраэдр

Задача. Найти площадь полной поверхности тетраэдра три стороны которого образованы векторами [latex]\overrightarrow{a}=(a_x,a_y,a_z)[/latex], [latex] \overrightarrow{b}=(b_x,b_y,b_z)[/latex] и [latex]\overrightarrow{c}=(c_x,c_y,c_z)[/latex].
Тесты:

Вход Выход
[latex]a_x[/latex] [latex]a_y[/latex] [latex]a_z[/latex] [latex]b_x[/latex] [latex]b_y[/latex] [latex]b_z[/latex] [latex]c_x[/latex] [latex]c_y[/latex] [latex]c_z[/latex] [latex]S[/latex]
1 -3 3 3 3 -3 3 3 3 -3 69.3607
2 -1 1 1 1 -1 1 1 1 -1 7.70674
3 -2 2 2 2 -2 2 2 2 -2 30.827
4 0 0 1 1 0 0 1 1 -1 2.07313

Код на C++:

Код на Java:

Решение:
Координаты векторов находим по формуле:
[latex] \overrightarrow{A_2A_4}=(c_x-a_x,c_y-a_y,c_z-a_z) [/latex] здесь [latex] a_x, a_y, a_z[/latex] — координаты точки [latex]A_2[/latex]; [latex]c_x, c_y, c_z[/latex] — координаты точки [latex]A_4[/latex];
Таким же образом находим остальные координаты векторов.
Модули векторов (длина ребер пирамиды)
Длина вектора [latex]\overrightarrow{a}(a_x;a_y;a_z)[/latex] выражается через его координаты формулой:
[latex] \left| \overrightarrow{A_1A_2} \right| =\sqrt { ({ a_x) }^{ 2 }+({ a_y) }^{ 2 }+({ a_z) }^{ 2 } } [/latex];
Таким же способом находим другие модули векторов.
Площадь грани можно найти по формуле:
[latex] s_1=\frac { 1 }{ 2 } \vec{A_1} \times \vec{A_2} \sin \angle{A_2A_3} [/latex] где
[latex] \sin \angle{ A_2A_3 =\sqrt { 1-{ (\cos \angle{ A_2A_3) } }^{ 2 } } } [/latex] Так же будем находить и другие.
Найдем угол между ребрами [latex] A_1A_2(a_x;a_y;a_z) [/latex] и [latex] A_1A_3(b_x;b_y;b_z) [/latex]:
[latex] \cos \angle{ A_2A_3 =\frac { a_x b_x+a_y b_y+a_z b_z }{ \left| A_2A_3 \right| } } [/latex] Так мы найдём и другие 3 площади граней.
Площадь полной поверхности.
[latex] s=s_1+s_2+s_3+s_4. [/latex]

Ссылки:

Онлайн компилятор ideone C++ .
Онлайн компилятор ideone Java .
Онлайн калькулятор .

Related Images:

Ю1.18. Задача Жестянщика

Задача. Задача жестянщика. Из круга радиуса [latex]r[/latex] вырезан прямоугольник, большая сторона которого равна [latex]a[/latex]. Найти максимальный радиус круга, который можно вырезать из полученного прямоугольника?
Экстрмальные тесты: [latex]a=2r[/latex] ; [latex]a=r\sqrt{2}[/latex]

Решение:
Назовем меньшую сторону прямоугольника»[latex]b[/latex]», радиус большей окружности «[latex]R[/latex]», радиус меньше «[latex]r[/latex]».
В треугольнике со сторонами R,b,a, нам известны R,a, найдем b: По теореме Пифагора b=[latex]\sqrt{4R^2+a^2}[/latex], следовательно:
[latex]b=2r[/latex], что можно понять из рисунка или применить свойства вписанной в прямоугольник окружности. Получаем [latex]r=b/2[/latex].
Рисунок для пояснения решения:

Тесты.

Входные данные Выходные данные
1 9,5 8
2 9,8 16
3 13,11 23

Код.

 

Related Images:

ML38. Максимальный размер прямоугольника, вырезанного из круга

Задача. Какого наибольшего размера прямоугольник можно вырезать из круга диаметра [latex]d[/latex], если известно, что длины его сторон образуют золотую пропорцию.

Входные данные: 

Единственное число — диаметр окружности.

Выходные данные:

Два числа — длины сторон прямоугольника.

ml38

Тесты.

Входные данные Выходные данные
[latex]d[/latex] [latex]a[/latex] [latex]b[/latex]
1 0 0 0
2 1 0.850651 0.525731
3 2 1.7013 1.05146
4 21 17.8638 11.0404
5 0.32 0.272208 0.168234
6 1.7 1.44611 0.893743
7 134 113.981 70.448

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

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

Решение.

Прямоугольник будет иметь наибольший размер в случае, когда его вершины лежат на окружности. Тогда, очевидно, диаметр окружности будет диагональю данного прямоугольника. Согласно условию, длины его сторон образуют золотую пропорцию. Это означает, что [latex]\frac { a }{ b } =\phi [/latex], где [latex]a[/latex] — длина большей стороны прямоугольника, [latex]b[/latex] — длина его меньшей стороны, а [latex]\phi=\frac { 1+\sqrt { 5 } }{ 2 } [/latex]. Отсюда [latex]a=b\cdot \phi[/latex]. По теореме Пифагора, [latex]{ a }^{ 2 }+{ b }^{ 2 }={ d }^{ 2 }[/latex]. Путём подстановки из предыдущего выражения и простых алгебраических преобразований получим формулу для вычисления длины меньшей стороны: [latex]b=d\cdot \sqrt { \frac { 1 }{ { \phi }^{ 2 }+1 } } [/latex].
Сначала для удобства находим значение [latex]\phi[/latex], затем — по указанным формулам длины сторон прямоугольника.

Ссылка на код на ideone.com: здесь (C++) и здесь (Java).

Related Images:

ML26. Площадь треугольника

Задача.

Найти площадь треугольника по заданным координатам его вершин [latex] A(x_a,y_a,z_a )[/latex], [latex]B(x_b,y_b,z_b)[/latex] и [latex]C(x_c,y_c,z_c)[/latex].

Входные данные

Координаты вершин треугольника [latex]ABC[/latex]

Выходные данные

Площадь [latex]S[/latex] треугольника [latex]ABC[/latex]

Тесты

Входные данные Выходные данные
[latex]x_a [/latex] [latex]y_a [/latex] [latex]z_a [/latex] [latex]x_b [/latex] [latex]y_b [/latex] [latex]z_b [/latex] [latex]x_c [/latex] [latex]y_c [/latex] [latex]z_c [/latex] [latex]S [/latex]
-2 1 2 3 -3 4 1 0 9 19.7864
-3 13 -5 6 11 12 4 8 18 50.5618
-6 0 4 5 1 3 -3 -1 -4 43.307
-6 -2.3 -8.2 1.9 -7.8 0.2 -8.5 3.4 -8.9 28.0909

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

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

Используя известные нам координаты вершин треугольника и формулу вычисления расстояния между двумя точками в пространстве [latex]AB=\sqrt{(x_2-x_1)^2+(y_2-y_1)^2+(z_2-z_1)^2}[/latex] можно найти длины сторон треугольника [latex]ABC[/latex]. Для нахождения площади используем Формулу Герона[latex]AB=\sqrt{p*(p-a)*(p-b)*(p-c)}[/latex] перед этим находим полупериметр [latex]p[/latex] по формуле [latex]p=\frac{a+b+c}{2}[/latex] подставляем значение и выводим конечный результат.

Ссылки

Условие задачи.
ideone

Related Images:

ML 31. Площадь параллелепипеда

Условие задачи:

Найти площадь полной поверхности параллелепипеда три стороны которого образованы векторами [latex] \overrightarrow{a}=(a_x,a_y,a_z), \overrightarrow{b}=(b_x,b_y,b_z) [/latex] и [latex]\overrightarrow{c}=(c_x,c_y,c_z)[/latex].

Входные данные:

Координаты векторов [latex] \overrightarrow{a}, \overrightarrow{b}[/latex] и [latex] \overrightarrow{c} [/latex].

Выходные данные:

Площадь полной поверхности параллелепипеда.

Тесты

Входные данные Выходные данные
1 -5.6 8.3 -7.1 2 11 -8 2.1 1 3.3 389.28894739406866
2 1 2 3 4 5 6 7 8 9 58.787753826796276
3 -9 2 4 -3 5 1 -6 7 8 305.5334243147188
4 1 1 1 1 1 1 1 1 1 0.0
5 0 0 1 0 1 0 1 0 0 6.0
6 0 0 0 1 0 0 0 0 1 2.0
7 1 0 0 0 0 1 0 0 1 2.0

 

Код на C++

Код на Java

Алгоритм

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

Для решения данной задачи нужно сперва найти площади трёх сторон (параллелограммов) данного параллелепипеда. Воспользуемся геометрическим смыслом векторного произведения:

  • Модуль векторного произведения [latex] [\overrightarrow{a},\overrightarrow{b}] [/latex] равняется площади S параллелограмма, построенного на приведённых к общему началу векторах [latex]\overrightarrow { a }[/latex] и [latex]\overrightarrow { b } [/latex]

Рассчитаем площадь каждого параллелограмма по формуле [latex] \left|\left[ \overrightarrow { a } , \overrightarrow { b } \right]\right| =
\left|(a_{ y }b_{ z }-a_{ z }b_{ y }, a_{ z }b_{ x }-a_{ x }b_{ z }, a_{ x }b_{ y }-a_{ y }b_{ x })\right|[/latex].

Найдя все три стороны, получим площадь полной поверхности параллелепипеда по формуле

[latex] S=2*(S_1+S_2+S_3) [/latex], где [latex] S_n [/latex] — площадь стороны параллелепипеда.

 

Ссылки:

Условие задачи ML31.
Работающая версия программы на языке C++.
Работающая версия программы на языке Java.
Геометрические свойства векторного произведения.

 

Related Images:

ML33. Угол между вектором и осями координат

Задача

Найдите углы между вектором [latex] \overrightarrow{a}=(x,y,z)[/latex] и координатными осями [latex]Ox, Oy, Oz[/latex].

Входные данные

Координаты вектора [latex]\overrightarrow{a}=(x,y,z)[/latex].

Выходные данные

Угол между заданным вектором и [latex]Ox[/latex].
Угол между заданным вектором и [latex]Oy[/latex].
Угол между заданным вектором и [latex]Oz[/latex].

Тесты

Входные
данные
Выходные
данные
x y z угол c Ox угол c Oy угол c Oz
0 0 1 90 90 0
0 9999.99 0 90 0 90
1 1 1 54.7456 54.7456 54.7456
-9999.5 -9999.5 -9999.5 -54.7456 -54.7456 -54.7456
0 0 0 невозможно при нулевом векторе

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

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

Для начала проверим не является ли заданный вектор нулевым, так как он не будет образовывать угол между векторами. Если это нулевой, то выводить, что это невозможно при нулевом векторе. При другом условии решим задачу,а поскольку в условии нам даны координаты только 1 вектора, а для вычисления угла между 2 векторами нужно 2 пары координат, то будем считать, что [latex] Ox(1,0,0) [/latex], [latex] Oy(0,1,0) [/latex],[latex] Oz(0,0,1) [/latex].
Теперь мы можем вычислить угол между векторами через формулу[latex] \cos{ |\widehat { a,b } }|=\frac { \overrightarrow { a } \overrightarrow { b } }{ \left| \overrightarrow { a } \right| \left| \overrightarrow { b } \right| } [/latex], где [latex] \overrightarrow { a } \overrightarrow { b }=\ x_a\cdot{x_b}+y_a\cdot{y_b}+z_a\cdot{z_b}\[/latex] и [latex] { \left| \overrightarrow { a } \right| }=\sqrt{x_a^2+y_a^2+z_a^2} [/latex], которую можно сократить в соответствии с нашими значениями координат [latex]Ox,Oy,Oz [/latex] и в итоге получаем формулу [latex] \arccos=\frac{o}{\sqrt{x_a^2+y_a^2+z_a^2}} [/latex], где [latex] O [/latex] ось координат и [latex]o [/latex] значение по этой оси координат. В эту формулу поочередно подставляем наши значения и получаем косинусы углов между осями координат и заданным вектором. Для вычисления углов в радианах воспользуемся встроенной функцией [latex] acos [/latex], а для вычисления в градусах домножим полученный результат на 180 и разделим на встроенное значение числа [latex] \pi [/latex].

Ссылки
Ideone

Related Images:

ML7. Смесь

Задача. Смешано [latex]v_1[/latex] литров воды температуры [latex]t_1[/latex] с [latex]v_2[/latex] литрами воды температуры [latex]t_2[/latex]. Найти объем и температуру образовавшейся смеси.

Алгоритм решения

Из физики мы знаем, что
[latex]Q_3 = Q_1 + Q_2[/latex],
[latex]Q = m \cdot C \cdot t[/latex],
[latex]m = \rho \cdot v[/latex],
где
[latex]Q[/latex] — количество теплоты,
[latex]m[/latex] — масса,
[latex]C[/latex] — теплоемкость,
[latex]t[/latex] — температура,
[latex]\rho[/latex] — плотность,
[latex]v[/latex] — объем.
Отсюда объём образовавшейся смеси
[latex]v_3 = v_1 + v_2[/latex],
а её температура
[latex]t_3 = \frac{\rho \cdot v_1 \cdot C \cdot t_1 + \rho \cdot v_2 \cdot C \cdot t_2}{\rho \cdot v_3 \cdot C} = \frac{\rho \cdot C \cdot (v_1 \cdot t_1 + v_2 \cdot t_2)}{\rho \cdot v_3 \cdot C} = \frac{v_1 \cdot t_1 + v_2 \cdot t_2}{v_3}[/latex].

Тесты

Входные данные Выходные данные
[latex]v_1[/latex] [latex]t_1[/latex] [latex]v_2[/latex] [latex]t_2[/latex] [latex]v_3[/latex] [latex]t_3[/latex]
2 4 2 4 4 4
10 10 10 10 20 10
 3 1 1 3 4 1.5
0 1000 1 5 1 5

Реализация

ideone: ссылка

 

Related Images:

e-olymp 248. Юный садовод

Задача взята с сайта www.e-olymp.com

Условие задачи

Мама попросила Васю полить все молодые деревца в саду. Вася знает, что пока деревья маленькие, их надо очень хорошо поливать. А вот сколько поливать — неизвестно. Но Вася — очень умный мальчик. Он внимательно прочитал весь учебник ботаники для средней школы и выяснил, что полив прямо пропорционален количеству листьев на дереве. Для хорошего роста деревьев достаточно выливать под дерево ежедневно по одному литру воды на каждый лист.

К счастью Васи оказалось, что листья на деревьях растут ярусами, причем на верхнем ярусе два листа, на втором — четыре, на следующем — шесть, и так далее, на каждом последующем ярусе на два листа больше по сравнению с предыдущим. А на самой верхушке растет еще один листик. Хитрый Вася послал младшую сестренку Машеньку подсчитать количество ярусов на каждом дереве, а Вас просит написать программу, которая для каждого дерева вычислит количество литров воды для его полива.

Входные данные

Количество ярусов [latex]n (0 \leq n \leq 1000)[/latex] на дереве.

Выходные данные

Вывести количество литров воды для полива этого дерева.

 

Тесты

Входные данные Выходные данные
1. 3 13
2. 0 1
3. 50 2551
4. 560 314161

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

ideone.com

Решение

Для решения этой задачи необходимо найти сумму арифметической прогрессии, где [latex]N=n,[/latex] [latex]a_{1} = 2[/latex] и  [latex]d = 2[/latex] и добавить к ней единицу (лист с верхушки).  Для этого можно воспользоваться формулой суммы арифметической прогрессии [latex]Sn=\frac{2a_{1}+d\left(n-1 \right)}{2}n \rightarrow n^2+n[/latex], либо при помощи цикла [latex]n[/latex] раз прибавлять к [latex]a[/latex] двойку, получая при этом следующий член прогрессии и добавлять его к сумме.

Засчитанное решение на e-olymp.com

Related Images:

ML21

Задача. Найти сумму членов арифметической прогрессии a, a+d, a+2d \dots, a+(n-1)d по данным значениям a, d, n.

Тесты:

[latex]a[/latex] [latex]d[/latex] [latex]n[/latex] [latex]Sn[/latex]
8 657 0 0
5 0 2 10
5 8 1 5
0 5565 88 21302776

Код:

Алгоритм.

В данной программе я воспользовался формулой суммы арифметической прогрессии. А именно [latex] S_{n} = \frac{a_{1} + d(n — 1)}{2} * n [/latex], где [latex]a_{1}[/latex] — первый член арифметической прогрессии, [latex]d[/latex] -разница арифметической прогрессии и [latex]n[/latex] — номер последнего члена суммы. Программа же просто выводит результат данных вычислений на экран.

Related Images:

ML14

Задача

. Вычислить период колебания маятника длины [latex]l[/latex].

Входные данные

Длина нити маятника [latex]l[/latex].

Выходные данные

Период колебаний маятника.

Тесты

Входные данные Выходные данные
1 0,3 1.09891
2 1 2.00632
3 40 12.6891

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

Пояснение

Условием задачи было вычислить период колебаний маятника [latex]T[/latex], имея длину маятника [latex]l[/latex]. Период колебаний маятника можно рассчитать с помощью формулы: [latex]T = 2\pi\sqrt{\frac{l}{g}}[/latex]. Мы объявляем три переменные типа [latex]double[/latex] [latex]T, l, g,[/latex] где [latex]T[/latex]-период колебаний маятника, [latex]l[/latex] — длина маятника,  [latex]g[/latex] = [latex]9.8075[/latex] — ускорение свободного падения на поверхности Земли в Одессе.  [latex]l[/latex]  — входной параметр. Затем, используя формулу [latex]T = 2\pi\sqrt{\frac{l}{g}}[/latex], вычисляем и выводим значение периода.

  • Условие задачи здесь.
  • Ссылка на решение на ideone.com здесь.

Related Images:

ML18

Задача ML18

Условие задачи

Найти периметр треугольника по заданным координатам вершин [latex]A(x_1,y_1,z_1)[/latex], [latex]B(x_2,y_2,z_2)[/latex] и [latex]C(x_3,y_3,z_3)[/latex].

Входные данные

В одной строке заданы 9 чисел [latex]x_1, x_2, x_3, y_1, y_2, y_3, z_1, z_2, z_3[/latex] — координаты вершин треугольника [latex]ABC[/latex],  значения которых не превышают по модулю [latex]100[/latex].

Выходные данные

Вывести периметр [latex]p[/latex] данного треугольника.

Также условие задачи можно посмотреть здесь.

Тестирование

Входные данные ([latex]x_i, y_j, z_k; i, j, k= 1, 2, 3 [/latex]) Выходные данные
1 2 2 5 1  0 -1 3 5 10 16.0261556346
2 1 4 5 3 6 0 10.5 -2 -1 31.9047289894
3 15 26 13 32 18 56 80 0 -6.2 212.0962807371
4 -13 68 44 99 -100 70 0 2 1 450.5748518262
5 100 9 17 18 29 88 65 -16 0.36 310.4318979186

Реализация

Алгоритм решения

  1. Задан произвольный треугольник [latex]ABC[/latex] с такими координатами вершин: [latex]A(x_1,y_1,z_1)[/latex], [latex]B(x_2,y_2,z_2)[/latex] и [latex]C(x_3,y_3,z_3)[/latex]. Обозначим стороны треугольника [latex] AB, BC, AC[/latex] как [latex]a, b, c[/latex] соответственно.
  2. Очевидно, что для того, чтобы вычислить периметр данного треугольника, нужно найти длины его сторон. Для этого воспользуемся формулой вычисления расстояния между двумя точками в пространстве. Получаем:[latex]a=\sqrt {(x_2-x_1)^2 + (y_2-y_1)^2 + (z_2-z_1)^2}[/latex]; [latex]b= \sqrt {(x_3-x_2)^2 + (y_3-y_2)^2 + (z_3-z_2)^2}[/latex]; [latex]c= \sqrt {(x_3-x_1)^2 + (y_3-y_1)^2 + (z_3-z_1)^2} [/latex].
  3. Зная значения сторон треугольника, вычисляем периметр, используя формулу. Получаем: [latex]p= a + b + c[/latex].

Подробнее о декартовой системе координат можно прочесть здесь.

Для запроса на выполнение следует перейти по ссылке.

 

Related Images:

ML10

Задача

Три сопротивления [latex]{R}_{1}{,R}_{2},{{R}_{3}}[/latex] соединены параллельно. Найти сопротивление цепи.

Входные данные

В единственной строке задано три числа — сопротивления трех резисторов.

Выходные данные

Вывести число — сопротивление цепи.

Код

 

Тесты

Входные данные Выходные данные
1 1 2 3 0.545
2 2 2 2 0.667
3 12 7 8 2.847
4 2 3 6 1
5 0.2 0.5 0.7 0.119

Решение

Сначала задаем 3 переменные, которые мы вводим с клавиатуры — напряжение на каждом резисторе.  Находим сопротивление цепи по формуле [latex]\frac{{R}_{1}\cdot {R}_{2}\cdot {{R}_{3}}}{{R}_{1}\cdot{R}_{2}+{R}_{1}\cdot {R}_{3}+{R}_{2}\cdot {R}_{3}}[/latex]. Затем округляем до 3 точек после запятой используя библиотеку [latex]cmath[/latex] и функцию [latex]round[/latex].

Ссылка на код  здесь.

Related Images:

ML 20

Задача

Найти площадь кольца, внутренний радиус которого равен [latex]r[/latex], а внешний – [latex]R[/latex] ([latex]r<R[/latex]).

Входные данные:

В единственной строке указаны внешний и внутренний радиусы, разделенные пробелом.

Выходные данные:

Единственное число — площадь кольца.

Тесты:

R r Площадь кольца
3 2 15.708
12.921 7.903 328.28
25 3.5 1925.01
10.2531 1 327.122

Решение:

Описание решения:

При решении данной задачи использовались две переменные типа [latex]double[/latex]. Так как в постановке задачи не было указано, какими могут быть числа, то для обхвата наибольшего диапазона чисел разумно использовать именно этот тип данных. Помимо этого, была использована константа из математической библиотеки [latex]cmath[/latex], а именно, константа числа [latex]\pi[/latex]: [latex]M[/latex]_[latex]PI[/latex].

Чтобы найти площадь кольца, образованного двумя окружностями, необходимо найти площадь круга, образованного внешним радиусом кольца, по формуле [latex]\pi\cdot R^2[/latex], и площадь круга, образованного внутренним радиусом кольца, по формуле [latex]\pi\cdot r^2[/latex]. Затем, из площади большего круга вычесть площадь меньшего.

Получаем формулу: [latex]\pi\cdot R^2 — \pi\cdot r^2[/latex]. Подставляя в формулу переменные и константы, получаем:

После выполнения всех операций перейдем на новую строку с помощью команды [latex]endl[/latex].

Здесь код программы на сайте ideone.com.

Related Images:

ML2

Даны действительные числа [latex]x[/latex] и [latex]y[/latex].
Получить[latex]\frac{|x|-|y|}{|x|+|y|}[/latex] .

Код

Тесты

Входные данные Выходные данные
x y
6 4 0,2
6 2 0,5
2 2 0
1 1 0

Решение

Пусть заданы действительные числа x, y. Включаем cmath — заголовочный файл стандартной библиотеки языка программирования C++, разработанный для выполнения простых математических операций. В нашем случае деления одного выражения на другое. Используем тип double для действительных чисел для ввода x, y. Вводим с помощью cin x, y. Выводим с помощью cout математическое выражение, используя abs — функция, которая вычисляет абсолютную величину (модуль) значения x и y.

Код задачи

http://ideone.com

Условие задачи

http://mazurok.com

Related Images:

ML17

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

Входные данные
В одной строке заданы гипотенуза [latex] (c)[/latex] и катет [latex] (a)[/latex] прямоугольного треугольника, не превышающие  [latex]1000[/latex].

Выходные данные
В одной строке через пробел — второй катет и радиус вписанной окружности с точностью два знака после запятой.

Тесты

Входные данные Выходные данные
1. 5 4 3.00 1.00
2.  3.25  1  3.09  0.42
3.  15  8  12.69  2.85
4.   42.2 25 34.00 8.40
5. 62  23 57.58  9.29
6. 125 47 115.83 18.91
7. 1000 758 652.25 205.13

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

ideone.com

Решение
Для нахождения катета необходимо воспользоваться теоремой Пифагора  [latex]c^2=a^2+b^2 \ \Rightarrow \ b^2=c^2-a^2 \ \Rightarrow \ b=\sqrt(c^2-a^2)[/latex].
Радиус окружности, вписанной в прямоугольный треугольник:
рассмотрим прямоугольный треугольник [latex]ABC[/latex] со вписанной окружностью с центром в точке [latex]O[/latex].

2
[latex]OD=OE=r[/latex] ; [latex]AC[/latex], [latex]CB[/latex], [latex]AB[/latex] — касательные к окружности. По свойствам касательных (1.касательная к окружности перпендикулярна радиусу, проведенному в точку касания; 2.отрезки касательных, проведенных из одной точки равны) [latex]AE=AD, DC=FC, BF=BE[/latex] ; [latex]OD\perp AC, OE\perp AC[/latex], следовательно [latex]AEOD[/latex] — квадрат и [latex]AD=AE=r[/latex].
Пусть [latex]AC=a, AB=b, BC=c[/latex], тогда [latex]\begin{cases}r+DC=a\\r+BE=b\\DC+BE=c\end{cases}\Rightarrow \begin{cases}DC=a-r\\BE=b-r\\a+b-2r=c\end{cases} \Rightarrow[/latex] [latex]r=\frac{a+b-c}{2}[/latex].

Related Images:

ML 1

Условие задачи:

Даны два действительных числа [latex]a[/latex] и [latex]b[/latex]. Получить их сумму,  разность и произведение.

Код №1

Тесты

a z b sum
5 + 6 11
7 8 -1
9 * 11 99

 

Решение №1

Для создания данной программы я описал 4 переменных: [latex]a[/latex], [latex]b[/latex], [latex]z[/latex],  sum.  Для переменных [latex]a[/latex],  [latex]b[/latex],  [latex]sum[/latex] я взял тип переменных «long double» — так как не указано какие числа должны быть. Символом z мы обозначим переменную в  типе «char» —  так как мне надо указать знак операции. Для вычисления суммы надо ввести знак операции «+»,  для разности «-» и для произведения  «*»  выглядит все примерно так мы вводим (первое число «[latex]a[/latex]») (знак «[latex]z[/latex]» ) (второе число «[latex]b[/latex]») и получаем (ответ «[latex]sum[/latex]»).

 

Код №2

 

Решение №2

Это не то, что просили сделать изначально,  но я думаю это тоже будет интересно.

Отличие от первого кода состоит в том, что я добавил дополнительные команды,  а именно:  деления «/»,  возведения в степень «^»  и остаток от деления «%».

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

Ссылки

Условие задачи;
Код программы №1 на Ideone.com;
Код программы №2 на Ideone.com;

Related Images: