А27

Задача А27. Даны действительные положительные числа [latex]a[/latex], [latex]b[/latex], [latex]c[/latex]. По трём сторонам с длинами [latex]a[/latex], [latex]b[/latex], [latex]c[/latex] можно построить треугольник. Найти углы треугольника.

[latex]a[/latex] [latex]b[/latex] [latex]c[/latex] [latex]\alpha[/latex] [latex]\beta[/latex] [latex]\gamma [/latex] Комментарий
3 4 5 0,643501 0,927295 1,570796 Тест пройден.
6,8 5,2 9,3 0,801375 0,581525 1,758693 Тест пройден.
7,3 5 8,1 1,091967 0,653414 1,396212 Тест пройден.

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

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

 

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

Так как изначально в условии задачи сказано, что из отрезков с длинами [latex]a[/latex], [latex]b[/latex], [latex]c[/latex] можно построить треугольник, то решение задачи сводится к нахождению углов по  следствию из «Теоремы косинусов»:  [latex]\cos\alpha=\frac{b^{2}+c^{2}-a^{2}}{2bc}[/latex]. Затем, чтобы найти меру угла в радианах, достаточно просто взять [latex]\arccos(\cos\alpha)[/latex].

Аналогично вычислены меры двух других углов в радианах.

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

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

Related Images:

Ю1.6

Задача:  Коммерсант, имея стартовый капитал в [latex]k[/latex] рублей, занялся торговлей, которая ежемесячно увеличивает капитал на [latex]p%[/latex]. Через сколько лет он накопит сумму [latex]s[/latex], достаточную для покупки собственного магазина?

[latex]k[/latex] [latex]p[/latex]  [latex]s[/latex] [latex]years[/latex] Комментарий:
0 10 0 0 Пройден
 20 10 20 0 Пройден.
 20  10  30 5 Пройден
0.6 30 21 14 Пройден
1.14 0.08 40.00 4450 Пройден
1.14 83.2 30 6 Пройден
1000 20 800 0 Пройден

 

 

 

Решение задачи основано на т.н. «формуле сложных процентов»: [latex]s=k(1+\frac {p}{100})^{years}[/latex].
По условию задачи, необходимо определить значение переменной years, с учётом следующих ограничений:
[latex]k \ge 0[/latex], [latex]p \ge 0[/latex], [latex]s \ge 0[/latex].
Если [latex]s \le k[/latex], то коммерсант уже может позволить себе покупку, следовательно, [latex]years = 0[/latex].
В противном случае, необходимо прологарифмировать левую и правую часть выражения.
Приведя его к удобному виду, получим:
[latex]\frac { s }{ k }=(1+\frac {p}{100})^{years}[/latex] [latex]\ln { (1 + \frac { p }{ 100 })^{ years } }= \ln{ (\frac { s }{ k }) }[/latex] В конечном итоге, получаем:
[latex]years=\frac { \ln { \frac {s}{k} } }{ \ln { (1+\frac { p }{ 100 }) } }[/latex]

В программе использован тип данных с плавающей точкой и двойной точностью.
Выбор продиктован требованиями функций заголовочного файла cmath.
Для выполнения программы и проверки тестов можно воспользоваться следующим объектом.
Реализация на Java: http://ideone.com/wbe8Ah

Related Images:

Ю1.12

Задача

Экстремальные точки маятника. Заданы координаты точки подвески математического маятника [latex]A(x_0, y_0, z_0)[/latex] и координаты одной из точек его наивысшего подъема [latex]B(x_1, y_1, z_1)[/latex]. Найти координаты самой низкой точки траектории и другой наивысшей точки подъема.

Код C++

Код С++ на Ideone:

Код Java

Код С++ на Ideone: Ю1.12

Комментарии к решению

Математический маятникВычисляя координаты второй наивысшей точки подъема заметим, что координата  [latex] z_1[/latex] не изменяется, а  другие две координаты изменятся так:

  1.  [latex]x=x_0-(x_1 — x_0) [/latex]
  2.  [latex]y=y_0-(y_1-y_0) [/latex]

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

 [latex]d=\sqrt{(x_0-x_1)^2+(y_0-y_1)^2+(z_0-z_1)^2}[/latex]. С помощью этой формулы вычисляем [latex] z_0[/latex] ,  а координаты [latex] x_0, y_0[/latex] не изменяются.

 Тесты

x0 y0 z0 x1 y1 z1 coordinats of the low point coordinats of the another high point Комментарии
0 0 0 0 0 0 (0.0; 0.0; 0.0) (0.0; 0.0; 0.0) пройден
1 2 3 4 5 6  (1.0; 2.0;-2.2) (-2.0; -1.0; 6.0) пройден
1.2 1.2 1.2 4.2 4.2 4.2 (1.2; 1.2; -4.0) (-1.8; -1.8; 4.2) пройден
 -6 -5  -4  -3 -2  -1  (-6.0; -5.0; -9.2) (-9.0; -8.0; -1.0)  пройден
 0 -10 15 15 10 -16  (0.0; -10; -24.8) (-15.0; -30.0; -16.0)   пройден

 

Related Images:

А1

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

[latex]a[/latex] [latex]b[/latex] [latex]a+b[/latex] [latex]a — b[/latex] [latex]ab[/latex] Комментарий
 0  0  0 0.0 0.0 Пройден
 1 2  3.0 -1.0  2.0 Пройден
 100.3 1000.0001  1100.3001  -899.7001  100300.01003 Не пройден из-за ошибки округления
 1.2e2  -2.2e2  -100  340  -26400 Пройден
 1.2e22  -2.2e22  -1e22 3.4e22  2.64e44 Пройден
1e308 1e308 1e308 0 1e616 Не пройден — превышено макс.значение

Диапазон тестов нужно подобрать так, чтобы произведение не выходило за допустимые значение для данного типа. Иначе получаем inf — бесконечность.
Если разница в порядках чисел велика (например, 1e38 и 1e-38), то при сложении и вычитании меньшее по абсолютной величине игнорируется.

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

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

Related Images: