fix(textbooks): Физика 9 — escape § в num + phys9_legacy.js + финалы 5 глав

Багфиксы:
- gen_phys9_ch.js: убран двойной escape \u00a7 → литерал §
  (раньше карточка показывала '\u00a7 1' вместо '§ 1')
- phys9_legacy.js (262 КБ): извлечён весь JS монолита для глобальных onclick-
  обработчиков (startAnim1, lab11add/all/reset, checkNum, togglePend36 и пр.).
  Setup-код в конце обёрнут в try/catch — он рассчитан на DOM монолита.
- migrate_phys9_ch4.js + migrate_phys9_content.js: подключают phys9_legacy.js
  во все 5 ch-файлов перед закрытием <head>.

Финалы глав (write_phys9_finals.js):
- ch1: 5 задач (кинематика — поезд, разгон, окружность, лодка/река)
- ch2: 5 задач (динамика — трение, Гук, свободное падение, перегрузка)
- ch3: 5 задач (статика — рычаг, Архимед, блок, КПД накл. плоск., льдина)
- ch4: 5 задач (импульс — неупр. удар, ЗСЭ, мощность крана, пуля, бросок)
- ch5: 5 контрольных по практикуму (среднее, ЛР2, ЛР4, ЛР6, ЛР10)

Все задачи с автопроверкой через checkNum() (теперь работает из legacy.js).
This commit is contained in:
Maxim Dolgolyov
2026-05-30 08:55:00 +03:00
parent 0c6618fb38
commit dcdcde5b4e
10 changed files with 6625 additions and 62 deletions
+64 -5
View File
@@ -15,6 +15,7 @@
<script src="/js/api.js" defer></script>
<script src="/js/xp.js" defer></script>
<script src="/js/phys.js" defer></script>
<script src="/js/phys9_legacy.js" defer></script>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Manrope:wght@600;700;800;900&family=Unbounded:wght@700;800;900&family=JetBrains+Mono:wght@500;700&display=swap" rel="stylesheet">
<style>
:root{
@@ -1258,11 +1259,69 @@ function build_final5(){
const box = document.getElementById('final5-body');
let html = '';
html += makeCard('theory', "Финал главы 5", "★", `
<p><b>Финал главы 5</b> — этот параграф в разработке (Phase 5+).</p>
<p>Здесь появятся: теория, формулы, разобранные примеры и 3–4 интерактива в стиле «физики 10» — векторные диаграммы, графики движения, ползунки и автопроверяемые тренажёры.</p>
<p style="margin-top:10px;padding:10px 14px;background:var(--sec-acc-soft);border-radius:9px;font-size:.92rem">
<b>Phase 0:</b> создан скелет. <b>Phase 5:</b> наполнение по учебнику «Физика 9» (Исаченкова, Сокольский, Захаревич, 2019).
</p>
<div class="formula-grid" style="margin-bottom:20px">
<div class="fcard highlight"><h3>Погрешности</h3>
<div class="main-f">$\\Delta x = \\Delta x_{\\text{сист}} + \\Delta x_{\\text{случ}}$</div>
<p>$\\varepsilon_x = \\dfrac{\\Delta x}{\\langle x\\rangle}\\cdot 100\\%$ · итог: $x = \\langle x\\rangle \\pm \\Delta x$</p>
</div>
<div class="fcard"><h3>Ключевые формулы 12 ЛР</h3>
<div class="main-f">$a = \\dfrac{2l}{t^2}$, $\\mu = \\dfrac{F_{\\text{тр}}}{P}$, $F_A = F_1 - F_2$</div>
<p>$k = F/x$ · $\\eta = \\dfrac{A_{\\text{пол}}}{A_{\\text{сов}}}$ · $v_0 = l\\sqrt{g/(2h)}$</p>
</div>
<div class="fcard"><h3>Проверка законов</h3>
<div class="main-f">ЗСИ · ЗСЭ · условие равновесия</div>
<p>ЛР7: $F_1 \\ell_1 = F_2 \\ell_2$ · ЛР11: $m_1 l_1 = m_1 l_1' + m_2 l_2'$ · ЛР12: $F|x| = ml^2 g/(2h)$</p>
</div>
</div>
<div class="section-title"><i class="fas fa-star"></i> Контрольные вопросы по практикуму</div>
<div class="task-card">
<div class="task-num">Вопрос 1</div>
<div class="task-text">При пяти повторных измерениях времени получены значения: $4{,}8$ · $5{,}0$ · $5{,}2$ · $4{,}9$ · $5{,}1$ с. Найдите среднее значение $\\langle t\\rangle$.</div>
<div class="task-hint">$\\langle t\\rangle = (t_1 + t_2 + t_3 + t_4 + t_5)/5$.</div>
<div class="ans-row"><input type="number" class="ans-inp" id="fin5-q1" step="any"><span class="unit-lbl">с</span>
<button class="btn btn-pri" onclick="checkNum('fin5-q1', 5.0, 'с', 0.02)">Проверить</button></div>
<div class="feedback" id="fb-fin5-q1"></div>
</div>
<div class="task-card">
<div class="task-num">Вопрос 2</div>
<div class="task-text">В ЛР2 шарик прошёл по жёлобу длину $l = 0{,}80$ м за $t = 1{,}0$ с. Найдите модуль ускорения шарика.</div>
<div class="task-hint">$a = 2l/t^2$.</div>
<div class="ans-row"><input type="number" class="ans-inp" id="fin5-q2" step="any"><span class="unit-lbl">м/с²</span>
<button class="btn btn-pri" onclick="checkNum('fin5-q2', 1.6, 'м/с²', 0.05)">Проверить</button></div>
<div class="feedback" id="fb-fin5-q2"></div>
</div>
<div class="task-card">
<div class="task-num">Вопрос 3</div>
<div class="task-text">В ЛР4 при подвешивании груза массой $m = 0{,}2$ кг пружина растянулась на $x = 4$ см. Найдите жёсткость пружины. $g = 10$ м/с².</div>
<div class="task-hint">$k = mg/x$.</div>
<div class="ans-row"><input type="number" class="ans-inp" id="fin5-q3" step="any"><span class="unit-lbl">Н/м</span>
<button class="btn btn-pri" onclick="checkNum('fin5-q3', 50, 'Н/м', 0.5)">Проверить</button></div>
<div class="feedback" id="fb-fin5-q3"></div>
</div>
<div class="task-card">
<div class="task-num">Вопрос 4</div>
<div class="task-text">В ЛР6 шарик упал на пол с высоты $h = 0{,}8$ м, пройдя по горизонтали $l = 1{,}6$ м. Найдите начальную горизонтальную скорость шарика. $g = 10$ м/с².</div>
<div class="task-hint">$v_0 = l\\sqrt{g/(2h)}$. Подставьте численно.</div>
<div class="ans-row"><input type="number" class="ans-inp" id="fin5-q4" step="any"><span class="unit-lbl">м/с</span>
<button class="btn btn-pri" onclick="checkNum('fin5-q4', 4, 'м/с', 0.1)">Проверить</button></div>
<div class="feedback" id="fb-fin5-q4"></div>
</div>
<div class="task-card">
<div class="task-num">Вопрос 5</div>
<div class="task-text">В ЛР10 цилиндр в воздухе весил $F_1 = 1{,}0$ Н, а полностью погружённый в воду — $F_2 = 0{,}6$ Н. Найдите модуль выталкивающей силы.</div>
<div class="task-hint">$F_A = F_1 - F_2$.</div>
<div class="ans-row"><input type="number" class="ans-inp" id="fin5-q5" step="any"><span class="unit-lbl">Н</span>
<button class="btn btn-pri" onclick="checkNum('fin5-q5', 0.4, 'Н', 0.02)">Проверить</button></div>
<div class="feedback" id="fb-fin5-q5"></div>
</div>
`);
html += secNav('lr12', null);
html += readButton('final5');