Нужно оптимизировать алгоритм программы (последовательность вывода команд)
Доброй ночи всем!
Прошу помощи по такому вопросу. Есть рабочая программа, которая получает число - верхнюю границу множества целых чисел (maxNumber) и делитель элементов этого множества (divider). Программа выводит два массива из множества целых чисел, - первый массив с числами которые делятся на делитель без остака, второй массив которые не делятся без остатка. Сначала происходит проверка на null. При этом, когда жмешь calcel для первого вводного maxNumber, то CANCEL_ALERT не срабатывает, а ждет пока введут divider. Алгоритм не оптимальный. Как сделать так, чтобы CANCEL_ALERT выводился сразу после maxNumber === null? Привожу свой код. "use strict"; const arrTrue = []; const arrFalse = []; let maxNumber; let divider; const START_ALERT = "Программа делимости. Для продолжения нажмите `OK`"; const INPUT_LIMIT = "Введите верхний предел"; const INPUT_DIVIDER = "Введите делитель"; const CANCEL_ALERT = "Вы отменили работу программы. Начните сначала."; alert(START_ALERT); maxNumber = prompt(INPUT_LIMIT); divider = prompt(INPUT_DIVIDER); // function checkInputData(max, div) { if (max === null || div === null) { alert(CANCEL_ALERT); return false; } sortNumber(max, div); } // function sortNumber(max, div) { for (let i = 0; i <= max; i++) { if (i % div == 0) { arrTrue.push(i); } else { arrFalse.push(i); } } showResult(arrTrue, arrFalse); } // function showResult(arr1, arr2) { console.log(`Делятся на ${divider}:`, arr1); console.log(`Не делятся на ${divider}:`, arr2); } checkInputData(maxNumber, divider); Заранее вам благодарен! |
{ const START_ALERT = "Программа делимости. Для продолжения нажмите `OK`"; const INPUT_LIMIT = "Введите верхний предел"; const INPUT_DIVIDER = "Введите делитель"; const CANCEL_ALERT = "Вы отменили работу программы. Начните сначала."; function main() { alert(START_ALERT); (async () => [ await getInputData(INPUT_LIMIT), await getInputData(INPUT_DIVIDER) ])() .then(([maxNumber, divider]) => { const { arrTrue, arrFalse } = sortNumber(maxNumber, divider) showResult(arrTrue, arrFalse, divider); }) .catch(_ => alert(CANCEL_ALERT)) } function getInputData(message) { return new Promise((resolve, reject) => { const input = prompt(message) if(input !== null) resolve(input); else reject() }) } function sortNumber(max, div) { const arrTrue = [] const arrFalse = [] for(let i = 0; i <= max; i++) if (i % div === 0) arrTrue.push(i) else arrFalse.push(i) return { arrTrue, arrFalse } } function showResult(arr1, arr2, divider) { console.log(`Делятся на ${divider}:`, arr1) console.log(`Не делятся на ${divider}:`, arr2) } main() } |
Часовой пояс GMT +3, время: 04:10. |