JS Функция , которая возвращает наибольшее знечение среди выражений (a + b ) ( a - b ) (a * b) (a / b) дает не тот ответ
Создай функцию getLargestExpressionResult, которая принимает два числа a и b и возвращает наибольший возможный результат среди выражений:
a + b
a - b
a * b
a / b
ограничения:
Не используй тернарный оператор или ключевое слово else.
Не используй объект Math.
My code:
const getLargestExpressionResult = (a, b) => {
let sum = a + b;
let razn = a - b;
let mul = a * b;
let del = a / b;
if(sum > (razn && mul && del)){
return sum;
}
if(razn > (sum && mul && del)){
return razn;
}
if(mul > (sum && razn && del)){
return mul;
}
if(del > (sum && razn && mul)){
return del;
}
}
Ответы (6 шт):
Можно сделать например так :
const getLargestExpressionResult = (a, b) => {
const results = [
a + b,
a - b,
a * b,
a / b
]
return results.sort((e1, e2) => e2 - e1)[0]
}
console.log(getLargestExpressionResult(1, 1))
Проблема в том, что в результате выражений типа (razn && mul && del) всегда возвращается результат первого (если он не равен 0). Посмотрите об особенностях работы логических операторов в js здесь.
Решить задачу можно так:
const getLargestExpressionResult = (a, b) => {
const expressions = [a - b, a * b, a / b];
let max = a + b;
for (const expression of expressions) {
if (expression > max) {
max = expression;
}
}
return max;
}
console.log(getLargestExpressionResult(1, 2)); // Прибавление
console.log(getLargestExpressionResult(1, -2)); // Отнимание
console.log(getLargestExpressionResult(2, 4)); // Умножение
console.log(getLargestExpressionResult(2, 1 / 4)); // Деление
или так:
const getLargestExpressionResult = (a, b) => {
const expressions = [a - b, a * b, a / b];
return expressions.reduce((acc, curr) => acc > curr ? acc: curr, a + b);
}
console.log(getLargestExpressionResult(1, 2)); // Прибавление
console.log(getLargestExpressionResult(1, -2)); // Отнимание
console.log(getLargestExpressionResult(2, 4)); // Умножение
console.log(getLargestExpressionResult(2, 1 / 4)); // Деление
Если не брать в расчет ограничения в вопросе - обязательно для таких случаев использовать именно Math.max а не все выше предложенное, тем более что в javascript он принимает несколько аргументов...
let solve = (a, b) => Math.max(a - b, a + b, a / b, a * b);
console.log(solve(1, 1)); // 2
console.log(solve(-1, -1)); // 1
Функция выполняется, только при проверке параметров (-5, -1) выдает значение undefind, но если вместо -1 подставить любое другое отрицательное число, то функция выполняется правильно, в чем может быть загвоздка? спасибо!
const getLargestExpressionResult = function(a, b) {
const sum = a + b;
const razn = a - b;
const mult = a * b;
const del = a / b;
if ((sum > razn) && (sum > mult) && (sum > del)){
return sum;
}
if ((razn > sum) && (razn > mult) && (razn > del)){
return razn;
}
if ((mult > sum) && (mult > razn) && (mult > del)){
return mult;
}
if ((del > mult) && (del > razn) && (del > sum)) {
return del;
}
}
getLargestExpressionResult(-5, -1);
function getLargestExpressionResult(a, b) {
const sum = a + b; // 0
const razn = a - (b); // 4
const mul = a * b; // -4
const del = a / b; // -1
if((sum >= razn) && (sum >=mul) && (sum >=del) ){
return sum;
}
if(razn >= (sum && mul && del)){
return razn;
}
if(mul >= (sum && razn && del)){
return mul;
}
if(del >= (sum && razn && mul)){
return del;
}
}
проблема с -5 и -1 решена тем что нужно добавить условие что правильные ответы могут быть равны ну и еще там была проблема с значениями 2 и -2 ,решена в первом if
function getLargestExpressionResult(a, b) {
let result = a + b;
if (a - b > result) {
result = a - b;
}
if (a * b > result) {
result = a * b;
}
if (a / b > result) {
result = a / b;
}
return result;
}