function calculateGCD(a, b) { a = Math.abs(a); b = Math.abs(b); while (b !== 0) { let temp = b; b = a % b; a = temp; } return a; } function reduceFraction(numerator, denominator) { if (denominator === 0) { return { error: "Знаменатель не может быть нулем!" }; } if (numerator === 0) { return { numerator: 0, denominator: 1 }; } const gcd = calculateGCD(numerator, denominator); let newNum = numerator / gcd; let newDen = denominator / gcd; if (newDen < 0) { newNum = -newNum; newDen = -newDen; } return { numerator: newNum, denominator: newDen }; } function addFractions(num1, den1, num2, den2) { const resultNum = num1 * den2 + num2 * den1; const resultDen = den1 * den2; return reduceFraction(resultNum, resultDen); } function subtractFractions(num1, den1, num2, den2) { const resultNum = num1 * den2 - num2 * den1; const resultDen = den1 * den2; return reduceFraction(resultNum, resultDen); } function multiplyFractions(num1, den1, num2, den2) { const resultNum = num1 * num2; const resultDen = den1 * den2; return reduceFraction(resultNum, resultDen); } function divideFractions(num1, den1, num2, den2) { if (num2 === 0) { return { error: "Нельзя делить на ноль!" }; } const resultNum = num1 * den2; const resultDen = den1 * num2; return reduceFraction(resultNum, resultDen); } function displayResult(result) { const resultDisplay = document.getElementById('result-display'); const resultNum = document.getElementById('result-num'); const resultDen = document.getElementById('result-den'); const resultText = document.getElementById('result-text'); const errorMessage = document.getElementById('error-message'); const placeholder = document.getElementById('placeholder-text'); resultDisplay.classList.add('hidden'); resultText.classList.add('hidden'); errorMessage.classList.add('hidden'); placeholder.classList.add('hidden'); if (result.error) { errorMessage.textContent = result.error; errorMessage.classList.remove('hidden'); return; } resultNum.textContent = result.numerator; resultDen.textContent = result.denominator; resultDisplay.classList.remove('hidden'); resultText.textContent = `Ответ: ${result.numerator}/${result.denominator}`; resultText.classList.remove('hidden'); } function getInputValues() { const num1 = parseInt(document.getElementById('num1').value) || 0; const den1 = parseInt(document.getElementById('den1').value) || 1; const num2 = parseInt(document.getElementById('num2').value) || 0; const den2 = parseInt(document.getElementById('den2').value) || 1; if (den1 === 0 || den2 === 0) { return { error: "Знаменатель дроби не может быть равен нулю!" }; } return { num1, den1, num2, den2 }; } function performOperation(operation) { const inputs = getInputValues(); if (inputs.error) { displayResult({ error: inputs.error }); return; } let result; switch(operation) { case 'add': result = addFractions(inputs.num1, inputs.den1, inputs.num2, inputs.den2); break; case 'subtract': result = subtractFractions(inputs.num1, inputs.den1, inputs.num2, inputs.den2); break; case 'multiply': result = multiplyFractions(inputs.num1, inputs.den1, inputs.num2, inputs.den2); break; case 'divide': result = divideFractions(inputs.num1, inputs.den1, inputs.num2, inputs.den2); break; default: result = { error: "Неизвестная операция" }; } displayResult(result); } document.addEventListener('DOMContentLoaded', function() { const inputs = document.querySelectorAll('.fraction-input'); inputs.forEach(input => { input.addEventListener('keypress', function(e) { if (e.key === 'Enter') { performOperation('add'); } }); }); });