А19

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

[latex]a_1[/latex] [latex]a_2[/latex] [latex]V_{01}[/latex] [latex]V_{02}[/latex] [latex]S[/latex] [latex] t[/latex] Комментарий
1 1 1 1 1 0.41 Пройден
3.2 2.1 3 7.5 20.8 1.45 Пройден
0 0 4 1 8 1.6 Пройден
В задаче нужно найти время,  через которое встретятся два тела, двигающихся равноускоренно, зная начальные скорости и ускорения этих тел, а также расстояние между ними.

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

[latex]S=V_0t+\frac{at^2}{2}[/latex]

Так как расстояние делится на две части, то получаем:

[latex]S=V_{01}t+\frac{a_1t^2}{2}[/latex],

[latex]S=S_0 — V_{02}t+\frac{a_2t^2}{2}[/latex]

Значит  [latex]S_0=V_{01}t+\frac{a_1t^2}{2}+V_{02}t+\frac{a_2t^2}{2}[/latex]. Получаем уравнение времени:

[latex]t^2(\frac{a_1+a_2}{2})+t(V_{01}+V_{02})-S_0=0[/latex]

Упрощаем коэффициенты  уравнения :

[latex]a=\frac{a_1+a_2}{2}[/latex],    [latex]b=V_{01}+V_{02}[/latex],    [latex]at^2+bt-S_0=0[/latex]

Если [latex]a=0[/latex],  находим корень уравнения  по формуле [latex]t=\frac{S_0}{b}[/latex]. Если же [latex]a[/latex] не равняется нулю, находим дискриминант по формуле [latex]D=b^2+4aS[/latex], дискриминант в данной задаче всегда положителен. Нет смысла находить время по формуле [latex]t=\frac{b^2-\sqrt{D}}{2a}[/latex], так как время не может быть отрицательным, остается использовать [latex]t=\frac{b^2+\sqrt{D}}{2a}[/latex] — это и будет искомое время.

Ссылка на Ideone

Код для Java

Ссылка на Ideone

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

Кубическое уравнение. Заданы три корня кубического уравнения : [latex]x_{1},x_{2},x_{3}[/latex] . Найти коэффициенты этого уравнения.

[latex] x_{1}[/latex] [latex] x_{2}[/latex] [latex] x_{3}[/latex] Результат [latex]b[/latex] Результат [latex] c[/latex] Результат [latex] d[/latex] Комментарий:
 1  2  3  -6.00  11.00  -6.00 Тест пройден
0.5  6  0.78  -7.28 8.07  -2.34 Тест пройден
-1  -2  -2.25  5.25 8.75  4.50 Тест пройден
 -0.24 -1 2.24  -1.00 -2.54  -0,54 Тест пройден

 

 

Дано кубическое уравнение типа [latex](x — x_{1})(x-x_{2})(x-x_{3})=0[/latex]. После недолгих преобразований я получаю такое выражение:

[latex]x^{3}-(x_{1}+x_{2}+x_{3})x^{2}+(x_{1}x_{2}+x_{2}x_{3}+x_{3}x_{1})x-x_{1}x_{2}x_{3}=0[/latex].

Потом присваиваю трём переменным выражения для коэффициентов:

[latex]\begin{cases} & \ x_{1}+x_{2}+x_{3}=-b \\ & \ x_{1}*x_{2}+x_{2}*x_{3}+x_{1}*x_{3}= c \\ & \ x_{1}*x_{2}*x_{3}=-d \end{cases}[/latex]

где [latex]b[/latex] — коэффициент при [latex]x^{2}[/latex], [latex] c[/latex] — при [latex]x[/latex], а [latex] d[/latex] — свободный коэффициент.

 В итоге, все решение задачи свернулось в 3 этапа:

  1. Ввод переменных.
  2. Вычисление коэффициентов.
  3. Вывод результата.

Результат выводится с точностью до двух знаков после запятой.

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

Код на языке Java:

 

Related Images:

Ю1.24

Задача. Треугольник задается координатами вершин на плоскости: [latex]A(x_{1},y_{1}), B(x_{2},y_{2}), C(x_{3},y_{3})[/latex]. Найти точку пересечения биссектрис [latex] I(x,y)[/latex]  треугольника [latex]ABC[/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] [latex]x[/latex] [latex]y[/latex] Комментарий
0 4 3 0 0 0 1.00 1.00 Пройден
0 -4 -3 0 0 0 -1.00 -1.00 Пройден
-5 -1 0 -13 -5 -13 -3.00 -11.00 Пройден
1 1 5 1 3 4 3.00 2.07 Пройден

Код на С

Код на Java

Решение:

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

[latex]x=\frac{ax_{1}+bx_{2}+cx_{3}}{a+b+c}[/latex],

[latex]y=\frac{ay_{1}+by_{2}+cy_{3}}{a+b+c}[/latex] ,

где [latex] a [/latex]-длина стороны [latex]CB[/latex], [latex]b[/latex]-длина стороны [latex]AC[/latex], [latex]c[/latex]-длина стороны [latex]AB[/latex].

 

Для этого необходимо предварительно найти длины сторон по формуле :

[latex] AB=\sqrt{(x_{1}-x_{2})^{2}+(y_{1}-y_{2})^{2}} [/latex], где [latex] A(x_{1},y_{1}), B(x_{2},y_{2}) [/latex].

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:

Ю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:

Ю1.5

Задача: в такси одновременно сели три пассажира. Когда вышел первый пассажир, на счетчике было [latex]p_{1}[/latex] рублей; когда вышел второй — [latex]p_{2}[/latex] рублей. Сколько должен был заплатить каждый пассажир, если по окончании поездки счетчик показал [latex]p_{3}[/latex] рублей? Плата за посадку составляет [latex]p_{0}[/latex] рублей.

Ввод Вывод
 [latex]p_{0}[/latex]  [latex]p_{1}[/latex]  [latex]p_{2}[/latex]  [latex]p_{3}[/latex] [latex]op_{1}[/latex]  [latex]op_{2}[/latex] [latex]op_{3}[/latex] Комментарий
 0  0  0  0  0.00  0.00  0.00  Пройден
 6  1  2  3  2.33  2.83  3.83  Пройден
 7  2 5  16  3.00  4.50  15.50  Пройден
 1  1  1  1  0,67  0,67  0,67  Пройден
 150  1138  2590  5788  429.33  1155.33  4353.33  Пройден
 3  0  0  6  1.00  1.00  7.00  Пройден
[latex]p_{0}[/latex],  [latex]p_{1}[/latex],  [latex]p_{2}[/latex],  [latex]p_{3}[/latex] — целые числа, хоть и определены как double, всё равно это целые числа. У таксиста просто такой счетчик.
Идея решение: Первый участок проехали трое и расходы делятся на троих ([latex]\frac { { p }_{ 1 } }{ 3 }[/latex]). Второй участок – двое, значит за него двое платят поровну ([latex]\frac{{p}_{2}-{p}_{1}}{2}[/latex]). Последний участок проехал один, ему за него и платить ([latex]{p}_{3}-{p}_{2}[/latex]). Оплатой за поездку для каждого является сумма стоимости каждого пути до его остановки.

 

Related Images:

Ю1.7

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

Тесты:

k p s n result
1 1 1 1 error
1 2 3 4 2
 3.5 11 56 3.77 1
 34 55.4 109 31.456 error

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

Версия кода на языке Java:

Ссылка:http://ideone.com/2TY3PH

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

                [latex]\frac{log(\frac{(n \times s)}{k})}{log(p)}[/latex]

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

 

Программа состоит из следующих частей:

  1. Объявление переменных k,p,s,n типа float для хранения входных данных
  2. Вывод приветствия
  3. Ввод пользователем значений переменных k,p,s,n с помощью scanf
  4.  Вывод исходных данных
  5. Вычисление и вывод результата по формуле с предварительной проверкой значения p, которое не должно равняться 1, так как находиться в формуле под логарифмом.
  6. Завершение программы

 

Программа проверялась по таблице наборов входных данных. Некоторые наборы содержали неправильное значение p = 1. Для этих значений программа выдала предусмотренное сообщение об ошибке. Для правильны данных результат совпал с вычисленным вручную.

Related Images:

Ю1.11

Задача

     Комплексное число. Заданы действительная и мнимая части комплексного числа     [latex]z=x+\imath \cdot y[/latex] .  Преобразовать его в тригонометрическую форму и напечатать в виде выражения:

[latex]z=r\cdot\left(\cos\varphi+\sin \varphi\right)[/latex] .

     Для справки:    [latex]r=\sqrt{x^{2}+y^{2}}[/latex] ;      [latex]\varphi= \text{arctg} \left(\frac{y}{x}\right)[/latex]  .

x

y

Результат

Комментарий

4

2

z = 4.47214 * (cos(0.463648) + i *sin(0.463648))

пройден

1

0

z = 1 * (cos(0) + i * sin(0))

пройден

-1

-2

z = 2.23607 * (cos(-2.03444) + i * sin(-2.03444))

пройден

0

0

no answer

пройден;

(x стоит в знаменателе и не может быть нолем)

-100

356

z = 369.778 * (cos(1.84464) + i * sin(1.84464))

пройден

1,2

5,4

  z = 5.53173 *(cos(1.35213) + i*sin(1.35213))

пройден

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

 

В условии задачи даны все нужные формулы.

Программа вычисляет r (радиус [latex]r[/latex]) и f (угол [latex]\varphi[/latex] ) и выводит их, вставляя в формулу геометрической формы комплексного числа  (которая не меняется).

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

Решение на Java:

 

Related Images:

Ю1.22

Задача.

Треугольник задается координатами своих вершин на плоскости: [latex]A(x1,y1)[/latex], [latex]B(x2,y2)[/latex], [latex]C(x3,y3)[/latex]. Найти площадь треугольника ABC.

Тесты.

A B C Площадь Комментарий
[latex](0;0)[/latex] [latex](0;4)[/latex] [latex](5;0)[/latex] 10 Пройден
[latex](-1.5;2)[/latex] [latex](2.5;-2)[/latex] [latex](4;4.25)[/latex] 15.5 Пройден
[latex](0;1)[/latex] [latex](0;3)[/latex] [latex](0;4)[/latex] 0 Пройден

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

Код.

С++

Java

Решение.

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

[latex]S_{ABC}=\frac{\left|(x_{B}-x_{A})(y_{C}-y_{A})-(x_{C}-x_{A}) (y_{B}-y_{A})\right|}{2}[/latex]

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

Related Images:

А30

Дано действительное число [latex]x[/latex]. Не пользуясь никакими другими арифметическими операциями, кроме  умножения, сложения и вычитания, вычислить :

[latex]1-2x+ 3x ^2 -4x^3[/latex]  и [latex]1+2x + 3x ^2 +4x ^3[/latex]. Разрешается использовать не более 8 операций.

x Коментарий
0 Тест пройден1 и 1
-75 Тест пройден1704526.0 и -6733274.0
2.25 Тест пройден-33.8750 и 202.9375
Ссылка на код http://ideone.com/L4tzoR
Ссылка на код:ссылка

У нас в условии  сказано что можно использовать не более 8 операций. Чтобы выполнить данное условие мы вводим переменные a и b.

[latex]a = x*x[/latex] [latex]b= x*x*x[/latex]

С помощью переменных мы уложились в ограничение по количеству операций и вывели конечный результат!

Related Images:

Ю1.4

Задача.

Временной интервал. Заданы моменты начала и конца некоторого промежутка времени в часах, минутах и секундах (в пределах одних суток). Найти продолжительность этого промежутка в тех же единицах измерения.

Тесты

Момент начала промежутка Момент конца промежутка Ответ
Часы Минуты Секунды Часы Минуты Секунды Часы Минуты Секунды
ch min sek ch1 min1 sek1 chh  minn sekk
3 24 30 10 44 35 7 20 5
2 11 20 10 21 10 8 9 50
2 10 31 10 10 44 8 0 13
2 11 30 10 6 20 7 54 50
2 11 20 10 6 30 7 55 10
3 4 4 3 4 4 Не прошло ни секунды с начала отсчета
0 30 11 0 44 15 0 14 4
0 11 70 0 15 80 Неправильно введены данные
0 0 30 0 0 55 0 0 25

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

В данной задаче я отнимал от конечного момента времени (часов, минут, секунд) начальный момент времени (часы, минуты, секунды) и получал результат. Особое внимание я уделил частным случаям. Здесь есть несколько основных условий при который обычного вычитания не достаточно, а требуются особые вычисление (т.к. в часах 60 минут, а в минутах 60 секунд).
Я разберу частный случай, при котором минуты и секунды конечного момента времени меньше минут и секунд начального момента времени.  Вот конкретная строка из кода, отвечающая за этот случай:
Разберем на конкретном примере. Начальный момент времени равен 2 часа 11 минут 30 секунд, а конечный — 10 часов 6 минут 20 секунд. (Строка 4 таблицы значений). Отнимая, 10-2=8, 6-11=-5, 20-30=-10, выходим за область значений и минуты с секундами получаются отрицательными. Для того, чтобы этого не случилось следует один час перевести в минуты и одну минуту перевести в секунды, то есть, соответственно, отнять единичку от конечных значений часов и минут. Получаем 9 часов 65 минут и 80 секунд. Это значение высчитывается в программе и является промежуточным вычислением, которое не выводится на экран, но участвует в расчетах. Отнимая, 9-2=7 , 65-11=54 , 80-30=50  , что уже и является результатом (7 часов 54 минуты 50 секунд). 
Остальные частные случаи вычисляются по такому же принципу (перевод одного часа в минуты / одной минуты в секунды).
Например, когда минуты начального момента времени и конечного момента времени будут равны, а секунды конечного момента времени меньше начального, то в ответе всегда получится 59 минут. (т.к. разность минут равна нулю, а одна минута нам нужна для того, чтобы оставить секунды в области допустимых значений, а 0 минут то же самое, что и 60 минут, а 60-1=59).
Второй вариант решения этой задачи выглядит намного проще. С теми же самыми тестами.

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

Алгоритм:

  1. Переводим всё в наименьшие единицы измерения (в секунды). [latex]ch*=3600 [/latex], [latex]min*=60[/latex],[latex]ch1*=3600 [/latex], [latex]min1*=60[/latex]
  2. Находим начальное значение в секундах: [latex]beg=ch+min+sek [/latex], конечное значение в секундах [latex]end=ch1+min1+sek1[/latex].
  3. Находим разность между начальным и конечным значением, тем самым находим промежуток. [latex]dif=end-beg[/latex].
  4. Вычисляем значения часов,  минут и секунд промежутка по формулам: [latex]chh = \frac{dif}{3600}[/latex], [latex]minn = \frac{dif — 3600 * chh}{60}[/latex], [latex]sekk = dif — 3600 * chh — minn * 60[/latex].

Либо еще один вариант решения при помощи операций деления и остатка от деления.

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

Алгоритм тот же кроме последнего пункта, где формулы становятся такими:
chh = dif / 3600,
minn = dif  % 3600 / 60,
sekk = dif  % 60.

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

И второе решение:

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

Код решения на Java

 

Related Images:

Ю1.1

Задача.

Из градусов в радианы. Угол α задан в градусах, минутах и секундах. Найти его величину в радианах(с максимально возможной точностью).

Тесты.

Ввод Вывод
градусы(grad) минуты(min) Секунды(sec) радианы(rad)
0 0 0 0
90 0 0 1.570796326794897
179 59 60 3.141592653589793
-270 0 0 -4.7123889803847

 

 

 

 

Решение.

Обозначим через переменные grad, min,  sec  число градусов, минут, секунд.

1 градус= 60 минут= 3600 секунд.

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

[latex]\mathit{rad=grad\frac{\pi }{180}}[/latex]

 

[latex]\mathit{rad=min\frac{\pi }{180}/60}[/latex]

 

[latex]\mathit{rad=sec\frac{\pi }{180}/3600}[/latex]

Если число градусов положительно то используем конечную формулу:

[latex]\mathit{rad=grad\frac{\pi }{180}+min\frac{\pi }{180}/60+sec\frac{\pi }{180}/3600}[/latex]

Если же оно отрицательно то используем другую формулу:

[latex]\mathit{rad=grad\frac{\pi }{180}-min\frac{\pi }{180}/60-sec\frac{\pi }{180}/3600}[/latex]

 

Related Images:

Ю1.21

Задача: Владелец автомобиля приобрел новый карбюратор, который экономит 50% топлива, новую систему зажигания, которая экономит 30% топлива, и поршневые кольца, экономящие 20% топлива. Верно ли, что его автомобиль теперь сможет обходиться совсем без топлива? Найти фактическую экономию для произвольно заданных сэкономленных процентов.

e1 e2 e3 f
50 30 20 72 Пройдено.
10 34 72 83.37 Пройдено.
0 0 0 0.00 Пройдено.
23.7 47.1 10.2 63.72 Пройдено.

 

Нет, машина не будет обходится совсем без топлива.

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

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

 

Related Images:

А28

Задача.

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

[latex]2x^4 + 3x^3 — 4x^2 — 5x +6[/latex]

Разрешается использовать не более четырех умножений и четырех сложений и вычитаний.

Тест

x p комментарий
0 6 пройдено
1 2 пройдено
5 1506 пройдено
-6 1836 пройдено
-20 294506 пройдено
25 825506 пройдено
50 12864756 пройдено
100 202959506 пройдено

 

 

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

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

 

Решение.

Вводим переменные [latex]x, p[/latex]. Поэтапно группируя по два старших члена уравнения, получаем:

Пользуясь четырьмя операциями умножения, двумя сложения и вычитания и вводя соответствующие значения [latex]x[/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:

Ю1.6

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

k p s m (месяцы)  Коменнтарий:
0 50 500  — No money — no honey
10 0 500 Это не бизнес
50 50 0 0  Логично, программа работает, вводить частный случай не стал.
1000 5 500 9 Пройден
30 15 500 21 Пройден
30 150 500 4 Пройден
5.556 49.04 193.6 9 Пройден

 

 

Решение выполняется с помощью цикла while, который выполняет циклы пока заданное условие правда (см. 12).

Алгоритм цикла:

  1. Цикл работает, пока сумма сложных процентов меньше, чем сумма.

2. Т.к. процент сложный, то он должен изменяться с каждым циклом. Для этого я ввел вспомогательную переменную v.

где k — капитал, pk — сумма сложных процентов.

  1. Делаем сумму сложных процентов
  1. Добавляем месяцы, пока pk не станет большей или равной s.

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

 

Частные случаи:

  1. Когда k = 0. Такая ситуация не имеет логического значения ни в коде, ни в жизни. По этому я её обыграл с помощью if. Код не работает

  2. Когда p = 0. Аналогично первому, логики нет. Код не работает

  3. Когда s = 0. В таком случае, магазин бесплатен.  Код работает

 

* — работал в месяцах, так удобней, ибо месячный процент

 

А вообще, время 5 утра. А я только осознал, что у меня 1.16, а не 1.6. Но пусть будет =)

 

 

Related Images:

Ю1.3

Задача.

Длина отрезка задана в дюймах (1 дюйм = 2,54 см). Перевести значение длины в метрическую системы, т.е. выразить её в метрах, сантиметрах и миллиметрах. Например, 21 дюйм = 0 м 53 см 3,4 м.

Тесты.

Ввод Вывод
0 0 м  0 см  0 мм
0.3 0 м  0 см  7.62 мм
21 0 м  53 см  3.4 мм
40.5 1 м  2 см  8.7 мм
100 2 м  54 см  0 мм
5000 127 м  0 см  0 мм

Код.

Ideone (C++)

Код (Java)

Ideone (Java)

Решение.

Обозначим через  [latex] x [/latex]  длину в дюймах, которую вводит пользователь; через   [latex] y [/latex]  длину в миллиметрах.  Согласно формуле перевода,  [latex] y = 25.4 \cdot x[/latex].

Один метр есть тысяча миллиметров. Чтобы получить целое число метров, содержащихся в   [latex] y[/latex] , разделим   [latex] y[/latex]  на тысячу и извлечём целую часть:    [latex] m = \left[\frac{x}{1000} \right][/latex].

Один сантиметр есть десять миллиметров. Избавимся от метров, разделим полученное число на десять и извлечём целую часть — получим целое число сантиметров, содержащихся в   [latex] y [/latex]:  [latex] y = \left[\frac{y-1000\cdot m}{10} \right] [/latex]

Оставшееся — число миллиметров:   [latex] mm = y — 1000 \cdot m — 10 \cdot cm [/latex] .

Related Images:

Ю1.19

Задача Ю1.19. Найти координаты вершины параболы [latex]y = a{ x }^{ 2 }+bx+c[/latex]

[latex]a[/latex] [latex]b[/latex] [latex]c[/latex] [latex]x[/latex] [latex]y[/latex] Комментарий
 1 -2  -3 1 -4 Пройден.
0 2 2 Не пройден
так график y(x)
не является параболой и программа оповещает об ошибке
1 0 4 0 4 Пройден.
2 1 3 -0.25 2.875 Пройден.

Мы знаем координаты вершины параболы вычисляются по формулам:
1)[latex]{ x }_{ 0 }=-\frac { b }{ 2a } [/latex]

2)[latex]{ y }_{ 0 }=a{ x }_{ 0 }^{ 2 }+b{ x }_{ 0 }+c[/latex]

(Для простоты в программе [latex]{ x }_{ 0 }[/latex] и [latex]{ y }_{ 0 }[/latex] заменены на [latex]{ x }[/latex] и [latex]{ y }[/latex] соответственно)

Теперь учтем ситуации в проработке которых могут возникнуть сложности:
Если [latex]{ a }=0[/latex], то график [latex]y(x)[/latex] не является параболой,
о чем на должен проинформировать компилятор.
Это все проблемы связанные с графиком.

Теперь проанализируем же может вызвать противоречия или ошибки,
для этого проанализируем элементы С++ которые могут вызвать ошибки или неточности:
Наиболее рационально использовать тип double, но у этого типа есть некоторая неточность, а именно (-0) — может быть принята за вполне нормальное число со знаком и компилятор безо всяких угрызений совести выведет «-0», а не 0 ( было бы логичнее ). Именно по этой причине мы вначале выполним [latex]{ x }_{ 0 }=\frac { b }{ 2a } [/latex], а потом уже, если [latex]{ x }[/latex] окажется не равным нулю, то мы умножим его на [latex]-1[/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: