Сумма факториалов из несколькоих input-ов на javascript

Я начал не так давно изучать язык JavaScript. До этого у меня не было опыта в программировании. Прошу помощи уважаемых знатоков.
Код вычисляет сумму четырех факториалов. Код работает, но есть необходимость реализовать через “функцию”.

calc

Очистить

Вопрос не ясен. Покажи код который работает, что значит функция calc?

    <html>

<head>
    <title>calc</title>
    <meta charset="UTF-8">
</head>

<body>
    <form>
        <input type="text" id="a1" placeholder="a1">
        <input type="text" id="a2" placeholder="a2">
        <p><input type="text" id="a3" placeholder="a3">
            <input type="text" id="a4" placeholder="a4"></p>
        <p><input type="button" value="Sum!" onclick="sumFac()"></p>
        <p><button type="reset" accesskey=z>Очистить</button></p>
        <p><input type="text" id="a5" placeholder="a5"></p>
    </form>
    <script>
        function sumFac() {
            var i, j, z, w,
                f = 1,
                s = 1,
                x = 1,
                y = 1;

            for (i = document.getElementById('a1').value; i >= 1; i--) {

                x *= i
            }

            for (j = document.getElementById('a2').value; j >= 1; j--) {

                y *= j
            }
            for (z = document.getElementById('a3').value; z >= 1; z--) {
                f *= z
            }
            for (w = document.getElementById('a4').value; w >= 1; w--) {
                s *= w
            }

            document.getElementById('a5').value = x + y + f + s;

        }

    </script>
</body>

</html>

почему-то HTML не крепится… В общем программа считает сумму 4-х факториалов. есть 4 инпута, значения которых передаются в скрипт. мне нужно как-то это через функцию провести

Чтобы код подсвечивался, его нужно обрамлять вот такими символами ``` сначала и конца. Я отредактировал твое сообщение, посмотри на будущее.

мне нужно как-то это через функцию провести

Тут не понятно чего тебе надо получить. Думаю ты тоже не в курсе. Поэтому я буду догадываться.

Кто-то кто дал тебе задание хочет чтобы решение было сделано через рекурсию. Когда слышу “факториалы, javascript”, значит кто-то пытается объяснить рекурсию.

Функции - главный строительный кирпич программирования на js. Подход следующий: задача бъется на подзадачи (которые могут быть дальше разбиты на подзадачи), под каждую подзадачу реализуется функция, функции собираются вместе, получается решение задачи.

Я написал решение твоей задачи, используя такой подход. Так как ты только начинаешь, возможные сложные моменты я прокомментировал. По ключевым словам из комментариев можешь нагуглить больше объяснений и примеров.

Тут можно запустить код

и сам код (так же обрамленный ```).

// Классический пример использования рекурсии. В 99.99% случаев работы с javascript
// рекурсия тебе не нужна, но почему-то начинающим ее объясняют через факториалы.
function factorial(number) {
	if (number === 1) {
		return number
	}  else {
		return number * factorial(number - 1)
	}
}

function summ(items) {
	var res = 0
	for (var i = 0; i < items.length; i += 1) {
		res += items[i]
	}
	return res
}

// Кстати, значения из инпутов всегда приходят в виде строки. Даже если в инпут введено число
// Тип значения document.getElementById('a1').value - строка. Твой код сработал потому что
// javascript старается "привести" типы. Но автоматическое приведение не всегда срабатыает
// хорошей практикой считается приводить строки к числам явно с помощью parseInt
function getInputNumericValue(inputId) {
	// Вот тут должны быть проверки что инпут есть. Но для простоты я их опускаю
	return parseInt(document.getElementById(inputId).value)
}

function getInputsFactorials(inputIds) {
	var summ = 0
	for (var i = 0; i < inputIds.length; i += 1) {
		summ += factorial(getInputNumericValue(inputIds[i]))
	}
	return summ
}

function showSumFac() {
	document.getElementById('a5').value = getInputsFactorials(['a1', 'a2', 'a3', 'a4'])
}

// Это "правильный" способ навешивания обработчика события.
// Пока не пытайся разобраться почему и как, изучишь когда будешь разбираться с DOM-ом.
document.getElementById('sum').addEventListener('click', function () {
	showSumFac()
}, false)
1 лайк

Огромное спасибо за такой подробный ответ! Буду разбираться!