Задача: Может ли шар с радиусом [latex] r [/latex] пройти через ромбообразное отверстие с диагоналями [latex]p[/latex] и [latex]q[/latex]?
r | p | q | a | b | c | h | Результат | Коментарий |
5 | 40 | 10 | 20 | 5 | 20,6255 | 4,8483 | Не пройдет | Пройден |
4 | 20 | 14 | 10 | 7 | 12,2066 | 5,7346 | Пройдет | Пройден |
3 | 6 | 8 | 3 | 4 | 5 | 2,4 | Не пройдет | Пройден |
1 | 4 | 16 | 2 | 8 | 8,2462 | 1,9403 | Пройдет | Пройден |
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 |
#include <stdio.h> #include <math.h> int main() { double p, q, a, b, c, h; scanf("%lf %lf", &p, &q); a=p/2; printf("a- %0.4lf\n", a); b=q/2; printf("b- %0.4lf\n", b); c=sqrt(a*a+b*b); printf("c- %0.4lf\n", c); h = (a*b)/c; printf("h- %0.4lf\n", h); double r; scanf("%lf", &r); printf("r- %0.4lf\n", r); if (r > h) { printf("Шар не пройдет\n"); } else if (r <= h) { printf("Шар пройдет\n"); } return 0; } |
Катеты [latex]a=\frac{p}{2}[/latex] и [latex]b=\frac{q}{2}[/latex].
Гипотенуза [latex]c=\sqrt{a^{2}+b^{2}}[/latex].
Затем по формуле [latex]h=\frac{ab}{c}[/latex] найдем высоту треугольника.
Чтобы шар прошел через ромбообразное отверстие, нужно чтобы [latex]r\leq h[/latex].
Если [latex]r>h[/latex], то шар не пройдет через ромбообразное отверстие.
Посмотреть работу программы можно тут.
— У треугольника три высоты. У прямоугольного — две высоты совпадают с катетами. Вы ищите третью. Нужно это уточнять. «Высота проведенная из прямого угла» или «высота, опущенная на гипотенузу»
— Дайте ссылку на ideone? где лежит Ваш код. Мы сможем убедиться, что программа не работает. Почему? А где получает значение радиус? В какой строке?
исправила
Программа выдает несколько неряшливый ответ, вида:
«a- 10.0000b- 1.0000c- 10.0499h- 0.9950r- 1.0000Шар не пройдет»
Явно не хватает разделителя между значением а и «b- » или пробел(ы) или, еще лучше, переход на новую строку (можно табуляцию) — ну и далее в таком же духе.
В остальном вроде все правильно, хорошо!
Засчитываю работу, хотя вижу значительный недостаток.
Предлагаю дополнительные 5 баллов за ещё один код (вставите его в конце, если сделаете).
Что же мне не нравится? Мне не нравятся все эти деления и извлечения корня. Вычисления с плавающей точкой чреваты накоплением погрешностей разного рода и стоит их делать поменьше. Запишите на бумаге итоговое условие одной формулой. Без всяких дополнительных обозначений — только диагонали и радиус. Выполните эквивалентные преобразования неравенства (как в школе) чтобы избавится от корней и делений. Полученное условие можно будет запрограммировать в виде одной строки — просто вывести, входит или нет.