Ввести 3 вещественных числа. Вывести на экран разность максимального и минимального чисел из введенных
Написал вот такой вот код, но все работает не так, как надо, в чем может быть проблема? Буду рад если кто-то именно объяснят в чем дело.
function asd(a, b, c){
if(a>b && a>c){
if(b<c){
var sum = a - b;
}else if(b>c){
var sum = a - c;
}
}else if(b>a && b>c){
if(a<c){
var sum = b - a;
}else if(a>c){
var sum = b - c;
}
}else if(c>a && c>b){
if(a<b){
var sum = c - a;
}else if(a>b){
var sum = c - b;
}
}
alert(sum);
}
Ответы (2 шт):
На первый взгляд ваша функция возвращает нужный результат (максимальное число минус минимальное). Не совсем понимаю, что вы подразуменваете под словами - "работает не так как надо".
На мой взгляд слишком много вложенности проверок, а так же вы всё время внутри каждой проверки пересоздаёте переменную sum. Её для удобства можно вынести за передлы проверок, а внутри перезаписывать, вместо создания каждый раз заново.
Я бы порекомендовала воспользоваться нативными методами, вот таким образом:
function asd(a, b, c) {
let max = Math.max(a, b, c);
let min = Math.min(a, b, c);
return sum = (max - min);
}
Можно доработать метод и действовать следующими способами:
Получить массив из arguments, отсортировать его и вычесть из последнего элемента первый.
Сразу передавать на вход массив из чисел, отсортировать его и вычесть из последнего элемента первый.
Данный подход позволяет в будущем увеличить количество вводимых чисел при необходимости.
function asd(a, b, c) {
const args = [...arguments].sort((a, b) => a - b);
return args[args.length - 1] - args[0];
}
console.log(asd(3, 2, 1));
console.log(asd(3, 2, 1, 78, 3, 434, 2));
function asdFromArray(arr) {
const args = arr.sort((a, b) => a - b);
return args[args.length - 1] - args[0];
}
console.log(asdFromArray([3, 2, 1]));
console.log(asdFromArray([3, 2, 1, 78, 3, 434, 2]));
console.log(asdFromArray([-10, 2, 1]));
console.log(asdFromArray([-10, -2]));