';
}
/* §5 — галерея простых веществ */
function mount_p5() {
var m = $('p5-gal'); if (!m || m._built) return; m._built = 1;
m.innerHTML = '
'
+ molCard('Водород','H2',[['H',2]],'2 атома H — двухатомная молекула')
+ molCard('Кислород','O2',[['O',2]],'2 атома O')
+ molCard('Озон','O3',[['O',3]],'3 атома O — тоже простое вещество')
+ molCard('Азот','N2',[['N',2]],'2 атома N')
+ '
Во всех молекулах — атомы одного элемента → это простые вещества. Кислород $\\text{O}_2$ и озон $\\text{O}_3$ образованы одним элементом, но это разные простые вещества.
';
if (W.chem8RenderMath) try { W.chem8RenderMath(m); } catch(e){}
}
/* §6 — классификатор простое/сложное + галерея сложных веществ */
function mount_p6() {
var c = $('p6-cls');
if (c) classifier(c, {
buckets: ['Простое вещество', 'Сложное вещество'],
items: [
{ t:'O₂', b:0 }, { t:'H₂O', b:1 }, { t:'Fe', b:0 }, { t:'CO₂', b:1 },
{ t:'N₂', b:0 }, { t:'NH₃', b:1 }, { t:'S', b:0 }, { t:'CH₄', b:1 }
]
});
var g = $('p6-gal');
if (g && !g._built) { g._built = 1;
g.innerHTML = '
'
+ molCard('Вода','H2O',[['O',1],['H',2]],'2 элемента: H и O')
+ molCard('Углекислый газ','CO2',[['C',1],['O',2]],'2 элемента: C и O')
+ molCard('Метан','CH4',[['C',1],['H',4]],'2 элемента: C и H')
+ molCard('Аммиак','NH3',[['N',1],['H',3]],'2 элемента: N и H')
+ '
В каждой молекуле — атомы разных элементов → это сложные вещества.
';
if (W.chem8RenderMath) try { W.chem8RenderMath(g); } catch(e){}
}
}
/* ── Волна 3 ── */
/* §7 — разбор химической формулы на состав */
function mount_p7() {
var inp = $('p7-in'), out = $('p7-out'), go = $('p7-go'); if (!inp || inp._built) return; inp._built = 1;
function calc() {
var f = inp.value.trim(), cnt = C().elementCounts ? C().elementCounts(f) : null;
if (!cnt || !Object.keys(cnt).length) { out.className = 'out bad'; out.textContent = 'Не удалось разобрать формулу. Проверь символы элементов (например, H2SO4).'; return; }
var els = Object.keys(cnt), tot = els.reduce(function (s, e) { return s + cnt[e]; }, 0);
out.className = 'out ok';
out.innerHTML = '' + (C().formula ? C().formula(f) : f) + ' '
+ 'Элементов: ' + els.length + ' (' + (els.length === 1 ? 'простое' : 'сложное') + ' вещество) '
+ els.map(function (e) { return e + ': ' + cnt[e] + ' ' + (cnt[e] === 1 ? 'атом' : 'атома(ов)'); }).join(' ')
+ ' Всего атомов в формуле: ' + tot + '';
}
go.addEventListener('click', calc);
inp.addEventListener('keydown', function (e) { if (e.key === 'Enter') calc(); });
document.querySelectorAll('.p7-ex').forEach(function (b) { b.addEventListener('click', function () { inp.value = b.dataset.f; calc(); }); });
calc();
}
/* §8 — калькулятор относительной молекулярной массы M_r */
function mount_p8() {
var inp = $('p8-in'), out = $('p8-out'), go = $('p8-go'); if (!inp || inp._built) return; inp._built = 1;
function calc() {
var f = inp.value.trim(), cnt = C().elementCounts ? C().elementCounts(f) : null, mr = C().molarMass ? C().molarMass(f) : NaN;
if (!cnt || isNaN(mr)) { out.className = 'out bad'; out.textContent = 'Не удалось разобрать формулу.'; return; }
out.className = 'out ok';
out.innerHTML = 'M_r(' + f + ') = ' + C().fmt(mr) + ' '
+ Object.keys(cnt).map(function (e) { return e + ': A_r=' + (C().arOf ? C().arOf(e) : '?') + ' × ' + cnt[e]; }).join(' | ')
+ ' Σ = ' + Object.keys(cnt).map(function (e) { return (C().arOf ? C().arOf(e) : '?') + '·' + cnt[e]; }).join(' + ') + ' = ' + C().fmt(mr) + '';
}
go.addEventListener('click', calc);
inp.addEventListener('keydown', function (e) { if (e.key === 'Enter') calc(); });
document.querySelectorAll('.p8-ex').forEach(function (b) { b.addEventListener('click', function () { inp.value = b.dataset.f; calc(); }); });
calc();
}
/* §9 — конструктор формулы по валентности (НОК индексов) */
function gcd(a, b) { return b ? gcd(b, a % b) : a; }
var VA = [ ['Na', 1], ['K', 1], ['H', 1], ['Mg', 2], ['Ca', 2], ['Zn', 2], ['Cu', 2], ['Al', 3], ['C', 4] ];
var VB = [ ['O', 2], ['Cl', 1], ['S', 2] ];
function mount_p9() {
var m = $('p9-bld'); if (!m || m._built) return; m._built = 1;
function optA(){ return VA.map(function(e,i){ return ''; }).join(''); }
function optB(){ return VB.map(function(e,i){ return ''; }).join(''); }
m.innerHTML = '