Я начал не так давно изучать язык JavaScript. До этого у меня не было опыта в программировании. Прошу помощи уважаемых знатоков.
Код вычисляет сумму четырех факториалов. Код работает, но есть необходимость реализовать через “функцию”.
Очистить
Я начал не так давно изучать язык JavaScript. До этого у меня не было опыта в программировании. Прошу помощи уважаемых знатоков.
Код вычисляет сумму четырех факториалов. Код работает, но есть необходимость реализовать через “функцию”.
Очистить
Вопрос не ясен. Покажи код который работает, что значит функция 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)
Огромное спасибо за такой подробный ответ! Буду разбираться!