Задача
Даны действительные числа [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 |
Ничего не выйдет, х=у |
Не пройден |
Код программы:
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
|
#include <iostream> #include <math.h> int main() { double x,y,div,mult;//Описание переменных для хранения входных данных.// scanf("%lf%lf", &x, &y); //Чтение из стандартного потока ввода.// if (x!=y) //Первый критерий отбора данных// { printf("Дано: \nx=%lf y=%lf \n",x,y);//Вывод начальных переменных// div=(x+y)/2; //Заранее вычисляем значения конечных переменных. mult=2*x*y; if (x<y) //Второй критерий отбора данных// { x=div; y=mult; } else { y=div;//Формулы подсчета новых переменных, неудовлетворяющих критерию 2// x=mult; } printf("После проверки стало: \nx=%4.4lf y=%4.4lf.",x,y); //Вывод измененных переменных (самого результата).// } else { printf("Ничего не выйдет, х=у"); //Вывод оповещения о неправильном вводе данных (при несоответствии первому критерию). } return 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].
Программа вначале высчитывает конечные х и у по формулам и при выполнении условий просто присваивает переменным значения. Тем самым мы упрощаем программу (т.к. расчет значений идет только один раз вместо двух).
Второй вариант решения.
Код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
#include <iostream> void swap(double &x,double &y) //Описываем функцию, которая присваивает конечные значения х и у { double tmp=(x+y)/2; //Описываем воспомогательную переменную, для присываивания значений x=2*x*y; //Присваивание значений. y=tmp; } int main() { double x,y;//Описание переменных для хранения входных данных.// scanf("%lf%lf", &x, &y); //Чтение из стандартного потока ввода.// if (x!=y) //Первый критерий отбора данных// { printf("Дано: \nx=%lf y=%lf \n",x,y); //Вывод начальных переменных// x>y?swap(x,y):swap(y,x); //Условный оператор, проверяющий какая переменная больше. printf("После проверки стало: \nx=%.3lf у=%.3lf",x,y);//Вывод измененных переменных (самого результата).// } else { printf("Ничего не выйдет, х=у"); //Вывод оповещения о неправильном вводе данных (при несоответствии первому критерию). } return 0; } |
Для начала описываем функцию swap, которая меняет значения х и у местами. Далее, в самой программе, проверяем не равны ли х и у и, если не равны, то какое из них больше. Узнав большее, используем функцию swap.
Код на Java
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 31 32 33 34 35 36
|
import java.util.*; import java.lang.*; import java.io.*; class Numbers { public static void main (String[] args) throws java.lang.Exception { double div, mult;//Описание переменных для хранения входных данных.// Scanner in = new Scanner(System.in); //Чтение из стандартного потока ввода.// double x = in.nextDouble(); double y = in.nextDouble(); if (x != y) //Первый критерий отбора данных// { System.out.println("Дано: x = " + x + " y = " + y);//Вывод начальных переменных// div = (x + y) / 2; //Заранее вычисляем значения конечных переменных. mult = 2 * x * y; if (x < y) //Второй критерий отбора данных// { x = div; y = mult; } else { y = div;//Формулы подсчета новых переменных, неудовлетворяющих критерию 2// x = mult; } System.out.printf("После проверки стало: x = " + x + " y = " + y); //Вывод измененных переменных (самого результата).// } else { System.out.printf("Ничего не выйдет, х=у"); //Вывод оповещения о неправильном вводе данных (при несоответствии первому критерию). } } } |
Related Images: