Задача из журнала «Квант» №4 1972 г.
Из вершины [latex]B[/latex] параллелограмма [latex]ABCD[/latex] проведены его высоты [latex]BK[/latex] и [latex]BH[/latex]. Выразите расстояние от точки [latex]B[/latex] до точки пересечения высот треугольника [latex]BKH[/latex] через длины отрезков [latex]KH = a[/latex] и [latex]BD = b[/latex].
Входные данные:
Длины отрезков [latex]a[/latex], [latex]b[/latex]
Выходные данные:
Расстояние от точки [latex]B[/latex] до точки [latex]O[/latex] — точки пересечения высот треугольника [latex]BKH[/latex] ([latex]c[/latex])
Тесты:
b | a | c |
10 | 6 | 8 |
5 | 3 | 4 |
3 | 5 | inf (Infinity) |
Код программы на С++:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iostream> #include <cmath> #include <limits> using namespace std; int main() { double b,a; double inf = std::numeric_limits<double>::infinity(); double c; cin>>b>>a; c=(b<a)?inf:sqrt(b*b-a*a); cout<<c; return 0; } |
Код программы на Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); double b=in.nextDouble(); double a=in.nextDouble(); double inf = 1.0 / 0; double c; c=(b<a)?inf:Math.sqrt(b*b-a*a); System.out.println(c); } } |
Решение задачи:
Рассмотрим параллелограмм [latex]ABCD[/latex]. Проведем высоты [latex]BH[/latex] и [latex]BK[/latex] соответственно к сторонам [latex]AD[/latex] и [latex]DC[/latex]. Соединив точки [latex]K[/latex] и [latex]H[/latex] линией, получаем треугольник [latex]BKH[/latex]. В нем проведем три высоты [latex]BD[/latex], [latex]HM[/latex], [latex]KE[/latex] к сторонам [latex]HK[/latex], [latex]BK[/latex], [latex]HB[/latex]. Точкой пересечения высот в треугольнике является точка [latex]O[/latex].
Проведем в параллелограмме высоту [latex]DL[/latex] к стороне [latex]BC[/latex]. Соединив точки [latex]L[/latex] и [latex]K[/latex] получаем треугольник [latex]LDK[/latex]. Если сдвинуть (параллельно) треугольник [latex]BHO[/latex] так, чтобы точка [latex]H[/latex] попала в точку [latex]D[/latex], то он полностью совпадет с треугольником [latex]LKD[/latex], поскольку отрезок [latex]HO[/latex] параллелен и равен [latex]DK[/latex], а отрезок [latex]BH[/latex] параллелен и равен [latex]LD[/latex]. Следовательно, [latex]BO=LK[/latex] и два треугольника равны.
Рассмотрим прямоугольный треугольник [latex]HKL[/latex], в котором сторона [latex]HK=a[/latex] и [latex]HL=b[/latex] по условию. По теореме Пифагора отыщем сторону KL: [latex]KL=\sqrt[]{b^{2}-a^{2}}[/latex].
Так как треугольник [latex]BOH[/latex] и треугольник [latex]LKD[/latex] равны, получаем что [latex]KL=BO[/latex]
Решение задачи на C++
Решение задачи на Java
Условие задачи можно найти здесь: http://www.kvant.info/zkm_tex/zkm_main.pdf

— Не стоит описывать переменные за пределами функции main(). Это не мешает программе правильно работать, но для такого поведения должны быть существенные причины.
— Добавьте ссылку на работу в ideone.com.
— Что это за странный тест с отрицательными расстояниями? Разве такое возможно? Да и не будет программа правильно работать если, например, b = -1, a = -7. Кроме того, у Вас переменные для хранения a и b типа unsigned, т.е. целые неотрицательные. Чем закончится попытка ввода туда отрицательного числа мы уже обсуждали в лекции про «глобус целых чисел».
— Где Вы вычитали, что расстояния a и b должны быть целыми?
— В отличие от дефиса, тире с обоих сторон выделяют пробелами.
— Не очень удачная мысль называть файлы с использованием символов кириллицы. А название «нудавай-1.svg» плохо отражает суть рисунка.
— Пожалуйста, ответьте здесь на следующий вопрос — чем Вас не устроило решение Ф.А.Бартеньева, размещённое в №12 за 1972 год на стр.40?
Здравствуйте! Постаралась исправить все ваши замечания, так же немного изменила код картинки в формате svg. Решение Ф.А Бартеньева меня очень даже устроило, просто, увидев рисунок и простоту последней формулы, я не вдавалась в подробности написанного, а старалась записать то что поняла своими словами, дабы избежать излишнего копирования умных мыслей.
Пожалуйста, давайте вдаваться в подробности и начнём с точного копирования чужих мыслей, если нет своего альтернативного решения.
— Вы молодец, что разобрались как вставлять красивые розовые кнопочки в статью. Конечно, этот навык Вам вряд ли понадобится, но умение разбираться с инструкциями и что-то делать на основании полученных знания очень ценно. Молодец. К сожалению, в данном конкретном случае розовые кнопочки лучше убрать и сделать обычные гиперссылки. Дело в том, что подбор цветов и визуальное оформление должно совпадать для всех страниц сайта. Т.е. необходимо единство стиля. Если кто-то прописывает на свое странице индивидуальные цвета, то сайт уже не выглядит как одно целое.
— На кнопке для запуска Вашего кода на выполнение написано «Ideone». Думаете читатель догадается что это?
Я зачёл Вашу работу, но боюсь последнее моё замечание Вы перевыполнили. Давайте я конкретизирую свою просьбу. Сделайте, например, так:
«Для выполнения программы можно воспользоваться кодом на IDEOne. Не обязательно дословно, должна работать основная идея — посетитель сайта видит осмысленный текст, а по клику работают переходы на URL видеть и запоминать который ему нет необходимости.
Вторая ссылка должна выглядеть аналогично. Например, слов «здесь должно стать ссылкой на URL по которому размещается сканированная копия журнала. Только не того, где условие (оно у Вас уже приведено), а того, где и условие, и решение. Еще разумнее было бы просто сделать гиперссылкой указание на журнал Квант сделанное в первой строке Вашей публикации.