Files
Learn_System/frontend/textbooks/math_5_ch1.html
T
Maxim Dolgolyov 9ed89ab0c8 feat(math5): Глава 1 §7–§9 — округление, сложение/вычитание, умножение/деление
§7 Округление (правило + округление на координатном луче до десятков + до
сотен/тысяч). §8 Сложение/вычитание (столбик, свойства + тренажёр + «найди
неизвестное» как подготовка к уравнениям). §9 Умножение/деление (прямоугольник
из точек a×b как визуал + тренажёр ×/÷). Шпаргалки/типсы §7–9. Тесты math5: 8/8.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 09:33:03 +03:00

908 lines
86 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<title>Математика 5 · Глава 1 · Натуральные числа</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js"
onload="renderMathInElement(document.body,{delimiters:[{left:'$$',right:'$$',display:true},{left:'$',right:'$',display:false},{left:'\\[',right:'\\]',display:true},{left:'\\(',right:'\\)',display:false}],throwOnError:false})"></script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Unbounded:wght@700;800;900&family=JetBrains+Mono:wght@500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/css/math6.css">
<script src="/js/api.js" defer></script>
<script src="/js/xp.js" defer></script>
<script src="/js/math6_svg.js" defer></script>
<script src="/js/math6_anim.js" defer></script>
<script src="/js/math6_engine.js" defer></script>
<style>:root{--pri:#4f46e5;--pri2:#3730a3;--pri-soft:#e0e7ff;--acc:#6366f1;--acc2:#4f46e5;--acc-soft:#eef2ff}</style>
</head>
<body>
<header class="hdr" data-wm="123">
<div class="hdr-row">
<div>
<h1>Математика 5 · Глава 1</h1>
<div class="hdr-sub">Натуральные числа: запись и разряды · сравнение и округление · действия · делимость · простые числа</div>
</div>
<div class="hdr-side">
<a href="/textbook/math-5" class="hdr-btn" title="Ко всем главам"><svg class="ic" viewBox="0 0 24 24"><polyline points="15 18 9 12 15 6"/></svg> К математике 5</a>
<button id="search-btn" class="hdr-btn" title="Поиск (Ctrl+K)"><svg class="ic" viewBox="0 0 24 24"><circle cx="11" cy="11" r="7"/><path d="m21 21-4-4"/></svg> <span>Поиск</span></button>
<button id="sidebar-btn" class="hdr-btn" title="Шпаргалка"><svg class="ic" viewBox="0 0 24 24"><line x1="4" y1="6" x2="20" y2="6"/><line x1="4" y1="12" x2="20" y2="12"/><line x1="4" y1="18" x2="14" y2="18"/></svg> Шпаргалка</button>
<button id="theme-btn" class="hdr-btn" title="Сменить тему"><svg class="ic" viewBox="0 0 24 24"><path d="M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z"/></svg> <span id="theme-lab">Тёмная</span></button>
</div>
</div>
</header>
<main class="main">
<div class="col-main">
<section class="hero" data-wm="123">
<h2>Натуральные числа</h2>
<p>Натуральные числа — те, которыми мы считаем предметы: $1, 2, 3, \dots$ В этой главе мы научимся <b>читать и записывать</b> большие числа по разрядам, <b>сравнивать и округлять</b> их, выполнять <b>все четыре действия</b>, возводить в <b>степень</b>, делить <b>с остатком</b>, а также разберём <b>делимость</b>: делители и кратные, НОД и НОК, признаки делимости, простые и составные числа.</p>
<div class="hero-row">
<button class="btn-primary" onclick="goTo('p1')"><svg class="ic" viewBox="0 0 24 24"><polygon points="6 4 20 12 6 20 6 4" fill="currentColor" stroke="none"/></svg> Начать § 1</button>
<div class="hero-progress"><span class="hp-label">Прогресс по главе</span><div class="hp-bar"><div id="hero-hp-fill" class="hp-fill"></div></div><span id="hero-hp-text" class="hp-text">0%</span></div>
<div id="hero-xp-badge" class="hero-xp-badge" title="Опыт" data-gamified></div>
</div>
</section>
<section class="psel"><div class="psel-title">Параграфы главы</div><div id="psel-grid" class="psel-grid"></div></section>
<div id="sections"></div>
</div>
<aside class="col-side" id="col-side"><div id="sidebar-content"></div></aside>
<div class="col-side-backdrop" id="col-side-backdrop"></div>
</main>
<footer class="foot" id="m6-foot">Интерактивный учебник «Математика 5» · Глава 1 · Натуральные числа · LearnSpace</footer>
<div id="ach-popup" class="ach-popup"><svg class="ic" viewBox="0 0 24 24" style="width:22px;height:22px"><polygon points="12,2 22,20 2,20"/></svg><span id="ach-text">Достижение!</span></div>
<div id="gloss-tip" class="gloss-tip"></div>
<div id="search-modal" class="search-modal" role="dialog" aria-label="Поиск по главе">
<div class="search-box">
<input type="text" id="search-input" class="search-input" placeholder="Поиск: понятие, действие, параграф…" autocomplete="off">
<div id="search-results" class="search-results"></div>
<div class="search-foot"><span><kbd>&#8593;&#8595;</kbd> навигация</span><span><kbd>Enter</kbd> открыть</span><span><kbd>Esc</kbd> закрыть</span></div>
</div>
</div>
<script>
'use strict';
window.M6 = {
slug: 'math-5-ch1', lsPrefix: 'math5_ch1', xpKey: 'math5_xp', wm: '123',
paras: [
{ id:'p1', num:'§ 1', name:'Как решать задачу', sub:'Условие, план, решение, проверка' },
{ id:'p2', num:'§ 2', name:'Натуральные числа и нуль. Чтение и запись', sub:'Разряды и классы' },
{ id:'p3', num:'§ 3', name:'Сравнение натуральных чисел', sub:'Что больше' },
{ id:'p4', num:'§ 4', name:'Точка, прямая, луч, отрезок, плоскость', sub:'Начала геометрии' },
{ id:'p5', num:'§ 5', name:'Измерение отрезков. Длина отрезка', sub:'Линейка и единицы длины' },
{ id:'p6', num:'§ 6', name:'Координатный луч', sub:'Число как точка на луче' },
{ id:'p7', num:'§ 7', name:'Округление натуральных чисел', sub:'До нужного разряда' },
{ id:'p8', num:'§ 8', name:'Сложение и вычитание', sub:'В столбик' },
{ id:'p9', num:'§ 9', name:'Умножение и деление', sub:'В столбик и уголком' },
{ id:'p10', num:'§ 10', name:'Степень числа', sub:'Квадрат и куб' },
{ id:'p11', num:'§ 11', name:'Деление с остатком', sub:'a = b·q + r' },
{ id:'p12', num:'§ 12', name:'Делители и кратные. НОД и НОК', sub:'Общие делители и кратные' },
{ id:'p13', num:'§ 13', name:'Признаки делимости', sub:'На 2, 3, 4, 5, 9, 10' },
{ id:'p14', num:'§ 14', name:'Простые и составные числа', sub:'Разложение на множители' },
{ id:'p15', num:'§ 15', name:'Математика вокруг нас', sub:'Числа в жизни', applied:true },
{ id:'p16', num:'§ 16', name:'Движение, взвешивание, переливание', sub:'Задачи-головоломки', applied:true },
{ id:'p17', num:'§ 17', name:'Исторические сведения о числах', sub:'Как считали разные народы', applied:true },
{ id:'final', num:'★', name:'Финал главы', sub:'Тест · боссы главы 1', final:true }
],
achLabels: {
start:'Начало главы 1!', p1_done:'Решаю задачи по плану!', p2_done:'Читаю и пишу большие числа!',
p3_done:'Сравниваю числа!', p4_done:'Геометрия: точка, прямая, луч!', p5_done:'Измеряю отрезки!',
p6_done:'Координатный луч покорён!', p7_done:'Округляю уверенно!', p8_done:'Сложение и вычитание!',
p9_done:'Умножение и деление!', p10_done:'Степень числа!', p11_done:'Деление с остатком!',
p12_done:'НОД и НОК!', p13_done:'Признаки делимости!', p14_done:'Простые числа!',
p15_done:'Математика вокруг нас!', p16_done:'Задачи-головоломки!', p17_done:'Истории о числах!',
ch1_done:'Глава 1 «Натуральные числа» пройдена!'
},
startAch: ['start','Начало главы 1!'],
finalAch: ['ch1_done', 'Глава 1 «Натуральные числа» пройдена!'],
sidebars: {}, tips: [], glossary: [], searchRows: [], builders: {},
footer: 'Интерактивный учебник «Математика 5» · Глава 1 · Натуральные числа · LearnSpace'
};
/* ===================== ВСПОМОГАТЕЛЬНОЕ ===================== */
function _ri(a,b){ return a + Math.floor(Math.random()*(b-a+1)); }
function _pick(a){ return a[_ri(0,a.length-1)]; }
function _kf(x){ return String(x).replace('.','{,}'); }
function _grp(s){ s=String(s); var o='',c=0; for(var i=s.length-1;i>=0;i--){ o=s[i]+o; if(++c%3===0&&i>0)o='\\,'+o; } return o; }
/* ===================== § 1. КАК РЕШАТЬ ЗАДАЧУ ===================== */
function buildP1(){
var box=document.getElementById('p1-body'); var h='';
h+=makeCard('oral','Где это в жизни','1.0',
'<p>Решать задачи приходится не только на уроке. Распланировать карманные деньги, прикинуть, хватит ли времени дойти до школы, разделить пиццу поровну — всё это задачи. Хороший «решатель» сначала <b>понимает</b>, чего от него хотят, и только потом считает.</p>');
h+=makeCard('rule','Четыре шага решения','1.1',
'<p>Любую задачу удобно решать по плану из четырёх шагов:</p>'
+'<ol style="padding-left:22px;line-height:2">'
+'<li><b>Понять условие.</b> Что дано? Что нужно найти? Сделать рисунок или краткую запись.</li>'
+'<li><b>Составить план.</b> Какие действия и в каком порядке приведут к ответу?</li>'
+'<li><b>Выполнить план.</b> Аккуратно сделать вычисления.</li>'
+'<li><b>Проверить.</b> Подходит ли ответ по смыслу? Сошлось ли?</li>'
+'</ol>');
h+=makeCard('example','Разбор по шагам','1.2',
'<p>Задача: в двух коробках $40$ карандашей. В первой на $6$ больше, чем во второй. Сколько карандашей в каждой коробке?</p>'
+'<ol style="padding-left:22px;line-height:2">'
+'<li><b>Понять.</b> Дано: всего $40$, разница $6$. Найти: сколько в каждой коробке.</li>'
+'<li><b>План.</b> Уберём «лишние» $6$ из суммы, разделим остаток поровну, потом вернём $6$ в первую.</li>'
+'<li><b>Решение.</b> $(40-6):2=17$ — во второй; $17+6=23$ — в первой.</li>'
+'<li><b>Проверка.</b> $17+23=40$ и $23-17=6$. Верно!</li>'
+'</ol>');
h+=makeCard('theory','А знаешь ли ты?','1.3',
'<p>Математик <b>Дьёрдь Пойа</b> в 1945 году написал знаменитую книгу «Как решать задачу». Именно он описал эти четыре шага. Его главный совет: «Если не получается решить задачу — реши сначала более простую похожую задачу».</p>');
h+='<div class="wg" id="p1-iv1"><div class="wg-header"><span class="wg-badge">Интерактив 1</span><div class="wg-title">На каком шаге ученик?</div></div>'
+'<div class="wg-help">Прочитай фразу ученика и определи, какому из четырёх шагов она соответствует.</div>'
+'<div class="score-display"><span>Вопрос <b id="p1-i">1</b> / 5</span><span>Очки: <b id="p1-s">0</b> / 5</span></div>'
+'<div id="p1-q" class="qbox" style="font-size:1.05rem"></div>'
+'<div style="display:flex;gap:8px;justify-content:center;flex-wrap:wrap"><button class="btn primary" data-step="1">Понять условие</button><button class="btn primary" data-step="2">Составить план</button><button class="btn primary" data-step="3">Выполнить</button><button class="btn primary" data-step="4">Проверить</button></div>'
+'<div class="feedback" id="p1-fb"></div></div>';
h+='<div class="wg" id="p1-iv2"><div class="wg-header"><span class="wg-badge">Интерактив 2</span><div class="wg-title">Реши задачу</div></div>'
+'<div class="wg-help">Реши задачу по плану и введи ответ числом (без единиц).</div>'
+'<div class="score-display"><span>Задача <b id="p1-pi">1</b> / 6</span><span>Очки: <b id="p1-ps">0</b> / 6</span></div>'
+'<div id="p1-pq" class="qbox" style="font-size:1rem;text-align:left"></div>'
+'<div style="display:flex;gap:10px;justify-content:center;align-items:center;flex-wrap:wrap"><input type="text" id="p1-pa" class="tinp" style="width:120px;text-align:center" placeholder="ответ"><button class="btn primary" id="p1-pgo">Проверить</button></div>'
+'<div class="feedback" id="p1-pfb"></div></div>';
h+=secNav(null,'p2')+readBtn('p1');
box.innerHTML=h; renderMath(box);
(function(){
var Q=[
{t:'«Сделаю краткую запись: дано $40$, разница $6$.»', s:1},
{t:'«Сначала вычту $6$, потом разделю остаток на $2$.»', s:2},
{t:'«$40-6=34$, затем $34:2=17$.»', s:3},
{t:'«Проверю: $17+23=40$ — сходится.»', s:4},
{t:'«Что именно нужно найти в задаче?»', s:1},
{t:'«Запишу ответ и подумаю, разумен ли он.»', s:4},
{t:'«Каким действием это решается?»', s:2},
{t:'«Аккуратно посчитаю столбиком.»', s:3}
];
var order=[],i=0,score=0,cur=null;
function reorder(){ order=Q.map(function(_,k){return k;}); for(var j=order.length-1;j>0;j--){ var k=_ri(0,j),t=order[j];order[j]=order[k];order[k]=t; } }
reorder();
function show(){ if(i>=5){ document.getElementById('p1-q').innerHTML='<b>Готово!</b> Результат: '+score+' / 5'; if(score>=4){addXp(15,'p1-iv1');bumpProgress('p1',30);}else if(score>=2){addXp(8,'p1-iv1');bumpProgress('p1',16);} return; }
cur=Q[order[i]]; document.getElementById('p1-i').textContent=i+1;
document.getElementById('p1-q').innerHTML=cur.t; renderMath(document.getElementById('p1-q'));
document.getElementById('p1-fb').style.display='none'; }
function ans(s){ if(i>=5)return; var names=['','Понять условие','Составить план','Выполнить','Проверить']; var fb=document.getElementById('p1-fb');
if(s===cur.s){ score++; feedback(fb,true,'✓ Верно — это шаг «'+names[cur.s]+'».'); } else feedback(fb,false,'✗ Нет. Это шаг «'+names[cur.s]+'».');
document.getElementById('p1-s').textContent=score; i++; setTimeout(show,1100); }
document.querySelectorAll('#p1-iv1 [data-step]').forEach(function(b){ b.addEventListener('click',function(){ ans(+b.getAttribute('data-step')); }); });
show();
})();
(function(){
var PROB=[
{q:'В двух корзинах $30$ яблок. В первой на $4$ больше, чем во второй. Сколько яблок во второй?',a:13},
{q:'Книга стоит $7$ р., тетрадь — на $5$ р. дешевле. Сколько стоит тетрадь?',a:2},
{q:'Купили $3$ ручки по $2$ р. Сколько заплатили?',a:6},
{q:'У Маши $24$ наклейки, она отдала треть. Сколько наклеек она отдала?',a:8},
{q:'В классе $28$ учеников, девочек $15$. Сколько мальчиков?',a:13},
{q:'За $5$ дней прочитали $45$ страниц поровну. Сколько страниц в день?',a:9},
{q:'Ленту $200$ см разрезали на части по $25$ см. Сколько получилось частей?',a:8},
{q:'Было $50$ р., потратили $18$ р. и $12$ р. Сколько осталось?',a:20}
];
var order=[],i=0,score=0,cur=null;
function reorder(){ order=PROB.map(function(_,k){return k;}); for(var j=order.length-1;j>0;j--){ var k=_ri(0,j),t=order[j];order[j]=order[k];order[k]=t; } }
reorder();
function show(){ if(i>=6){ document.getElementById('p1-pq').innerHTML='<b>Готово!</b> Результат: '+score+' / 6'; if(score>=5){addXp(15,'p1-iv2');bumpProgress('p1',30);}else if(score>=3){addXp(8,'p1-iv2');bumpProgress('p1',16);} return; }
cur=PROB[order[i]]; document.getElementById('p1-pi').textContent=i+1;
document.getElementById('p1-pq').innerHTML=cur.q; renderMath(document.getElementById('p1-pq'));
document.getElementById('p1-pa').value=''; document.getElementById('p1-pfb').style.display='none'; }
function go(){ if(i>=6)return; var fb=document.getElementById('p1-pfb'), v=parseFloat(document.getElementById('p1-pa').value.replace(',','.').trim());
if(isNaN(v)){ feedback(fb,false,'Введи число.'); return; }
if(v===cur.a){ score++; feedback(fb,true,'✓ Верно! Ответ '+cur.a+'.'); } else feedback(fb,false,'✗ Нет. Правильный ответ: '+cur.a+'.');
document.getElementById('p1-ps').textContent=score; i++; setTimeout(show,1200); }
document.getElementById('p1-pgo').addEventListener('click',go);
document.getElementById('p1-pa').addEventListener('keydown',function(e){ if(e.key==='Enter')go(); });
show();
})();
}
/* ===================== § 2. ЧТЕНИЕ И ЗАПИСЬ. РАЗРЯДЫ ===================== */
function buildP2(){
var box=document.getElementById('p2-body'); var h='';
h+=makeCard('oral','Где это в жизни','2.0',
'<p>Большие числа окружают нас: на Земле живёт около $8\\,000\\,000\\,000$ человек, до Луны примерно $384\\,000$ км, а у современного смартфона памяти $128\\,000\\,000\\,000$ байт. Чтобы не запутаться в нулях, числа разбивают на <b>классы</b> по три цифры.</p>');
h+=makeCard('theory','Натуральные числа и нуль','2.1',
'<p><b>Натуральные числа</b> — это числа, которыми считают предметы: $1, 2, 3, 4, \\dots$ Их ряд бесконечен: какое бы число ни взяли, всегда есть следующее.</p>'
+'<p>Число <b>нуль</b> $(0)$ натуральным не считают, но без него не записать, например, число $108$. Множество натуральных чисел обозначают буквой $\\mathbb{N}$.</p>');
h+=makeCard('rule','Классы и разряды','2.2',
'<p>Запись числа читают <b>справа налево</b> по разрядам и группируют по три — в <b>классы</b>:</p>'
+'<table class="tbl"><tr><th colspan="3">Миллионы</th><th colspan="3">Тысячи</th><th colspan="3">Единицы</th></tr>'
+'<tr><td>сот</td><td>дес</td><td>ед</td><td>сот</td><td>дес</td><td>ед</td><td>сот</td><td>дес</td><td>ед</td></tr>'
+'<tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td></tr></table>'
+'<p>Это число $12\\,345\\,678$ — «двенадцать миллионов триста сорок пять тысяч шестьсот семьдесят восемь».</p>');
h+=makeCard('example','Читаем число','2.3',
'<p>$5\\,204$ — пять тысяч двести четыре. &nbsp; $70\\,030$ — семьдесят тысяч тридцать. &nbsp; $300\\,000$ — триста тысяч.</p>'
+'<p>Нуль в разряде означает, что этого разряда «нет»: в числе $70\\,030$ нет ни сотен, ни единиц тысяч, ни единиц.</p>');
h+=makeCard('example','Разбор по шагам','2.4',
'<p>Запишем цифрами число «двести три тысячи сорок».</p>'
+'<ol style="padding-left:22px;line-height:2">'
+'<li>Находим классы: «двести три <b>тысячи</b>» — класс тысяч $=203$; «сорок» — класс единиц $=40$.</li>'
+'<li>Каждый класс — ровно $3$ цифры: тысячи $\\to 203$, единицы $\\to 040$.</li>'
+'<li>Соединяем: $203\\,040$.</li>'
+'<li>Проверка: читаем обратно — «двести три тысячи сорок». Верно!</li>'
+'</ol>');
h+=makeCard('theory','А знаешь ли ты?','2.5',
'<p>Число $10^{100}$ (единица со ста нулями) называется <b>гугол</b>. Это слово придумал девятилетний племянник математика Эдварда Каснера. От него же произошло название поисковика Google. А гуголов в одном гуголплексе — гугол!</p>');
h+='<div class="wg" id="p2-iv1"><div class="wg-header"><span class="wg-badge">Интерактив 1</span><div class="wg-title">Разрядная таблица</div></div>'
+'<div class="wg-help">Введи натуральное число (до 9 цифр) — оно разложится по классам и разрядам.</div>'
+'<div style="display:flex;gap:10px;justify-content:center;align-items:center;flex-wrap:wrap;margin-bottom:8px"><input type="text" id="p2-pv-in" class="tinp" style="width:170px;text-align:center" value="12345678" placeholder="например 305040"><button class="btn primary" id="p2-pv-go">Разложить</button></div>'
+'<div id="p2-pv-out" style="overflow-x:auto"></div></div>';
h+='<div class="wg" id="p2-iv2"><div class="wg-header"><span class="wg-badge">Интерактив 2</span><div class="wg-title">Какая цифра в разряде?</div></div>'
+'<div class="wg-help">Назови цифру в указанном разряде данного числа. Введи одну цифру (09).</div>'
+'<div class="score-display"><span>Вопрос <b id="p2-qi">1</b> / 6</span><span>Очки: <b id="p2-qs">0</b> / 6</span></div>'
+'<div id="p2-qq" class="qbox"></div>'
+'<div style="display:flex;gap:10px;justify-content:center;align-items:center;flex-wrap:wrap"><input type="number" id="p2-qa" class="tinp" style="width:90px;text-align:center" min="0" max="9"><button class="btn primary" id="p2-qgo">Проверить</button></div>'
+'<div class="feedback" id="p2-qfb"></div></div>';
h+=secNav('p1','p3')+readBtn('p2');
box.innerHTML=h; renderMath(box);
(function(){
var CLS=[['Миллионы','#4f46e5'],['Тысячи','#0d9488'],['Единицы','#e11d48']];
var LAB=['сот','дес','ед','сот','дес','ед','сот','дес','ед'];
function render(){
var raw=(document.getElementById('p2-pv-in').value||'').replace(/\D/g,'');
if(!raw)raw='0'; if(raw.length>9)raw=raw.slice(-9);
var num=parseInt(raw,10); var s=raw.padStart(9,'0');
var firstSig=s.search(/[1-9]/); if(firstSig<0)firstSig=8;
var th='<table class="tbl" style="margin:0 auto"><tr>';
for(var c=0;c<3;c++) th+='<th colspan="3" style="color:'+CLS[c][1]+'">'+CLS[c][0]+'</th>';
th+='</tr><tr>';
for(var k=0;k<9;k++) th+='<td style="font-size:.62rem;color:var(--muted)">'+LAB[k]+'</td>';
th+='</tr><tr>';
for(var d=0;d<9;d++){ var grp=Math.floor(d/3),dim=d<firstSig; th+='<td style="font-size:1.4rem;font-weight:800;color:'+CLS[grp][1]+';opacity:'+(dim?0.18:1)+'">'+s[d]+'</td>'; }
th+='</tr></table>';
th+='<div style="text-align:center;margin-top:10px;font-size:1.1rem;font-weight:700">$'+_grp(num)+'$</div>';
var out=document.getElementById('p2-pv-out'); out.innerHTML=th; renderMath(out);
}
document.getElementById('p2-pv-go').addEventListener('click',render);
document.getElementById('p2-pv-in').addEventListener('keydown',function(e){ if(e.key==='Enter')render(); });
render();
})();
(function(){
var PL=[['единиц',0],['десятков',1],['сотен',2],['единиц тысяч',3],['десятков тысяч',4],['сотен тысяч',5]];
var i=0,score=0,cur=null;
function gen(){ var n=_ri(100000,999999), s=String(n), pl=_pick(PL); cur={n:n, s:s, place:pl[0], digit:+s[s.length-1-pl[1]]}; }
function show(){ if(i>=6){ document.getElementById('p2-qq').innerHTML='<b>Готово!</b> Результат: '+score+' / 6'; if(score>=5){addXp(15,'p2-iv2');bumpProgress('p2',30);}else if(score>=3){addXp(8,'p2-iv2');bumpProgress('p2',18);} return; }
gen(); document.getElementById('p2-qi').textContent=i+1;
document.getElementById('p2-qq').innerHTML='Число $'+_grp(cur.n)+'$. Какая цифра в разряде <b>'+cur.place+'</b>?'; renderMath(document.getElementById('p2-qq'));
document.getElementById('p2-qa').value=''; document.getElementById('p2-qfb').style.display='none'; }
function go(){ if(i>=6)return; var fb=document.getElementById('p2-qfb'), a=parseInt(document.getElementById('p2-qa').value,10);
if(isNaN(a)){ feedback(fb,false,'Введи одну цифру 0–9.'); return; }
if(a===cur.digit){ score++; feedback(fb,true,'✓ Верно! В разряде '+cur.place+' стоит '+cur.digit+'.'); } else feedback(fb,false,'✗ Нет. Правильный ответ: '+cur.digit+'.');
document.getElementById('p2-qs').textContent=score; i++; setTimeout(show,1100); }
document.getElementById('p2-qgo').addEventListener('click',go);
document.getElementById('p2-qa').addEventListener('keydown',function(e){ if(e.key==='Enter')go(); });
show();
})();
}
/* ===================== ФИНАЛ ГЛАВЫ ===================== */
function buildFinal(){
var box=document.getElementById('final-body'); var h='';
h+=makeCard('theory','Финал главы 1','★',
'<p>Пять боссов проверят владение натуральными числами: разряды, округление, действия и степень. Побей не меньше четырёх — и глава покорена!</p>');
h+='<div class="wg" id="fin"><div class="wg-header"><span class="wg-badge">Боссы</span><div class="wg-title">Сразись с главой 1</div></div>'
+'<div class="hp-boss"><div class="hp-boss-fill" id="fin-hp" style="width:100%"></div></div>'
+'<div class="score-display"><span>Босс <b id="fin-i">1</b> / 5</span><span>Побеждено: <b id="fin-s">0</b> / 5</span></div>'
+'<div id="fin-name" style="font-weight:800;color:#b91c1c;text-align:center;margin-bottom:6px"></div>'
+'<div id="fin-q" class="boss-q"></div>'
+'<div style="display:flex;gap:10px;justify-content:center;align-items:center;flex-wrap:wrap"><input type="text" id="fin-a" class="tinp" style="width:160px;text-align:center" placeholder="ответ"><button class="btn primary" id="fin-go">Удар!</button></div>'
+'<div class="feedback" id="fin-fb"></div></div>';
h+=secNav('p17',null)+readBtn('final','Завершить главу 1 (+10 XP)');
box.innerHTML=h; renderMath(box);
(function(){
var bosses=[
function(){ var n=_ri(100000,999999), s=String(n); return {name:'Страж Разрядов', q:'В числе $'+_grp(n)+'$ назови цифру в разряде <b>тысяч</b>.', ans:+s[s.length-4]}; },
function(){ var n=_ri(1200,9800); return {name:'Округлитель', q:'Округли $'+_grp(n)+'$ до <b>сотен</b>.', ans:Math.round(n/100)*100}; },
function(){ var a=_ri(2400,8600), b=_ri(1100,2300); return {name:'Сумматор', q:'Вычисли $'+_grp(a)+' + '+_grp(b)+'$.', ans:a+b}; },
function(){ var a=_ri(13,40), b=_ri(11,30); return {name:'Множитель', q:'Вычисли $'+a+' \\cdot '+b+'$.', ans:a*b}; },
function(){ var p=_pick([[2,5,32],[3,4,81],[5,3,125],[2,8,256],[4,3,64],[6,2,36]]); return {name:'Повелитель Степеней', q:'Вычисли $'+p[0]+'^{'+p[1]+'}$.', ans:p[2]}; }
];
var i=0,score=0,cur=null,done=false;
function show(){
if(i>=5){ done=true; document.getElementById('fin-name').textContent=''; document.getElementById('fin-q').innerHTML=(score>=4?'<b>Победа!</b> Глава 1 пройдена. ':'<b>Бой окончен.</b> ')+'Побеждено боссов: '+score+' / 5.';
document.getElementById('fin-hp').style.width=(score>=4?0:40)+'%';
if(score>=4){ addXp(40,'final'); bumpProgress('final',100); if(window.confetti)try{confetti();}catch(e){} } else { bumpProgress('final',60); }
return; }
cur=bosses[i](); document.getElementById('fin-i').textContent=i+1; document.getElementById('fin-s').textContent=score;
document.getElementById('fin-name').textContent='Босс '+(i+1)+': '+cur.name;
document.getElementById('fin-hp').style.width=(100-i*20)+'%';
document.getElementById('fin-q').innerHTML=cur.q; renderMath(document.getElementById('fin-q'));
document.getElementById('fin-a').value=''; document.getElementById('fin-fb').style.display='none';
}
function go(){ if(done||i>=5)return; var fb=document.getElementById('fin-fb'), v=parseFloat(document.getElementById('fin-a').value.replace(',','.').trim());
if(isNaN(v)){ feedback(fb,false,'Введи число.'); return; }
if(Math.abs(v-cur.ans)<1e-9){ score++; feedback(fb,true,'✓ Босс повержен! Ответ '+cur.ans+'.'); } else feedback(fb,false,'✗ Босс устоял. Верный ответ: '+cur.ans+'.');
document.getElementById('fin-s').textContent=score; i++; setTimeout(show,1400); }
document.getElementById('fin-go').addEventListener('click',go);
document.getElementById('fin-a').addEventListener('keydown',function(e){ if(e.key==='Enter')go(); });
show();
})();
}
/* ===================== § 3. СРАВНЕНИЕ НАТУРАЛЬНЫХ ЧИСЕЛ ===================== */
function buildP3(){
var box=document.getElementById('p3-body'); var h='';
h+=makeCard('oral','Где это в жизни','3.0',
'<p>Сравнивать числа приходится постоянно: где цена ниже, у какого телефона больше памяти, в каком городе больше жителей, чей результат в игре выше. Натуральные числа сравнивать легко — нужно лишь знать два простых правила.</p>');
h+=makeCard('rule','Как сравнивать натуральные числа','3.1',
'<p>1) Из двух чисел больше то, в записи которого <b>больше цифр</b> (без лишних нулей слева): $1000>999$.</p>'
+'<p>2) Если цифр <b>поровну</b> — сравнивают <b>поразрядно слева направо</b>: на первом же различии больше то число, у которого цифра больше.</p>'
+'<p>Знаки: $<$ «меньше», $>$ «больше», $=$ «равно». Острый угол знака всегда «смотрит» на меньшее число.</p>');
h+=makeCard('example','Примеры','3.2',
'<p>$58>9$ (две цифры против одной). &nbsp; $347<352$ (сотни равны, десятки $4<5$). &nbsp; $1\\,200>1\\,199$.</p>');
h+=makeCard('example','Разбор по шагам','3.3',
'<p>Сравним $4\\,019$ и $4\\,190$.</p>'
+'<ol style="padding-left:22px;line-height:2">'
+'<li>Цифр поровну — по $4$. Сравниваем поразрядно.</li>'
+'<li>Тысячи: $4=4$. Сотни: $0<1$ — на этом различии всё решается.</li>'
+'<li>Значит $4\\,019<4\\,190$.</li>'
+'</ol>');
h+=makeCard('theory','А знаешь ли ты?','3.4',
'<p>Знаки $>$ и $<$ придумал английский математик <b>Томас Хэрриот</b> (изданы в $1631$ году). А знак равенства $=$ ещё раньше, в $1557$ году, предложил Роберт Рекорд: «нет двух вещей более равных, чем две параллельные чёрточки».</p>');
h+='<div class="wg" id="p3-iv1"><div class="wg-header"><span class="wg-badge">Интерактив 1</span><div class="wg-title">Поставь знак</div></div>'
+'<div class="wg-help">Сравни два числа и выбери верный знак.</div>'
+'<div class="score-display"><span>Вопрос <b id="p3-i">1</b> / 6</span><span>Очки: <b id="p3-s">0</b> / 6</span></div>'
+'<div id="p3-q" class="qbox"></div>'
+'<div style="display:flex;gap:10px;justify-content:center;flex-wrap:wrap"><button class="btn primary" data-cmp="&gt;">&gt;</button><button class="btn primary" data-cmp="=">=</button><button class="btn primary" data-cmp="&lt;">&lt;</button></div>'
+'<div class="feedback" id="p3-fb"></div></div>';
h+='<div class="wg" id="p3-iv2"><div class="wg-header"><span class="wg-badge">Интерактив 2</span><div class="wg-title">Выбери наибольшее</div></div>'
+'<div class="wg-help">Из четырёх чисел нажми самое большое.</div>'
+'<div class="score-display"><span>Вопрос <b id="p3-mi">1</b> / 5</span><span>Очки: <b id="p3-ms">0</b> / 5</span></div>'
+'<div id="p3-mq" style="display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin:10px 0"></div>'
+'<div class="feedback" id="p3-mfb"></div></div>';
h+=secNav('p2','p4')+readBtn('p3');
box.innerHTML=h; renderMath(box);
(function(){
var i=0,score=0,cur=null;
function gen(){ var a,b; if(_ri(0,3)===0){ a=_ri(10,9999); b=a; } else { a=_ri(10,9999); b=_ri(10,9999); } cur={a:a,b:b}; }
function show(){ if(i>=6){ document.getElementById('p3-q').innerHTML='<b>Готово!</b> Результат: '+score+' / 6'; if(score>=5){addXp(15,'p3-iv1');bumpProgress('p3',30);}else if(score>=3){addXp(8,'p3-iv1');bumpProgress('p3',16);} return; }
gen(); document.getElementById('p3-i').textContent=i+1;
document.getElementById('p3-q').innerHTML='$'+_grp(cur.a)+' \\;\\square\\; '+_grp(cur.b)+'$'; renderMath(document.getElementById('p3-q'));
document.getElementById('p3-fb').style.display='none'; }
function ans(sym){ if(i>=6)return; var fb=document.getElementById('p3-fb'), correct=cur.a>cur.b?'>':(cur.a<cur.b?'<':'=');
if(sym===correct){ score++; feedback(fb,true,'✓ Верно: $'+_grp(cur.a)+' '+correct+' '+_grp(cur.b)+'$.'); } else feedback(fb,false,'✗ Нет. Верно: $'+_grp(cur.a)+' '+correct+' '+_grp(cur.b)+'$.');
document.getElementById('p3-s').textContent=score; i++; setTimeout(show,1100); }
document.querySelectorAll('#p3-iv1 [data-cmp]').forEach(function(b){ b.addEventListener('click',function(){ ans(b.getAttribute('data-cmp')); }); });
show();
})();
(function(){
var i=0,score=0,cur=null;
function gen(){ var arr=[],mx=_ri(1000,99999); arr.push(mx); while(arr.length<4){ var x=_ri(100,99999); if(x!==mx&&arr.indexOf(x)<0)arr.push(x); } for(var j=arr.length-1;j>0;j--){ var k=_ri(0,j),t=arr[j];arr[j]=arr[k];arr[k]=t; } cur={arr:arr,max:mx}; }
function show(){ if(i>=5){ document.getElementById('p3-mq').innerHTML='<b>Готово! '+score+' / 5</b>'; if(score>=4){addXp(15,'p3-iv2');bumpProgress('p3',30);}else if(score>=2){addXp(8,'p3-iv2');bumpProgress('p3',16);} return; }
gen(); document.getElementById('p3-mi').textContent=i+1;
var html=''; cur.arr.forEach(function(x){ html+='<button class="btn primary" data-x="'+x+'">'+x.toLocaleString('ru-RU')+'</button>'; });
document.getElementById('p3-mq').innerHTML=html;
document.querySelectorAll('#p3-mq [data-x]').forEach(function(b){ b.addEventListener('click',function(){ ans(+b.getAttribute('data-x')); }); });
document.getElementById('p3-mfb').style.display='none'; }
function ans(x){ if(i>=5)return; var fb=document.getElementById('p3-mfb');
if(x===cur.max){ score++; feedback(fb,true,'✓ Верно! Наибольшее — '+cur.max.toLocaleString('ru-RU')+'.'); } else feedback(fb,false,'✗ Нет. Наибольшее — '+cur.max.toLocaleString('ru-RU')+'.');
document.getElementById('p3-ms').textContent=score; i++; setTimeout(show,1100); }
show();
})();
}
/* ===================== § 4. ТОЧКА, ПРЯМАЯ, ЛУЧ, ОТРЕЗОК, ПЛОСКОСТЬ ===================== */
function buildP4(){
var box=document.getElementById('p4-body'); var h='';
h+=makeCard('oral','Где это в жизни','4.0',
'<p>Геометрия начинается с простых образов. Натянутая нить — это <b>отрезок</b>, луч прожектора уходит в небо как <b>луч</b>, ровная гладь озера — кусочек <b>плоскости</b>, а кончик карандаша оставляет <b>точку</b>. Из этих «кирпичиков» строят все чертежи.</p>');
h+=makeCard('theory','Главные геометрические фигуры','4.1',
'<p><b>Точка</b> — самая простая фигура, у неё нет размеров. Обозначают большой буквой: $A$, $B$.</p>'
+'<p><b>Прямая</b> бесконечна в обе стороны. Обозначают малой буквой $a$ или двумя точками: прямая $AB$.</p>'
+'<p><b>Луч</b> имеет начало и уходит в бесконечность в одну сторону. Обозначают $OA$ (первой ставят <b>начало</b> $O$).</p>'
+'<p><b>Отрезок</b> — часть прямой между двумя точками-концами: отрезок $AB$.</p>'
+'<p><b>Плоскость</b> — бесконечная ровная поверхность (например, поверхность стола, продолженная во все стороны).</p>');
h+=makeCard('rule','Сколько фигур можно провести','4.2',
'<p>Через одну точку можно провести <b>сколько угодно</b> прямых. А через <b>две</b> точки — <b>только одну</b> прямую. Это важное свойство прямой.</p>');
h+=makeCard('example','Разбор по шагам','4.3',
'<p>На прямой отметили $4$ точки: $A, B, C, D$. Сколько получилось отрезков?</p>'
+'<ol style="padding-left:22px;line-height:2">'
+'<li>Отрезок задаётся <b>двумя</b> точками-концами.</li>'
+'<li>Считаем пары: $AB, AC, AD, BC, BD, CD$.</li>'
+'<li>Получилось $6$ отрезков.</li>'
+'</ol>');
h+=makeCard('theory','А знаешь ли ты?','4.4',
'<p>Около $2300$ лет назад древнегреческий учёный <b>Евклид</b> написал книгу «Начала», с которой и начинается геометрия. Он первым строго описал точку, прямую и плоскость. По «Началам» учились более двух тысяч лет — это один из самых издаваемых учебников в истории!</p>');
h+='<div class="wg" id="p4-iv1"><div class="wg-header"><span class="wg-badge">Интерактив 1</span><div class="wg-title">Что изображено?</div></div>'
+'<div class="wg-help">Определи фигуру по рисунку.</div>'
+'<div class="score-display"><span>Вопрос <b id="p4-i">1</b> / 5</span><span>Очки: <b id="p4-s">0</b> / 5</span></div>'
+'<div id="p4-fig" style="text-align:center;margin:8px 0"></div>'
+'<div style="display:flex;gap:8px;justify-content:center;flex-wrap:wrap"><button class="btn primary" data-f="точка">точка</button><button class="btn primary" data-f="прямая">прямая</button><button class="btn primary" data-f="луч">луч</button><button class="btn primary" data-f="отрезок">отрезок</button></div>'
+'<div class="feedback" id="p4-fb"></div></div>';
h+='<div class="wg" id="p4-iv2"><div class="wg-header"><span class="wg-badge">Интерактив 2</span><div class="wg-title">Сколько отрезков?</div></div>'
+'<div class="wg-help">На прямой отмечено несколько точек. Сколько всего отрезков они задают?</div>'
+'<div class="score-display"><span>Вопрос <b id="p4-ci">1</b> / 5</span><span>Очки: <b id="p4-cs">0</b> / 5</span></div>'
+'<div id="p4-cfig" style="text-align:center;margin:8px 0"></div>'
+'<div style="display:flex;gap:10px;justify-content:center;align-items:center;flex-wrap:wrap"><input type="number" id="p4-ca" class="tinp" style="width:90px;text-align:center" min="0"><button class="btn primary" id="p4-cgo">Проверить</button></div>'
+'<div class="feedback" id="p4-cfb"></div></div>';
h+=secNav('p3','p5')+readBtn('p4');
box.innerHTML=h; renderMath(box);
function figSVG(type){
var W=300,H=70,y=40;
var s='<svg viewBox="0 0 '+W+' '+H+'" width="300" style="max-width:100%"><defs></defs>';
if(type==='точка'){ s+='<circle cx="150" cy="'+y+'" r="5" fill="#4f46e5"/><text x="160" y="'+(y-6)+'" font-size="13" font-weight="700" fill="#4f46e5">A</text>'; }
else if(type==='прямая'){ s+='<line x1="14" y1="'+y+'" x2="286" y2="'+y+'" stroke="#4f46e5" stroke-width="2.4"/><polygon points="14,'+y+' 22,'+(y-4)+' 22,'+(y+4)+'" fill="#4f46e5"/><polygon points="286,'+y+' 278,'+(y-4)+' 278,'+(y+4)+'" fill="#4f46e5"/>'; }
else if(type==='луч'){ s+='<line x1="60" y1="'+y+'" x2="286" y2="'+y+'" stroke="#0d9488" stroke-width="2.4"/><circle cx="60" cy="'+y+'" r="4.5" fill="#0d9488"/><polygon points="286,'+y+' 278,'+(y-4)+' 278,'+(y+4)+'" fill="#0d9488"/><text x="50" y="'+(y-8)+'" font-size="13" font-weight="700" fill="#0d9488">O</text>'; }
else { s+='<line x1="70" y1="'+y+'" x2="230" y2="'+y+'" stroke="#e11d48" stroke-width="2.6"/><circle cx="70" cy="'+y+'" r="4.5" fill="#e11d48"/><circle cx="230" cy="'+y+'" r="4.5" fill="#e11d48"/><text x="62" y="'+(y-8)+'" font-size="13" font-weight="700" fill="#e11d48">A</text><text x="224" y="'+(y-8)+'" font-size="13" font-weight="700" fill="#e11d48">B</text>'; }
return s+'</svg>';
}
(function(){
var T=['точка','прямая','луч','отрезок'];
var i=0,score=0,cur=null;
function gen(){ cur=_pick(T); }
function show(){ if(i>=5){ document.getElementById('p4-fig').innerHTML='<b>Готово! '+score+' / 5</b>'; if(score>=4){addXp(15,'p4-iv1');bumpProgress('p4',30);}else if(score>=2){addXp(8,'p4-iv1');bumpProgress('p4',16);} return; }
gen(); document.getElementById('p4-i').textContent=i+1;
document.getElementById('p4-fig').innerHTML=figSVG(cur);
document.getElementById('p4-fb').style.display='none'; }
function ans(f){ if(i>=5)return; var fb=document.getElementById('p4-fb');
if(f===cur){ score++; feedback(fb,true,'✓ Верно — это '+cur+'.'); } else feedback(fb,false,'✗ Нет. Это '+cur+'.');
document.getElementById('p4-s').textContent=score; i++; setTimeout(show,1100); }
document.querySelectorAll('#p4-iv1 [data-f]').forEach(function(b){ b.addEventListener('click',function(){ ans(b.getAttribute('data-f')); }); });
show();
})();
(function(){
var i=0,score=0,cur=null;
function gen(){ var n=_ri(3,6); cur={n:n, ans:n*(n-1)/2}; }
function show(){ if(i>=5){ document.getElementById('p4-cfig').innerHTML='<b>Готово! '+score+' / 5</b>'; document.getElementById('p4-cq')&&0; if(score>=4){addXp(15,'p4-iv2');bumpProgress('p4',30);}else if(score>=2){addXp(8,'p4-iv2');bumpProgress('p4',16);} return; }
gen(); document.getElementById('p4-ci').textContent=i+1;
var W=300,y=30,names=['A','B','C','D','E','F'],s='<svg viewBox="0 0 '+W+' 50" width="300" style="max-width:100%"><line x1="20" y1="'+y+'" x2="280" y2="'+y+'" stroke="#94a3b8" stroke-width="2"/>';
for(var k=0;k<cur.n;k++){ var x=20+260*k/(cur.n-1); s+='<circle cx="'+x+'" cy="'+y+'" r="4.5" fill="#4f46e5"/><text x="'+x+'" y="'+(y-9)+'" font-size="12" font-weight="700" fill="#4f46e5" text-anchor="middle">'+names[k]+'</text>'; }
s+='</svg>';
document.getElementById('p4-cfig').innerHTML=s;
document.getElementById('p4-ca').value=''; document.getElementById('p4-cfb').style.display='none'; }
function go(){ if(i>=5)return; var fb=document.getElementById('p4-cfb'), a=parseInt(document.getElementById('p4-ca').value,10);
if(isNaN(a)){ feedback(fb,false,'Введи число.'); return; }
if(a===cur.ans){ score++; feedback(fb,true,'✓ Верно! '+cur.n+' точки задают '+cur.ans+' отрезков.'); } else feedback(fb,false,'✗ Нет. Правильно: '+cur.ans+' (пары из '+cur.n+' точек).');
document.getElementById('p4-cs').textContent=score; i++; setTimeout(show,1300); }
document.getElementById('p4-cgo').addEventListener('click',go);
document.getElementById('p4-ca').addEventListener('keydown',function(e){ if(e.key==='Enter')go(); });
show();
})();
}
/* ===================== § 5. ИЗМЕРЕНИЕ ОТРЕЗКОВ. ДЛИНА ===================== */
function buildP5(){
var box=document.getElementById('p5-body'); var h='';
h+=makeCard('oral','Где это в жизни','5.0',
'<p>Длину измеряют каждый день: рост на медосмотре, размер стола, расстояние до школы, длину доски при ремонте. Чтобы понять друг друга, люди договорились о единых <b>единицах длины</b>.</p>');
h+=makeCard('rule','Единицы длины','5.1',
'<p>$1$ см $=10$ мм, &nbsp; $1$ дм $=10$ см, &nbsp; $1$ м $=10$ дм $=100$ см $=1000$ мм, &nbsp; $1$ км $=1000$ м.</p>'
+'<p><b>Длина отрезка</b> — это число, которое показывает, сколько раз в нём укладывается единичный отрезок (например, $1$ см). Равные отрезки имеют равные длины.</p>');
h+=makeCard('example','Примеры перевода','5.2',
'<p>$3$ см $=30$ мм. &nbsp; $250$ см $=2$ м $50$ см. &nbsp; $1$ м $7$ см $=107$ см.</p>');
h+=makeCard('example','Разбор по шагам','5.3',
'<p>Вырази $3$ м $5$ см в сантиметрах.</p>'
+'<ol style="padding-left:22px;line-height:2">'
+'<li>$1$ м $=100$ см, значит $3$ м $=300$ см.</li>'
+'<li>Добавляем оставшиеся $5$ см: $300+5$.</li>'
+'<li>Ответ: $3$ м $5$ см $=305$ см.</li>'
+'</ol>');
h+=makeCard('theory','А знаешь ли ты?','5.4',
'<p>Раньше длину мерили частями тела: локоть, ладонь, фут («ступня»). Но у всех они разные! Поэтому в $1799$ году ввели <b>метр</b>. Сегодня метр определяют через скорость света — это самый точный эталон длины в мире.</p>');
h+='<div class="wg" id="p5-iv1"><div class="wg-header"><span class="wg-badge">Интерактив 1</span><div class="wg-title">Измерь отрезок линейкой</div></div>'
+'<div class="wg-help">Посмотри, до какого деления линейки доходит цветной отрезок, и введи его длину в сантиметрах.</div>'
+'<div class="score-display"><span>Вопрос <b id="p5-i">1</b> / 5</span><span>Очки: <b id="p5-s">0</b> / 5</span></div>'
+'<div id="p5-fig" style="text-align:center;margin:8px 0;overflow-x:auto"></div>'
+'<div style="display:flex;gap:10px;justify-content:center;align-items:center;flex-wrap:wrap"><input type="number" id="p5-a" class="tinp" style="width:90px;text-align:center" min="0"><span>см</span><button class="btn primary" id="p5-go">Проверить</button></div>'
+'<div class="feedback" id="p5-fb"></div></div>';
h+='<div class="wg" id="p5-iv2"><div class="wg-header"><span class="wg-badge">Интерактив 2</span><div class="wg-title">Перевод единиц длины</div></div>'
+'<div class="wg-help">Вырази длину в указанных единицах. Ответ — число.</div>'
+'<div class="score-display"><span>Вопрос <b id="p5-ui">1</b> / 6</span><span>Очки: <b id="p5-us">0</b> / 6</span></div>'
+'<div id="p5-uq" class="qbox"></div>'
+'<div style="display:flex;gap:10px;justify-content:center;align-items:center;flex-wrap:wrap"><input type="number" id="p5-ua" class="tinp" style="width:110px;text-align:center"><button class="btn primary" id="p5-ugo">Проверить</button></div>'
+'<div class="feedback" id="p5-ufb"></div></div>';
h+=secNav('p4','p6')+readBtn('p5');
box.innerHTML=h; renderMath(box);
(function(){
var i=0,score=0,cur=null;
function gen(){ cur=_ri(2,14); }
function show(){ if(i>=5){ document.getElementById('p5-fig').innerHTML='<b>Готово! '+score+' / 5</b>'; if(score>=4){addXp(15,'p5-iv1');bumpProgress('p5',30);}else if(score>=2){addXp(8,'p5-iv1');bumpProgress('p5',16);} return; }
gen(); document.getElementById('p5-i').textContent=i+1;
var x0=20,unit=18,W=x0+15*unit+24,H=64,yr=44;
var s='<svg viewBox="0 0 '+W+' '+H+'" width="'+W+'" style="max-width:100%"><rect x="'+x0+'" y="'+yr+'" width="'+(15*unit)+'" height="16" fill="#fef3c7" stroke="#d97706"/>';
for(var k=0;k<=15;k++){ var x=x0+k*unit; s+='<line x1="'+x+'" y1="'+yr+'" x2="'+x+'" y2="'+(yr+(k%5===0?16:9))+'" stroke="#92400e" stroke-width="1"/>'; if(k%5===0)s+='<text x="'+x+'" y="'+(yr-3)+'" font-size="9" fill="#92400e" text-anchor="middle">'+k+'</text>'; }
s+='<line x1="'+x0+'" y1="32" x2="'+(x0+cur*unit)+'" y2="32" stroke="#4f46e5" stroke-width="5" stroke-linecap="round"/>';
s+='</svg>';
document.getElementById('p5-fig').innerHTML=s;
document.getElementById('p5-a').value=''; document.getElementById('p5-fb').style.display='none'; }
function go(){ if(i>=5)return; var fb=document.getElementById('p5-fb'), a=parseInt(document.getElementById('p5-a').value,10);
if(isNaN(a)){ feedback(fb,false,'Введи число.'); return; }
if(a===cur){ score++; feedback(fb,true,'✓ Верно! Длина '+cur+' см.'); } else feedback(fb,false,'✗ Нет. Отрезок доходит до '+cur+' см.');
document.getElementById('p5-s').textContent=score; i++; setTimeout(show,1200); }
document.getElementById('p5-go').addEventListener('click',go);
document.getElementById('p5-a').addEventListener('keydown',function(e){ if(e.key==='Enter')go(); });
show();
})();
(function(){
var i=0,score=0,cur=null;
function gen(){ var t=_ri(0,3),a;
if(t===0){ a=_ri(2,9); cur={q:a+'\\text{ см} = \\square \\text{ мм}',ans:a*10}; }
else if(t===1){ a=_ri(2,9); cur={q:a+'\\text{ м} = \\square \\text{ см}',ans:a*100}; }
else if(t===2){ var m=_ri(1,5),c=_ri(5,95); cur={q:m+'\\text{ м } '+c+'\\text{ см} = \\square \\text{ см}',ans:m*100+c}; }
else { a=_ri(2,9); cur={q:a+'\\text{ км} = \\square \\text{ м}',ans:a*1000}; } }
function show(){ if(i>=6){ document.getElementById('p5-uq').innerHTML='<b>Готово! '+score+' / 6</b>'; if(score>=5){addXp(15,'p5-iv2');bumpProgress('p5',30);}else if(score>=3){addXp(8,'p5-iv2');bumpProgress('p5',16);} return; }
gen(); document.getElementById('p5-ui').textContent=i+1;
document.getElementById('p5-uq').innerHTML='$'+cur.q+'$'; renderMath(document.getElementById('p5-uq'));
document.getElementById('p5-ua').value=''; document.getElementById('p5-ufb').style.display='none'; }
function go(){ if(i>=6)return; var fb=document.getElementById('p5-ufb'), a=parseInt(document.getElementById('p5-ua').value,10);
if(isNaN(a)){ feedback(fb,false,'Введи число.'); return; }
if(a===cur.ans){ score++; feedback(fb,true,'✓ Верно! Ответ '+cur.ans+'.'); } else feedback(fb,false,'✗ Нет. Правильно: '+cur.ans+'.');
document.getElementById('p5-us').textContent=score; i++; setTimeout(show,1200); }
document.getElementById('p5-ugo').addEventListener('click',go);
document.getElementById('p5-ua').addEventListener('keydown',function(e){ if(e.key==='Enter')go(); });
show();
})();
}
/* ===================== § 6. КООРДИНАТНЫЙ ЛУЧ ===================== */
function buildP6(){
var box=document.getElementById('p6-body'); var h='';
h+=makeCard('oral','Где это в жизни','6.0',
'<p>Линейка, шкала термометра, разметка на стадионе, числовая ось в играх-«ходилках» — всё это <b>координатные лучи</b>. Каждому числу соответствует своя точка, и наоборот.</p>');
h+=makeCard('theory','Что такое координатный луч','6.1',
'<p><b>Координатный луч</b> — это луч, на котором выбрали: начало $O$ (ему соответствует число $0$), <b>направление</b> (обычно вправо) и <b>единичный отрезок</b>.</p>'
+'<p>Число, соответствующее точке, называют её <b>координатой</b>. Запись $A(3)$ означает: точка $A$ имеет координату $3$.</p>');
h+=makeCard('rule','Как отметить число','6.2',
'<p>Чтобы отметить число $5$, откладывают от начала $O$ пять единичных отрезков вправо. Чем больше число — тем правее точка. Поэтому на луче из двух чисел больше то, что <b>правее</b>.</p>');
h+=makeCard('example','Разбор по шагам','6.3',
'<p>Отметим число $7$ на координатном луче с единичным отрезком в одну клетку.</p>'
+'<ol style="padding-left:22px;line-height:2">'
+'<li>Ставим начало $O$ и число $0$.</li>'
+'<li>Откладываем вправо $7$ единичных отрезков.</li>'
+'<li>В конце ставим точку и подписываем $A(7)$.</li>'
+'</ol>');
h+=makeCard('theory','А знаешь ли ты?','6.4',
'<p>Идею изображать числа точками на прямой развил французский математик <b>Рене Декарт</b> в XVII веке. Позже из координатного луча выросла целая координатная плоскость — её ты изучишь в $6$ классе.</p>');
h+='<div class="wg" id="p6-iv1"><div class="wg-header"><span class="wg-badge">Интерактив 1</span><div class="wg-title">Назови координату</div></div>'
+'<div class="wg-help">Какое число соответствует отмеченной точке?</div>'
+'<div class="score-display"><span>Вопрос <b id="p6-i">1</b> / 6</span><span>Очки: <b id="p6-s">0</b> / 6</span></div>'
+'<div id="p6-fig"></div>'
+'<div style="display:flex;gap:10px;justify-content:center;align-items:center;flex-wrap:wrap"><input type="number" id="p6-a" class="tinp" style="width:90px;text-align:center" min="0"><button class="btn primary" id="p6-go">Проверить</button></div>'
+'<div class="feedback" id="p6-fb"></div></div>';
h+='<div class="wg" id="p6-iv2"><div class="wg-header"><span class="wg-badge">Интерактив 2</span><div class="wg-title">Расстояние между точками</div></div>'
+'<div class="wg-help">На сколько единичных отрезков одна точка дальше другой?</div>'
+'<div class="score-display"><span>Вопрос <b id="p6-di">1</b> / 5</span><span>Очки: <b id="p6-ds">0</b> / 5</span></div>'
+'<div id="p6-dfig"></div>'
+'<div style="display:flex;gap:10px;justify-content:center;align-items:center;flex-wrap:wrap"><input type="number" id="p6-da" class="tinp" style="width:90px;text-align:center" min="0"><button class="btn primary" id="p6-dgo">Проверить</button></div>'
+'<div class="feedback" id="p6-dfb"></div></div>';
h+=secNav('p5','p7')+readBtn('p6');
box.innerHTML=h; renderMath(box);
(function(){
var i=0,score=0,cur=null;
function gen(){ cur=_ri(1,10); }
function show(){ if(i>=6){ document.getElementById('p6-fig').innerHTML=''; document.getElementById('p6-fb').className='feedback'; document.getElementById('p6-fb').style.display='block'; document.getElementById('p6-fb').innerHTML='<b>Готово! '+score+' / 6</b>'; if(score>=5){addXp(15,'p6-iv1');bumpProgress('p6',30);}else if(score>=3){addXp(8,'p6-iv1');bumpProgress('p6',16);} return; }
gen(); document.getElementById('p6-i').textContent=i+1;
document.getElementById('p6-fig').innerHTML=Math6.numberLine({min:0,max:11,minor:1,major:1,width:560,ray:true,marks:[{v:cur,label:'A',color:'#4f46e5'}]});
document.getElementById('p6-a').value=''; document.getElementById('p6-fb').style.display='none'; }
function go(){ if(i>=6)return; var fb=document.getElementById('p6-fb'), a=parseInt(document.getElementById('p6-a').value,10);
if(isNaN(a)){ feedback(fb,false,'Введи число.'); return; }
if(a===cur){ score++; feedback(fb,true,'✓ Верно! Координата точки A равна '+cur+'.'); } else feedback(fb,false,'✗ Нет. Координата A равна '+cur+'.');
document.getElementById('p6-s').textContent=score; i++; setTimeout(show,1100); }
document.getElementById('p6-go').addEventListener('click',go);
document.getElementById('p6-a').addEventListener('keydown',function(e){ if(e.key==='Enter')go(); });
show();
})();
(function(){
var i=0,score=0,cur=null;
function gen(){ var a=_ri(1,5), b=_ri(6,11); cur={a:a,b:b,d:b-a}; }
function show(){ if(i>=5){ document.getElementById('p6-dfig').innerHTML=''; var fb0=document.getElementById('p6-dfb'); fb0.className='feedback'; fb0.style.display='block'; fb0.innerHTML='<b>Готово! '+score+' / 5</b>'; if(score>=4){addXp(15,'p6-iv2');bumpProgress('p6',30);}else if(score>=2){addXp(8,'p6-iv2');bumpProgress('p6',16);} return; }
gen(); document.getElementById('p6-di').textContent=i+1;
document.getElementById('p6-dfig').innerHTML=Math6.numberLine({min:0,max:11,minor:1,major:1,width:560,ray:true,marks:[{v:cur.a,label:'A',color:'#4f46e5'},{v:cur.b,label:'B',color:'#e11d48',above:false}]});
document.getElementById('p6-da').value=''; document.getElementById('p6-dfb').style.display='none'; }
function go(){ if(i>=5)return; var fb=document.getElementById('p6-dfb'), a=parseInt(document.getElementById('p6-da').value,10);
if(isNaN(a)){ feedback(fb,false,'Введи число.'); return; }
if(a===cur.d){ score++; feedback(fb,true,'✓ Верно! Расстояние '+cur.d+' (от '+cur.a+' до '+cur.b+').'); } else feedback(fb,false,'✗ Нет. Расстояние '+cur.d+' = '+cur.b+' '+cur.a+'.');
document.getElementById('p6-ds').textContent=score; i++; setTimeout(show,1200); }
document.getElementById('p6-dgo').addEventListener('click',go);
document.getElementById('p6-da').addEventListener('keydown',function(e){ if(e.key==='Enter')go(); });
show();
})();
}
/* ===================== § 7. ОКРУГЛЕНИЕ НАТУРАЛЬНЫХ ЧИСЕЛ ===================== */
function buildP7(){
var box=document.getElementById('p7-body'); var h='';
h+=makeCard('oral','Где это в жизни','7.0',
'<p>Точные числа в новостях встречаются редко: говорят «около $8$ миллиардов человек», «примерно $300$ км до моря», «в зале почти $1000$ зрителей». Это <b>округлённые</b> числа — так их проще воспринимать и запоминать.</p>');
h+=makeCard('rule','Правило округления','7.1',
'<p>Чтобы округлить число до некоторого разряда, смотрят на <b>следующую</b> (младшую) цифру:</p>'
+'<ul style="padding-left:22px;line-height:1.9"><li>если она $0,1,2,3,4$ — разряд <b>оставляют</b>;</li>'
+'<li>если она $5,6,7,8,9$ — разряд <b>увеличивают на 1</b>.</li></ul>'
+'<p>Все цифры младших разрядов заменяют <b>нулями</b>. Знак приближённого равенства — $\\approx$.</p>');
h+=makeCard('example','Примеры','7.2',
'<p>$47\\approx 50$ (до десятков). &nbsp; $432\\approx 400$ (до сотен). &nbsp; $6\\,500\\approx 7\\,000$ (до тысяч).</p>');
h+=makeCard('example','Разбор по шагам','7.3',
'<p>Округлим $3\\,472$ до сотен.</p>'
+'<ol style="padding-left:22px;line-height:2">'
+'<li>Разряд сотен — цифра $4$ (в $3\\,\\underline{4}72$).</li>'
+'<li>Следующая цифра — десятки $7$. Так как $7\\ge 5$, сотни увеличиваем: $4\\to 5$.</li>'
+'<li>Младшие разряды — нули: $3\\,500$.</li>'
+'<li>Ответ: $3\\,472\\approx 3\\,500$.</li>'
+'</ol>');
h+=makeCard('theory','А знаешь ли ты?','7.4',
'<p>Округление помогает быстро <b>прикинуть</b> ответ и проверить себя. Если в магазине $19$ товаров примерно по $50$ копеек, то в уме: $20\\cdot 50=1000$ к. $=10$ руб. — значит, итог должен быть около $10$ рублей.</p>');
h+='<div class="wg" id="p7-iv1"><div class="wg-header"><span class="wg-badge">Интерактив 1</span><div class="wg-title">Округли до десятков</div></div>'
+'<div class="wg-help">Точка показывает число на луче. Округли его до ближайшего десятка.</div>'
+'<div class="score-display"><span>Вопрос <b id="p7-i">1</b> / 6</span><span>Очки: <b id="p7-s">0</b> / 6</span></div>'
+'<div id="p7-fig"></div>'
+'<div style="display:flex;gap:10px;justify-content:center;align-items:center;flex-wrap:wrap"><input type="number" id="p7-a" class="tinp" style="width:90px;text-align:center" min="0"><button class="btn primary" id="p7-go">Проверить</button></div>'
+'<div class="feedback" id="p7-fb"></div></div>';
h+='<div class="wg" id="p7-iv2"><div class="wg-header"><span class="wg-badge">Интерактив 2</span><div class="wg-title">Округли до разряда</div></div>'
+'<div class="wg-help">Округли большое число до указанного разряда.</div>'
+'<div class="score-display"><span>Вопрос <b id="p7-ri">1</b> / 6</span><span>Очки: <b id="p7-rs">0</b> / 6</span></div>'
+'<div id="p7-rq" class="qbox"></div>'
+'<div style="display:flex;gap:10px;justify-content:center;align-items:center;flex-wrap:wrap"><input type="number" id="p7-ra" class="tinp" style="width:120px;text-align:center"><button class="btn primary" id="p7-rgo">Проверить</button></div>'
+'<div class="feedback" id="p7-rfb"></div></div>';
h+=secNav('p6','p8')+readBtn('p7');
box.innerHTML=h; renderMath(box);
(function(){
var i=0,score=0,cur=null;
function gen(){ cur=_ri(11,89); }
function show(){ if(i>=6){ document.getElementById('p7-fig').innerHTML=''; var fb0=document.getElementById('p7-fb'); fb0.className='feedback'; fb0.style.display='block'; fb0.innerHTML='<b>Готово! '+score+' / 6</b>'; if(score>=5){addXp(15,'p7-iv1');bumpProgress('p7',30);}else if(score>=3){addXp(8,'p7-iv1');bumpProgress('p7',16);} return; }
gen(); document.getElementById('p7-i').textContent=i+1;
document.getElementById('p7-fig').innerHTML=Math6.numberLine({min:0,max:100,minor:10,major:10,width:560,marks:[{v:cur,label:''+cur,color:'#4f46e5'}]});
document.getElementById('p7-a').value=''; document.getElementById('p7-fb').style.display='none'; }
function go(){ if(i>=6)return; var fb=document.getElementById('p7-fb'), a=parseInt(document.getElementById('p7-a').value,10), correct=Math.round(cur/10)*10;
if(isNaN(a)){ feedback(fb,false,'Введи число.'); return; }
if(a===correct){ score++; feedback(fb,true,'✓ Верно! $'+cur+'\\approx '+correct+'$.'); renderMath(fb); } else { feedback(fb,false,'✗ Нет. $'+cur+'\\approx '+correct+'$.'); renderMath(fb); }
document.getElementById('p7-s').textContent=score; i++; setTimeout(show,1200); }
document.getElementById('p7-go').addEventListener('click',go);
document.getElementById('p7-a').addEventListener('keydown',function(e){ if(e.key==='Enter')go(); });
show();
})();
(function(){
var i=0,score=0,cur=null;
function gen(){ var t=_ri(0,1); if(t===0){ var n=_ri(1050,8950); cur={n:n,pl:'сотен',ans:Math.round(n/100)*100}; } else { var m=_ri(11500,98500); cur={n:m,pl:'тысяч',ans:Math.round(m/1000)*1000}; } }
function show(){ if(i>=6){ document.getElementById('p7-rq').innerHTML='<b>Готово! '+score+' / 6</b>'; if(score>=5){addXp(15,'p7-iv2');bumpProgress('p7',30);}else if(score>=3){addXp(8,'p7-iv2');bumpProgress('p7',16);} return; }
gen(); document.getElementById('p7-ri').textContent=i+1;
document.getElementById('p7-rq').innerHTML='Округли $'+_grp(cur.n)+'$ до <b>'+cur.pl+'</b>.'; renderMath(document.getElementById('p7-rq'));
document.getElementById('p7-ra').value=''; document.getElementById('p7-rfb').style.display='none'; }
function go(){ if(i>=6)return; var fb=document.getElementById('p7-rfb'), a=parseInt(document.getElementById('p7-ra').value,10);
if(isNaN(a)){ feedback(fb,false,'Введи число.'); return; }
if(a===cur.ans){ score++; feedback(fb,true,'✓ Верно! Ответ '+cur.ans+'.'); } else feedback(fb,false,'✗ Нет. Правильно: '+cur.ans+'.');
document.getElementById('p7-rs').textContent=score; i++; setTimeout(show,1200); }
document.getElementById('p7-rgo').addEventListener('click',go);
document.getElementById('p7-ra').addEventListener('keydown',function(e){ if(e.key==='Enter')go(); });
show();
})();
}
/* ===================== § 8. СЛОЖЕНИЕ И ВЫЧИТАНИЕ ===================== */
function buildP8(){
var box=document.getElementById('p8-body'); var h='';
h+=makeCard('oral','Где это в жизни','8.0',
'<p>Сложение и вычитание — самые частые действия: сложить стоимость покупок, посчитать сдачу, узнать, на сколько один город больше другого, сколько осталось денег после трат.</p>');
h+=makeCard('rule','Сложение и вычитание «в столбик»','8.1',
'<p>Числа записывают <b>разряд под разрядом</b> (единицы под единицами). Складывают справа налево; если в разряде получилось $10$ или больше — <b>переносят</b> единицу в следующий разряд.</p>'
+'<p>При вычитании, если цифр не хватает, <b>занимают</b> единицу у старшего разряда.</p>');
h+=makeCard('rule','Полезные свойства','8.2',
'<p><b>Переместительное:</b> $a+b=b+a$. &nbsp; <b>Сочетательное:</b> $(a+b)+c=a+(b+c)$.</p>'
+'<p>Ими удобно пользоваться для быстрого счёта: $37+99=37+100-1=136$.</p>');
h+=makeCard('example','Разбор по шагам','8.3',
'<p>Вычислим $3\\,472+1\\,859$.</p>'
+'<ol style="padding-left:22px;line-height:2">'
+'<li>Единицы: $2+9=11$ — пишем $1$, переносим $1$.</li>'
+'<li>Десятки: $7+5+1=13$ — пишем $3$, переносим $1$.</li>'
+'<li>Сотни: $4+8+1=13$ — пишем $3$, переносим $1$.</li>'
+'<li>Тысячи: $3+1+1=5$. Ответ: $5\\,331$.</li>'
+'</ol>');
h+=makeCard('theory','А знаешь ли ты?','8.4',
'<p>Знаки $+$ и $-$ впервые напечатал немецкий математик Иоганн Видман в $1489$ году в книге по торговым расчётам. До этого сложение писали словом «et» (по-латыни «и»).</p>');
h+='<div class="wg" id="p8-iv1"><div class="wg-header"><span class="wg-badge">Интерактив 1</span><div class="wg-title">Сложение и вычитание</div></div>'
+'<div class="wg-help">Вычисли значение выражения и введи ответ.</div>'
+'<div class="score-display"><span>Пример <b id="p8-i">1</b> / 6</span><span>Очки: <b id="p8-s">0</b> / 6</span></div>'
+'<div id="p8-q" class="qbox"></div>'
+'<div style="display:flex;gap:10px;justify-content:center;align-items:center;flex-wrap:wrap"><input type="number" id="p8-a" class="tinp" style="width:130px;text-align:center"><button class="btn primary" id="p8-go">Проверить</button></div>'
+'<div class="feedback" id="p8-fb"></div></div>';
h+='<div class="wg" id="p8-iv2"><div class="wg-header"><span class="wg-badge">Интерактив 2</span><div class="wg-title">Найди неизвестное</div></div>'
+'<div class="wg-help">Найди число, спрятанное под квадратом. Это подготовка к уравнениям!</div>'
+'<div class="score-display"><span>Вопрос <b id="p8-xi">1</b> / 5</span><span>Очки: <b id="p8-xs">0</b> / 5</span></div>'
+'<div id="p8-xq" class="qbox"></div>'
+'<div style="display:flex;gap:10px;justify-content:center;align-items:center;flex-wrap:wrap"><input type="number" id="p8-xa" class="tinp" style="width:110px;text-align:center"><button class="btn primary" id="p8-xgo">Проверить</button></div>'
+'<div class="feedback" id="p8-xfb"></div></div>';
h+=secNav('p7','p9')+readBtn('p8');
box.innerHTML=h; renderMath(box);
(function(){
var i=0,score=0,cur=null;
function gen(){ var a=_ri(150,4800), b=_ri(120,3900); if(_ri(0,1)===0)cur={t:'+',a:a,b:b,ans:a+b}; else { if(b>a){var x=a;a=b;b=x;} cur={t:'',a:a,b:b,ans:a-b}; } }
function show(){ if(i>=6){ document.getElementById('p8-q').innerHTML='<b>Готово! '+score+' / 6</b>'; if(score>=5){addXp(15,'p8-iv1');bumpProgress('p8',30);}else if(score>=3){addXp(8,'p8-iv1');bumpProgress('p8',16);} return; }
gen(); document.getElementById('p8-i').textContent=i+1;
document.getElementById('p8-q').innerHTML='$'+_grp(cur.a)+' '+cur.t+' '+_grp(cur.b)+'$'; renderMath(document.getElementById('p8-q'));
document.getElementById('p8-a').value=''; document.getElementById('p8-fb').style.display='none'; }
function go(){ if(i>=6)return; var fb=document.getElementById('p8-fb'), a=parseInt(document.getElementById('p8-a').value,10);
if(isNaN(a)){ feedback(fb,false,'Введи число.'); return; }
if(a===cur.ans){ score++; feedback(fb,true,'✓ Верно! Ответ '+cur.ans+'.'); } else feedback(fb,false,'✗ Нет. Правильно: '+cur.ans+'.');
document.getElementById('p8-s').textContent=score; i++; setTimeout(show,1200); }
document.getElementById('p8-go').addEventListener('click',go);
document.getElementById('p8-a').addEventListener('keydown',function(e){ if(e.key==='Enter')go(); });
show();
})();
(function(){
var i=0,score=0,cur=null;
function gen(){ var a=_ri(12,80), x=_ri(13,90); var t=_ri(0,2);
if(t===0)cur={q:'\\square + '+a+' = '+(a+x),ans:x};
else if(t===1)cur={q:a+' + \\square = '+(a+x),ans:x};
else cur={q:'\\square - '+a+' = '+x,ans:a+x}; }
function show(){ if(i>=5){ document.getElementById('p8-xq').innerHTML='<b>Готово! '+score+' / 5</b>'; if(score>=4){addXp(15,'p8-iv2');bumpProgress('p8',30);}else if(score>=2){addXp(8,'p8-iv2');bumpProgress('p8',16);} return; }
gen(); document.getElementById('p8-xi').textContent=i+1;
document.getElementById('p8-xq').innerHTML='$'+cur.q+'$'; renderMath(document.getElementById('p8-xq'));
document.getElementById('p8-xa').value=''; document.getElementById('p8-xfb').style.display='none'; }
function go(){ if(i>=5)return; var fb=document.getElementById('p8-xfb'), a=parseInt(document.getElementById('p8-xa').value,10);
if(isNaN(a)){ feedback(fb,false,'Введи число.'); return; }
if(a===cur.ans){ score++; feedback(fb,true,'✓ Верно! Под квадратом '+cur.ans+'.'); } else feedback(fb,false,'✗ Нет. Правильно: '+cur.ans+'.');
document.getElementById('p8-xs').textContent=score; i++; setTimeout(show,1200); }
document.getElementById('p8-xgo').addEventListener('click',go);
document.getElementById('p8-xa').addEventListener('keydown',function(e){ if(e.key==='Enter')go(); });
show();
})();
}
/* ===================== § 9. УМНОЖЕНИЕ И ДЕЛЕНИЕ ===================== */
function buildP9(){
var box=document.getElementById('p9-body'); var h='';
h+=makeCard('oral','Где это в жизни','9.0',
'<p>Умножение — это быстрое сложение одинаковых слагаемых: $6$ пачек по $8$ карандашей — это $6\\cdot 8=48$. Деление — обратное действие: $48$ карандашей разложить в $6$ пачек поровну — по $8$.</p>');
h+=makeCard('rule','Умножение и деление','9.1',
'<p><b>Умножение «в столбик»:</b> умножают на каждую цифру второго множителя, потом складывают со сдвигом.</p>'
+'<p><b>Деление «уголком»:</b> делят старшие разряды, сносят следующие цифры. Проверка: $\\text{частное}\\cdot\\text{делитель}=\\text{делимое}$.</p>'
+'<p><b>Свойства:</b> $a\\cdot b=b\\cdot a$; &nbsp; $a\\cdot(b+c)=a\\cdot b+a\\cdot c$ (распределительное).</p>');
h+=makeCard('example','Разбор по шагам','9.2',
'<p>Вычислим $156:12$.</p>'
+'<ol style="padding-left:22px;line-height:2">'
+'<li>$15$ десятков делим на $12$ — по $1$ десятку ($12$), остаток $3$ десятка.</li>'
+'<li>Сносим $6$: получаем $36$ единиц.</li>'
+'<li>$36:12=3$. Записываем рядом.</li>'
+'<li>Ответ: $156:12=13$. Проверка: $13\\cdot 12=156$.</li>'
+'</ol>');
h+=makeCard('theory','А знаешь ли ты?','9.3',
'<p>Знак умножения «крестиком» $\\times$ ввёл Уильям Отред в $1631$ году, а точку $\\cdot$ предложил Готфрид Лейбниц, чтобы крестик не путали с буквой $x$. Поэтому в алгебре чаще пишут точку.</p>');
h+='<div class="wg" id="p9-iv1"><div class="wg-header"><span class="wg-badge">Интерактив 1</span><div class="wg-title">Умножение как прямоугольник</div></div>'
+'<div class="wg-help">Точки выстроены в прямоугольник: $a$ строк по $b$ точек. Сколько всего?</div>'
+'<div class="score-display"><span>Вопрос <b id="p9-i">1</b> / 6</span><span>Очки: <b id="p9-s">0</b> / 6</span></div>'
+'<div id="p9-fig" style="text-align:center;margin:8px 0;overflow-x:auto"></div>'
+'<div style="display:flex;gap:10px;justify-content:center;align-items:center;flex-wrap:wrap"><input type="number" id="p9-a" class="tinp" style="width:90px;text-align:center"><button class="btn primary" id="p9-go">Проверить</button></div>'
+'<div class="feedback" id="p9-fb"></div></div>';
h+='<div class="wg" id="p9-iv2"><div class="wg-header"><span class="wg-badge">Интерактив 2</span><div class="wg-title">Умножай и дели</div></div>'
+'<div class="wg-help">Вычисли значение выражения.</div>'
+'<div class="score-display"><span>Пример <b id="p9-mi">1</b> / 6</span><span>Очки: <b id="p9-ms">0</b> / 6</span></div>'
+'<div id="p9-mq" class="qbox"></div>'
+'<div style="display:flex;gap:10px;justify-content:center;align-items:center;flex-wrap:wrap"><input type="number" id="p9-ma" class="tinp" style="width:120px;text-align:center"><button class="btn primary" id="p9-mgo">Проверить</button></div>'
+'<div class="feedback" id="p9-mfb"></div></div>';
h+=secNav('p8','p10')+readBtn('p9');
box.innerHTML=h; renderMath(box);
(function(){
var i=0,score=0,cur=null;
function arrSVG(a,b){ var u=16,x0=14,y0=12,W=x0*2+b*u,H=y0*2+a*u; var s='<svg viewBox="0 0 '+W+' '+H+'" width="'+Math.min(W,360)+'" style="max-width:100%">';
for(var r=0;r<a;r++)for(var c=0;c<b;c++){ s+='<circle cx="'+(x0+c*u)+'" cy="'+(y0+r*u)+'" r="4.5" fill="#4f46e5"/>'; } return s+'</svg>'; }
function gen(){ cur={a:_ri(2,9), b:_ri(2,9)}; cur.ans=cur.a*cur.b; }
function show(){ if(i>=6){ document.getElementById('p9-fig').innerHTML='<b>Готово! '+score+' / 6</b>'; if(score>=5){addXp(15,'p9-iv1');bumpProgress('p9',30);}else if(score>=3){addXp(8,'p9-iv1');bumpProgress('p9',16);} return; }
gen(); document.getElementById('p9-i').textContent=i+1;
document.getElementById('p9-fig').innerHTML=arrSVG(cur.a,cur.b)+'<div style="margin-top:4px;color:var(--muted);font-size:.9rem">'+cur.a+' строк × '+cur.b+' точек</div>';
document.getElementById('p9-a').value=''; document.getElementById('p9-fb').style.display='none'; }
function go(){ if(i>=6)return; var fb=document.getElementById('p9-fb'), a=parseInt(document.getElementById('p9-a').value,10);
if(isNaN(a)){ feedback(fb,false,'Введи число.'); return; }
if(a===cur.ans){ score++; feedback(fb,true,'✓ Верно! '+cur.a+'·'+cur.b+'='+cur.ans+'.'); } else feedback(fb,false,'✗ Нет. '+cur.a+'·'+cur.b+'='+cur.ans+'.');
document.getElementById('p9-s').textContent=score; i++; setTimeout(show,1200); }
document.getElementById('p9-go').addEventListener('click',go);
document.getElementById('p9-a').addEventListener('keydown',function(e){ if(e.key==='Enter')go(); });
show();
})();
(function(){
var i=0,score=0,cur=null;
function gen(){ if(_ri(0,1)===0){ var a=_ri(12,99),b=_ri(11,40); cur={q:a+' \\cdot '+b,ans:a*b}; } else { var q=_ri(11,40),d=_ri(2,12),n=q*d; cur={q:n+' : '+d,ans:q}; } }
function show(){ if(i>=6){ document.getElementById('p9-mq').innerHTML='<b>Готово! '+score+' / 6</b>'; if(score>=5){addXp(15,'p9-iv2');bumpProgress('p9',30);}else if(score>=3){addXp(8,'p9-iv2');bumpProgress('p9',16);} return; }
gen(); document.getElementById('p9-mi').textContent=i+1;
document.getElementById('p9-mq').innerHTML='$'+cur.q+'$'; renderMath(document.getElementById('p9-mq'));
document.getElementById('p9-ma').value=''; document.getElementById('p9-mfb').style.display='none'; }
function go(){ if(i>=6)return; var fb=document.getElementById('p9-mfb'), a=parseInt(document.getElementById('p9-ma').value,10);
if(isNaN(a)){ feedback(fb,false,'Введи число.'); return; }
if(a===cur.ans){ score++; feedback(fb,true,'✓ Верно! Ответ '+cur.ans+'.'); } else feedback(fb,false,'✗ Нет. Правильно: '+cur.ans+'.');
document.getElementById('p9-ms').textContent=score; i++; setTimeout(show,1200); }
document.getElementById('p9-mgo').addEventListener('click',go);
document.getElementById('p9-ma').addEventListener('keydown',function(e){ if(e.key==='Enter')go(); });
show();
})();
}
/* ===================== ДАННЫЕ САЙДБАРА / ГЛОССАРИЯ ===================== */
var SIDEBARS = {
p1:{ title:'Шпаргалка § 1', rows:[
['Шаг 1','понять условие: что дано, что найти'],
['Шаг 2','составить план действий'],
['Шаг 3','выполнить вычисления'],
['Шаг 4','проверить ответ'] ]},
p2:{ title:'Шпаргалка § 2', rows:[
['Натуральные','$1,2,3,\\dots$ — для счёта'],
['Нуль','не натуральное, но нужно в записи'],
['Класс','группа из 3 разрядов'],
['Классы','единицы, тысячи, миллионы…'] ]},
p3:{ title:'Шпаргалка § 3', rows:[
['Больше цифр','то число и больше: $1000>999$'],
['Поровну цифр','сравниваем поразрядно слева'],
['Знаки','$<$ меньше, $>$ больше, $=$ равно'],
['Острый угол','смотрит на меньшее число'] ]},
p4:{ title:'Шпаргалка § 4', rows:[
['Точка','нет размеров; $A$'],
['Прямая','бесконечна в обе стороны; $a$'],
['Луч','начало $O$ + бесконечность в одну сторону'],
['Отрезок','часть прямой между концами $AB$'],
['Через 2 точки','ровно одна прямая'] ]},
p5:{ title:'Шпаргалка § 5', rows:[
['1 см','$=10$ мм'],
['1 дм','$=10$ см'],
['1 м','$=100$ см $=1000$ мм'],
['1 км','$=1000$ м'] ]},
p6:{ title:'Шпаргалка § 6', rows:[
['Начало','$O$ — это число $0$'],
['Единичный отрезок','задаёт «шаг»'],
['Координата','число точки: $A(3)$'],
['Правее','значит больше'] ]},
p7:{ title:'Шпаргалка § 7', rows:[
['Смотрим','на следующую (младшую) цифру'],
['$<5$','разряд оставляем'],
['$\\ge 5$','разряд +1'],
['Младшие','заменяем нулями; знак $\\approx$'] ]},
p8:{ title:'Шпаргалка § 8', rows:[
['Столбик','разряд под разрядом'],
['$\\ge 10$','переносим в старший разряд'],
['Не хватает','занимаем у старшего'],
['$37+99$','$=37+100-1=136$'] ]},
p9:{ title:'Шпаргалка § 9', rows:[
['Умножение','быстрое сложение слагаемых'],
['Деление','обратно умножению'],
['Проверка','частное · делитель = делимое'],
['Распределит.','$a(b+c)=ab+ac$'] ]},
final:{ title:'Финал главы 1', rows:[
['5 боссов','разряды, округление, действия, степень'],
['Победа','4 из 5 и больше'],
['Награда','+40 XP и достижение «Глава 1 пройдена»'] ]}
};
var TIPS = [
{ sec:'p1', html:'Не бросайся считать сразу. Сначала спроси себя: «что дано?» и «что нужно найти?» — половина дела готова.' },
{ sec:'p2', html:'Разбивай длинное число на классы по три цифры справа: $12\\,345\\,678$. Так его легко прочитать.' },
{ sec:'p3', html:'Сначала глянь на длину записи: где цифр больше — то число и больше. Если поровну — сравнивай поразрядно слева направо.' },
{ sec:'p4', html:'Запоминай по концам: у отрезка два конца, у луча — один (его начало), у прямой — ни одного.' },
{ sec:'p5', html:'Переводя единицы, держи в голове «лесенку»: мм → см → дм → м, каждый шаг в 10 раз. От м до км — в 1000 раз.' },
{ sec:'p6', html:'Координата — это сколько единичных отрезков от нуля. Чем правее точка, тем больше её координата.' },
{ sec:'final', html:'Перед ударом прикинь ответ в уме. Для степени $a^n$ — это $a$, умноженное само на себя $n$ раз.' }
];
var GLOSSARY = [
{ term:'натуральное число', def:'Число, которым считают предметы: $1,2,3,\\dots$ Нуль натуральным не считают.', sec:'p2', aliases:['натуральное число','натуральные числа','натуральных чисел','натурального числа'] },
{ term:'разряд', def:'Место цифры в записи числа: единицы, десятки, сотни и т. д.', sec:'p2', aliases:['разряд','разряда','разряде','разряды','разрядов'] },
{ term:'класс', def:'Группа из трёх соседних разрядов: единицы, тысячи, миллионы.', sec:'p2', aliases:['класс','класса','классе','классы','классов'] }
];
var BUILDERS = { p1:buildP1, p2:buildP2, p3:buildP3, p4:buildP4, p5:buildP5, p6:buildP6, p7:buildP7, p8:buildP8, p9:buildP9, final:buildFinal };
Object.assign(window.M6, { sidebars:SIDEBARS, tips:TIPS, glossary:GLOSSARY, builders:BUILDERS });
</script>
</body>
</html>