А 42

Задача

Даны действительные числа [latex]x,y[/latex]  [latex](x\neq y)[/latex]. Меньшее из этих двух чисел заменить их полусуммой, а большее — их удвоенным произведением.

Тесты

Было дано Стало после проверки Комментарий
x y x y
38.76 -24.33 -1886.0615999  7.215 Пройден
11.346 23.228 17.287 527.0898 Пройден
-2444.2 1231.444 -606.378 -6019790.8496 Пройден
767.2 -1455.24 -2232920.256 -344.02 Пройден
0 213.4 106.7 0 Пройден
1111 0 0 555.5 Пройден
123.4 123.4 Ничего не выйдет, х=у Не пройден
0 0 Ничего не выйдет, х=у Не пройден

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

 

Для получения ответа переменной необходимо преодолеть критерий [latex](x\neq y)[/latex].

Если же [latex](x\neq y)[/latex], то программа сравнивает сами переменные. Тут может быть два случая:

  • Если  [latex]x>y[/latex], то начальные значения переменных мы должны изменить на [latex]x=\frac{x+y}{2}[/latex], a [latex]y=2*x*y[/latex].
  • Если [latex]y>x[/latex], то начальные значения переменных мы должны изменить на [latex]y=\frac{x+y}{2}[/latex], a [latex]x=2*x*y[/latex].

Программа вначале высчитывает конечные х и у по формулам и при выполнении условий просто присваивает переменным значения. Тем самым мы упрощаем программу (т.к. расчет значений идет только один раз вместо двух).

Второй вариант решения.

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

Для начала описываем функцию swap, которая меняет значения х и у местами. Далее, в самой программе, проверяем не равны ли х и у и, если не равны, то какое из них больше. Узнав большее, используем функцию swap.

Код на Java

3 thoughts on “А 42

  1. — x, y это не метки. А вот «меньшее», «большее» «заменить» могут ими быть.
    — Все формулы кодируются дважды. Это создаёт высокую вероятность ошибки и считается неприемлемым. В таких случаях удобно использовать адреса. Т.е. работать с предварительно вычисленными адресами меньшего и большего элементов — «положить по адресу наименьшего», «положить по адресу наибольшего».

    Т.е. решение может быть зачтено и без переделок, но не на 10.

Добавить комментарий