22 - python & all web labs
This commit is contained in:
180
labWeb/lab9/script.js
Normal file
180
labWeb/lab9/script.js
Normal file
@@ -0,0 +1,180 @@
|
||||
|
||||
|
||||
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');
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user