Дополнительная информация:
Элемент имеет несколько валентностей,
конкретное значение зависит от соединения
` : ''}
Результат:
${element}: ${valencyInfo}
`;
}
function calculateUnknownValency(elements) {
// Проверка на достаточное количество элементов
if (elements.length el.isRadical);
if (radical) {
const mainElement = elements.find(el => el.isMain);
if (!mainElement) return 'Не найден основной элемент';
const radicalInfo = radical.radicalInfo;
// Рассчитываем общий заряд с учетом числа групп
const totalCharge = radicalInfo.charge * radical.count;
// Рассчитываем валентность основного элемента
const calculatedValency = totalCharge / mainElement.count;
return `
Дано:
Кислотный остаток: ${radical.radical}
Заряд одной группы: ${radicalInfo.charge}
Количество групп: ${radical.count}
Количество атомов ${mainElement.element}: ${mainElement.count}
Результат:
Валентность ${mainElement.element} равна ${calculatedValency}
`;
}
// Находим известные и неизвестные элементы
const knownElements = elements.filter(el => VALENCY_DICTIONARY[el.element]);
const unknownElements = elements.filter(el => !VALENCY_DICTIONARY[el.element]);
// Случай, когда все элементы известны - показываем подробный расчет
if (unknownElements.length === 0) {
return `
Дано:
${elements.map(el => `
${el.element}:
Валентность ${VALENCY_DICTIONARY[el.element]},
Число атомов ${el.count}
Результат:
Валентность ${unknownElement.element} равна ${calculatedValency}
`;
}
return 'Не удалось рассчитать валентность';
}
function calculateValency() {
const formulaInput = document.getElementById('formula');
const resultDiv = document.getElementById('result');
let formula = formulaInput.value.trim();
// Проверяем на исключения
if (EXCEPTIONS[formula]) {
resultDiv.innerHTML = handleException(formula);
return;
}
// Проверяем на ОТДЕЛЬНЫЙ кислотный остаток
for (let radical in ACID_RADICALS) {
const radicalWithoutBrackets = radical.replace(/[()]/g, '');
// Проверяем, что формула ТОЧНО СОВПАДАЕТ с кислотным остатком
if (formula === radical || formula === radicalWithoutBrackets) {
const radicalInfo = ACID_RADICALS[radical];
resultDiv.innerHTML = `
Результат:
Алло?! Так-то это кислотный остаток, который следует использовать в составе соединений!
`;
return;
}
}
// Проверяем на один элемент
const singleElementMatch = formula.match(/^([A-Z][a-z]?)(\d*)$/);
if (singleElementMatch) {
resultDiv.innerHTML = handleSingleElement(singleElementMatch[1]);
return;
}
// Проверяем на кислотные остатки
for (let radical in ACID_RADICALS) {
const escapedRadical = radical.replace(/[()]/g, '\\$&');
const radicalRegex = new RegExp(`${escapedRadical}`);
if (radicalRegex.test(formula)) {
const elements = parseFormulaWithRadical(formula);
const result = calculateUnknownValency(elements);
resultDiv.innerHTML = result;
return;
}
}
// Стандартный случай
formula = expandChemicalFormula(formula);
const elements = parseChemicalFormula(formula);
if (elements.length
`);
// Вставляем содержимое калькулятора
printWindow.document.body.appendChild(calculatorContent);
// Вызываем печать
printWindow.print();
// Закрываем окно после печати
printWindow.close();
}