/
RoditelevVV
/
web-static-labs
Обзор
Документация
Войти
/
RoditelevVV
/
web-static-labs
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
html/lab4/task1/script.js
108 строк
3 KB
karpov
finish lab3, lab4
12 мар 2026, 08:19
12 мар 2026, 08:19
74cd197
Код
Авторство
О чём код?
'use strict'; const $ = (id) => document.getElementById(id); const readNumber = (el) => { const raw = String(el.value).trim(); return raw === '' ? NaN : Number(raw); }; function calc(a, op, b) { switch (op) { case '+': return a + b; case '-': return a - b; case '*': return a * b; case '/': return b === 0 ? NaN : a / b; case 'sqrt': return a < 0 ? NaN : Math.sqrt(a); case 'log': if (a <= 0 || b <= 0 || b === 1) return NaN; return Math.log(a) / Math.log(b); default: return NaN; } } document.addEventListener('DOMContentLoaded', () => { const operator = $('operator'); const operand1 = $('operand1'); const operand2 = $('operand2'); const logBase = $('logBase'); const doCalc = $('doCalc'); const resultEl = $('result'); const roundCheckbox = $('roundResult'); operator.addEventListener('change', () => { const op = operator.value; if (op === 'sqrt') { operand2.disabled = true; logBase.disabled = true; } else if (op === 'log') { operand2.disabled = true; logBase.disabled = false; } else { operand2.disabled = false; logBase.disabled = true; } }); doCalc.addEventListener('click', () => { const a = readNumber(operand1); const op = operator.value; let b; if (op === 'log') { b = readNumber(logBase); } else if (op !== 'sqrt') { b = readNumber(operand2); } if (Number.isNaN(a)) { resultEl.textContent = 'Введите первый операнд'; return; } if (op === 'sqrt') { if (a < 0) { resultEl.textContent = 'Квадратный корень из отрицательного числа не определен'; return; } } else if (op === 'log') { if (Number.isNaN(b)) { resultEl.textContent = 'Введите основание логарифма'; return; } if (b <= 0 || b === 1) { resultEl.textContent = 'Основание логарифма должно быть > 0 и ≠ 1'; return; } if (a <= 0) { resultEl.textContent = 'Аргумент логарифма должен быть > 0'; return; } } else { if (Number.isNaN(b)) { resultEl.textContent = 'Введите второй операнд'; return; } if (op === '/' && b === 0) { resultEl.textContent = 'Деление на ноль невозможно'; return; } } let res; if (op === 'sqrt') { res = calc(a, op); } else { res = calc(a, op, b); } if (roundCheckbox.checked && !Number.isNaN(res)) { res = Math.round(res * 1000) / 1000; } resultEl.textContent = Number.isNaN(res) ? 'Не удалось вычислить' : String(res); }); operator.dispatchEvent(new Event('change')); });