Рассмотрим такую задачу. Даны две переменные: \(x\) и \(y\). Требуется их сравнить. И если \(x>y\), то следует вывести значение \(x\), а в противном случае - значение \(y\). Любой начинающий программист спросит - и что тут сложного? А сложность в том, что нельзя использовать операции сравнения или условные операторы, которые есть в любом языке программирования. Категорически нельзя. Тогда возникает вопрос - а зачем это все надо? Ответ - в нашем конкретном случае - надо научиться сравнивать две величины в математическом блокноте.

Способ 1. Применяем функцию поиска максимального. Но, это не совсем честное решение поставленной задачи. Была все таки применена специальная функция для сравнения. Попробуем решить задачу по другому.

Способ 2. Применяем алгебраическое выражение.
x*(1+abs(x-y)/(x-y))/2 + y*(1+abs(x-y)/(y-x))/2
Покажем на примере как это работает в математическом блокноте: Предыдущее выражение в примере было записано так, чтобы было понятно почему в результате выводится большеt из двух чисел. А теперь выполним упростим его:
(abs(x-y)+x+y)/2
Проверим работу в математическом блокноте: Но, это выражение лучше чем первый вариант не только краткостью. Оно работает и в случае, когда числа совпадают. А предыдущее (из-за наличия разности в знаменателе) выдает ошибку (NaN). Можете проверить самостоятельно.

Но, все таки не все еще замечательно. Мы применили функцию, для нахождения значения абсолютной величины. Да, в каждом языке программирования она есть, но все же... Может можно обойтись и без нее, используя еще более стандартные возможности. А легко. Заменяем функцию abs() на вот такую:
\[|x-y|=\sqrt{(x-y)^2}=\sqrt{(x-y)(x-y)}\]
Функция извлечения квадратного корня привычнее, чем функция модуля. Проверяем в работе: Ну или без корня а со степенью: Будем развивать тему дальше. Даны две переменные: \(x\) и \(y\). Требуется их сравнить. И если \(x>y\), то следует вывести 1, а в противном случае - 0. Эта задача уже ближе к классическому условному оператору. Вот простейшее решение: Или после преобразований и упрощений: У такого способа есть недостаток - он не работает в том случае, когда числа совпадают. Все из-за разности числе в знаменателе. Так вот задачка для всех - придумайте выражение, которое будет решать поставленную задачу и в случае, когда числа совпадают. Ваши решения пишите в комментариях.


 Похожие публикации
2015-12-18 • Просмотров [ 152 ]