Нужно оптимизировать алгоритм программы (последовательность вывода команд)
Доброй ночи всем!
Прошу помощи по такому вопросу. Есть рабочая программа, которая получает число - верхнюю границу множества целых чисел (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, время: 05:20. |