Задача: Дано действительное число [latex]h[/latex] , Выяснить, имеет ли уравнение [latex]{ ax }^{ 2 }+bx+c=0[/latex] действительные корни, если:
[latex]a=\sqrt{\frac{\left|\sin{8h}\right|+17}{{(1-\sin{4h}\cos({h}^{2}+18))}^{2}}}[/latex] , [latex]b=1-\sqrt {\frac {3}{3+\left|\tan{a{h}^{2}}-\sin{ah}\right|}}[/latex], [latex]c=a{ h }^{ 2 }\sin{bh}+b{ h }^{ 3 }\cos{ah}[/latex] .Если действительные корни существуют, то найти их. В противном случае ответом должно служить сообщение, что корней нет.
h | Корни | Комментарий |
-10 | (-11.8266, 11.7792) | Пройден |
-7.5 | (-7.02349, 6.99523) | Пройден |
-2 | (-1.36947, 1.36885) | Пройден |
-1 | (-0.400785, 0.3912) | Пройден |
0 | 0 | Пройден (1 корень) |
1 | корней нет | Пройден |
2 | корней нет | Пройден |
7.5 | корней нет | Пройден |
10 | корней нет | Пройден |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <iostream> #include <cmath> int main() { double h, a, b, c, d, x, y; scanf("%lg", &h); a = sqrt((fabs(sin(8*h))+17)/pow(1-sin(4*h)*cos(pow(h,2)+18),2)); // считаем b = 1-sqrt(3/(3+fabs(tan(a*pow(h,2))-sin(a*h)))); c = a*pow(h,2)*sin(b*h)+b*pow(h,3)*cos(a*h); d = pow(b,2)-4*a*c; if(d<0){ // решение квадратного уравнения printf("%s", "корней нет"); } else if(d == 0){ x = (b*(-1))/(2*a); if(x==-0){ printf("%lg", x*-1); } else{ printf("%lg", x); } } else if(d>0){ x = (b*(-1)-sqrt(d))/(2*a); y = (b*(-1)+sqrt(d))/(2*a); printf("(%lg, %lg)", x, y); } return 0; } |
Задача простая. Алгоритм решения такой-же, как и при решении квадратного уравнения.
Вывод: В тестах взял стандартный набор значений. Программа работает. Интересно заметить, что при любом положительном значении [latex]h[/latex] корней нет.
sin cos и т.д. — должны быть набраны как мат. функции в Латехе,
«cos(pow(h,2))+18» у Вас получилось, что только h^2 под косинусом, в условии, что выше по тексту, иначе.
Как проверяли тесты.
Исправил.
Все же от чего считается косинус в коде ниже?
Это ведь строчка из Вашей программы, только я добавил пробелов в нее и разбил на 2 строки — это несколько улучшает читабельность. И посмотрите, от чего косинус должен считаться в условии задачи.
Кстати у printf("%lg", x); в else неверный отступ.
Кстати, интересный глюк с минус нулем и смелая попытка обойти эту проблему, но посмотрите это.
С Косинусом снова исправил. Не знаю, почему в прошлый раз не изменилось.
Не понял замечания с неверным отступом.
По поводу бага ничего сказать не могу, работает и работает (0.0 = -0.0). Искючительно для красоты умножаю его на -1.
printf, который в else единственным оператором стоит сдвиньте на один таб вправо, аналогично return 0 сдвиньте на один таб вправо.
21-я строка
Готово.
Засчитано, 10 баллов.