Химические исследования — Chemical study

Калькулятор. Определить валентность химических элементов в соединениях

Калькулятор. Определить валентность химических элементов в соединениях.

 

Таблица валентностей химических элементов

Калькулятор. Определить степень окисления химических элементов

Калькулятор Валентности
Результат:
Формула в данном случае имеет элементы с известными валентностями
`; } function handleSingleElement(element) { const fixedValency = VALENCY_DICTIONARY[element]; const variableValency = VARIABLE_VALENCY[element]; let valencyInfo = ''; if (fixedValency !== undefined) { valencyInfo = `Постоянная валентность: ${fixedValency}`; } else if (variableValency) { valencyInfo = `Переменная валентность: ${variableValency.join(', ')}`; } else { valencyInfo = 'Валентность неизвестна'; } return `
Информация о валентности:
${valencyInfo}
${variableValency ? `
Дополнительная информация:
Элемент имеет несколько валентностей, конкретное значение зависит от соединения
` : ''}
Результат:
${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}
  • ${Object.entries(radicalInfo) .filter(([key]) => key !== 'charge') .map(([element, valency]) => `
  • Валентность ${element}: ${valency}
  • ` ).join('')}
Расчет:
1. Общий заряд = ${radicalInfo.charge} × ${radical.count} = ${totalCharge}
2. Валентность ${mainElement.element} = ${totalCharge} ÷ ${mainElement.count} = ${calculatedValency}
Результат:
Валентность ${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}
  • `).join('')}
Расчет валентностей:
${elements.map(el => ` ${el.element}: ${VALENCY_DICTIONARY[el.element]} × ${el.count} = ${VALENCY_DICTIONARY[el.element] * el.count} `).join('
')}
Результат:
Все элементы имеют известную валентность
`; } // Случай с двумя элементами if (elements.length === 2 && unknownElements.length === 1) { const unknownElement = unknownElements[0]; const knownElement = knownElements[0]; const calculatedValency = (VALENCY_DICTIONARY[knownElement.element] * knownElement.count) / unknownElement.count; return `
Дано:
  • Элемент с известной валентностью: ${knownElement.element}
  • Валентность ${knownElement.element}: ${VALENCY_DICTIONARY[knownElement.element]}
  • Число атомов ${knownElement.element}: ${knownElement.count}
  • Число атомов ${unknownElement.element}: ${unknownElement.count}
Формула расчета:
Неизвестная валентность = (Валентность известного элемента × Число атомов) ÷ Число атомов неизвестного элемента
Расчет:
Валентность ${unknownElement.element} = (${VALENCY_DICTIONARY[knownElement.element]} × ${knownElement.count}) ÷ ${unknownElement.count} = ${calculatedValency}
Результат:
Валентность ${unknownElement.element} равна ${calculatedValency}
`; } // Случай с тремя элементами if (elements.length === 3 && unknownElements.length === 1 && knownElements.length === 2) { const unknownElement = unknownElements[0]; const [el1, el2] = knownElements; const val1 = VALENCY_DICTIONARY[el1.element] * el1.count; const val2 = VALENCY_DICTIONARY[el2.element] * el2.count; const calculatedValency = Math.abs(val1 - val2) / unknownElement.count; return `
Дано:
  • ${el1.element}: Валентность ${VALENCY_DICTIONARY[el1.element]}, Число атомов ${el1.count}
  • ${el2.element}: Валентность ${VALENCY_DICTIONARY[el2.element]}, Число атомов ${el2.count}
  • Число атомов ${unknownElement.element}: ${unknownElement.count}
Расчет промежуточных значений:
${el1.element}: ${VALENCY_DICTIONARY[el1.element]} × ${el1.count} = ${val1}
${el2.element}: ${VALENCY_DICTIONARY[el2.element]} × ${el2.count} = ${val2}
Вычисление разницы:
|${val1} - ${val2}| = ${Math.abs(val1 - val2)}
Расчет валентности неизвестного элемента:
Валентность ${unknownElement.element} = ${Math.abs(val1 - val2)} ÷ ${unknownElement.count} = ${calculatedValency}
Результат:
Валентность ${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 = `
Информация из справочника:
  • Заряд: ${radicalInfo.charge}-
  • ${Object.entries(radicalInfo) .filter(([key]) => key !== 'charge') .map(([element, valency]) => `
  • ${element}: Валентность ${valency}
  • ` ).join('')}
Результат:
Алло?! Так-то это кислотный остаток, который следует использовать в составе соединений!
`; 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(); }