Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.10.2018, 02:43
Интересующийся
Отправить личное сообщение для AndriiS Посмотреть профиль Найти все сообщения от AndriiS
 
Регистрация: 05.09.2018
Сообщений: 28

Нужно оптимизировать алгоритм программы (последовательность вывода команд)
Доброй ночи всем!

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


Заранее вам благодарен!
Ответить с цитированием
  #2 (permalink)  
Старый 13.10.2018, 05:20
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

{

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()

}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно вписать алгоритм . MAFI55 Общие вопросы Javascript 2 12.12.2013 17:58