'; }
+
+/* ===================== § 1. ПОЛОЖИТЕЛЬНЫЕ И ОТРИЦАТЕЛЬНЫЕ. КООРДИНАТНАЯ ПРЯМАЯ ===================== */
+function buildP1(){
+ var box=document.getElementById('p1-body'); var h='';
+ h+=makeCard('theory','Числа со знаком','1.1',
+ '
Числа бывают положительные ($+3$, или просто $3$), отрицательные ($-3$) и ноль (не положителен и не отрицателен). Отрицательными измеряют температуру ниже нуля, долги, глубину.
Координатная прямая — прямая с началом $O$ (точка $0$), положительным направлением (вправо) и единичным отрезком. Положительные числа — справа от нуля, отрицательные — слева.
'
+ +'
Каждому числу соответствует точка, и наоборот; это его координата.
');
+ h+='
Интерактив 1
Прочитай координату
'
+ +'
Определи координату отмеченной точки (может быть отрицательной).
'
+ +'
Вопрос 1 / 6Очки: 0 / 6
'
+ +''
+ +''
+ +'
';
+ h+='
Интерактив 2
Положительное, отрицательное или ноль?
'
+ +'
Определи знак числа.
'
+ +'
Вопрос 1 / 6Очки: 0 / 6
'
+ +''
+ +''
+ +'
';
+ h+=secNav(null,'p2')+readBtn('p1');
+ box.innerHTML=h; renderMath(box);
+
+ (function(){
+ var i=0,score=0,cur=0;
+ function show(){ if(i>=6){ document.getElementById('p1-fig').innerHTML='Готово! '+score+' / 6'; if(score>=5){addXp(15,'p1-iv1');bumpProgress('p1',30);}else if(score>=3){addXp(8,'p1-iv1');bumpProgress('p1',16);} return; }
+ cur=_ri(-6,6); document.getElementById('p1-i').textContent=i+1;
+ document.getElementById('p1-fig').innerHTML=Math6.numberLine({min:-7,max:7,minor:1,major:1,width:580,marks:[{v:cur,label:'?',color:'#e11d48'}]});
+ document.getElementById('p1-a').value=''; document.getElementById('p1-fb').style.display='none'; }
+ function go(){ if(i>=6)return; var fb=document.getElementById('p1-fb'), v=parseInt(document.getElementById('p1-a').value,10);
+ if(isNaN(v)){ feedback(fb,false,'Введи число (можно со знаком −).'); return; }
+ if(v===cur){ score++; feedback(fb,true,'✓ Верно: '+cur+'.'); } else feedback(fb,false,'✗ Нет. Координата: '+cur+'.');
+ document.getElementById('p1-s').textContent=score; i++; setTimeout(show,1200); }
+ document.getElementById('p1-go').addEventListener('click',go);
+ document.getElementById('p1-a').addEventListener('keydown',function(e){ if(e.key==='Enter')go(); }); show();
+ })();
+
+ (function(){
+ var i=0,score=0,cur=null;
+ function gen(){ var v=_ri(-9,9); cur={v:v, k:v>0?'p':(v<0?'n':'z')}; }
+ function show(){ if(i>=6){ document.getElementById('p1-cq').innerHTML='Готово! '+score+' / 6'; if(score>=5){addXp(15,'p1-iv2');bumpProgress('p1',30);}else if(score>=3){addXp(8,'p1-iv2');bumpProgress('p1',16);} return; }
+ gen(); document.getElementById('p1-ci').textContent=i+1; document.getElementById('p1-cq').innerHTML='Число $'+cur.v+'$ — какое?'; renderMath(document.getElementById('p1-cq'));
+ document.getElementById('p1-cfb').style.display='none'; }
+ function ans(k){ if(i>=6)return; var fb=document.getElementById('p1-cfb'), nm={p:'положительное',n:'отрицательное',z:'ноль'};
+ if(k===cur.k){ score++; feedback(fb,true,'✓ Верно — '+nm[cur.k]+'.'); } else feedback(fb,false,'✗ Нет. $'+cur.v+'$ — '+nm[cur.k]+'.');
+ document.getElementById('p1-cs').textContent=score; i++; setTimeout(show,1200); }
+ document.querySelectorAll('#p1-iv2 [data-v]').forEach(function(b){ b.addEventListener('click',function(){ ans(b.getAttribute('data-v')); }); }); show();
+ })();
+}
+
+/* ===================== § 2. МОДУЛЬ. ПРОТИВОПОЛОЖНЫЕ. Z И Q ===================== */
+function buildP2(){
+ var box=document.getElementById('p2-body'); var h='';
+ h+=makeCard('theory','Модуль и противоположные числа','2.1',
+ '
Модуль числа $|a|$ — это расстояние от точки $a$ до нуля; он всегда $\\ge 0$: $|{-7}|=7$, $|5|=5$, $|0|=0$.
'
+ +'
Противоположные числа отличаются только знаком ($5$ и $-5$); их сумма равна нулю, а модули равны.
');
+ h+=makeCard('theory','Множества чисел: N ⊂ Z ⊂ Q','2.2',
+ '
Натуральные $\\mathbb{N}=\\{1;2;3;\\ldots\\}$ — для счёта. Целые $\\mathbb{Z}$ — натуральные, им противоположные и ноль. Рациональные $\\mathbb{Q}$ — все числа, представимые дробью $\\frac{m}{n}$ (включая десятичные и отрицательные).
Из двух чисел больше то, которое правее на координатной прямой.
'
+ +'
Любое положительное $>$ любого отрицательного; $0$ больше любого отрицательного. Из двух отрицательных больше то, у которого меньше модуль (ближе к нулю): $-2 > -5$.
Делят модули, а знак — по тому же правилу, что и при умножении: одинаковые знаки дают $+$, разные — $-$.
'
+ +'
$-12\\div(-3)=4$, $-12\\div 3=-4$, $12\\div(-4)=-3$. На ноль делить нельзя.
');
+ h+='
Интерактив 1
Тренажёр деления
'
+ +'
Раздели рациональные числа (деление нацело).
'
+ +'
Пример 1 / 6Очки: 0 / 6
'
+ +''
+ +''
+ +'
';
+ h+='
Интерактив 2
Какой знак результата?
'
+ +'
Определи знак частного, не вычисляя значение.
'
+ +'
Вопрос 1 / 5Очки: 0 / 5
'
+ +''
+ +''
+ +'
';
+ h+=secNav('p7','p9')+readBtn('p8');
+ box.innerHTML=h; renderMath(box);
+
+ (function(){
+ var i=0,score=0,cur=null;
+ function gen(){ var q=_nz(-9,9), b=_nz(-6,6); cur={a:q*b,b:b,q:q}; }
+ function show(){ if(i>=6){ document.getElementById('p8-q').innerHTML='Готово! '+score+' / 6'; 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='Вычисли $'+_par(cur.a)+' \\div '+_par(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'), v=parseInt(document.getElementById('p8-a').value,10);
+ if(isNaN(v)){ feedback(fb,false,'Введи число.'); return; }
+ if(v===cur.q){ score++; feedback(fb,true,'✓ Верно: '+cur.q+'.'); } else feedback(fb,false,'✗ Нет. $'+_par(cur.a)+'\\div'+_par(cur.b)+'='+cur.q+'$.');
+ 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=_nz(-9,9), b=_nz(-9,9); cur={a:a,b:b,z:(a*b>0)?'+':'-'}; }
+ function show(){ if(i>=5){ document.getElementById('p8-zq').innerHTML='Готово! '+score+' / 5'; 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-zi').textContent=i+1; document.getElementById('p8-zq').innerHTML='Какой знак у $'+_par(cur.a)+' \\div '+_par(cur.b)+'$?'; renderMath(document.getElementById('p8-zq'));
+ document.getElementById('p8-zfb').style.display='none'; }
+ function ans(z){ if(i>=5)return; var fb=document.getElementById('p8-zfb');
+ if(z===cur.z){ score++; feedback(fb,true,'✓ Верно — '+(cur.z==='+'?'положительный':'отрицательный')+'.'); } else feedback(fb,false,'✗ Нет. Знак '+(cur.z==='+'?'положительный':'отрицательный')+'.');
+ document.getElementById('p8-zs').textContent=score; i++; setTimeout(show,1200); }
+ document.querySelectorAll('#p8-iv2 [data-z]').forEach(function(b){ b.addEventListener('click',function(){ ans(b.getAttribute('data-z')); }); }); show();
+ })();
+}
+
+/* ===================== § 9. ЗАДАЧИ НА ВСЕ ДЕЙСТВИЯ ===================== */
+function buildP9(){
+ var box=document.getElementById('p9-body'); var h='';
+ h+=makeCard('rule','Порядок действий со знаками','9.1',
+ '
Сначала действия в скобках, затем умножение и деление, потом сложение и вычитание. Внимательно следи за знаками.
'
+ +'
$-3 + 4\\cdot(-2) = -3 + (-8) = -11$.
');
+ h+='
Интерактив 1
Вычисли выражение
'
+ +'
Соблюдай порядок действий и правила знаков.
'
+ +'
Пример 1 / 6Очки: 0 / 6
'
+ +''
+ +''
+ +'
';
+ h+=secNav('p8','app')+readBtn('p9');
+ box.innerHTML=h; renderMath(box);
+
+ (function(){
+ var P=[['-3 + 4\\cdot(-2)',-11],['(-5+2)\\cdot 3',-9],['10 - 3\\cdot 4',-2],['-2\\cdot(-3) + 1',7],['(-8)\\div 2 - 1',-5],['-1 - (-6)',5],['5\\cdot(-2) + 12',2],['(-4)\\cdot 2 + (-3)',-11],['(-12)\\div(-4) - 5',-2],['6 + (-2)\\cdot 5',-4]];
+ var order=P.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;}
+ var i=0,score=0,cur=null;
+ function show(){ if(i>=6){ document.getElementById('p9-q').innerHTML='Готово! '+score+' / 6'; if(score>=5){addXp(20,'p9-iv1');bumpProgress('p9',50);}else if(score>=3){addXp(10,'p9-iv1');bumpProgress('p9',26);} return; }
+ cur=P[order[i]]; document.getElementById('p9-i').textContent=i+1; document.getElementById('p9-q').innerHTML='Вычисли $'+cur[0]+'$'; renderMath(document.getElementById('p9-q'));
+ document.getElementById('p9-a').value=''; document.getElementById('p9-fb').style.display='none'; }
+ function go(){ if(i>=6)return; var fb=document.getElementById('p9-fb'), v=parseInt(document.getElementById('p9-a').value,10);
+ if(isNaN(v)){ feedback(fb,false,'Введи число.'); return; }
+ if(v===cur[1]){ score++; feedback(fb,true,'✓ Верно: '+cur[1]+'.'); } else feedback(fb,false,'✗ Нет. Правильно: '+cur[1]+'.');
+ document.getElementById('p9-s').textContent=score; i++; setTimeout(show,1300); }
+ document.getElementById('p9-go').addEventListener('click',go);
+ document.getElementById('p9-a').addEventListener('keydown',function(e){ if(e.key==='Enter')go(); }); show();
+ })();
+}
+
+/* ===================== § 11. МАТЕМАТИКА ВОКРУГ НАС ===================== */
+function buildApp(){
+ var box=document.getElementById('app-body'); var h='';
+ h+=makeCard('theory','Отрицательные числа вокруг нас','11.1',
+ '
Температура ниже нуля, долги и доходы, высота над уровнем моря и глубина, координаты в играх и на карте — всюду нужны отрицательные числа.
');
+ h+='
Интерактив 1
Задачи из жизни
'
+ +'
Реши практическую задачу. Ответ — целое число (можно со знаком −).
'
+ +'
Задача 1 / 6Очки: 0 / 6
'
+ +''
+ +''
+ +'
';
+ h+=secNav('p9','final')+readBtn('app');
+ box.innerHTML=h; renderMath(box);
+
+ (function(){
+ var P=[
+ {q:'Утром было −5°, днём потеплело на 8°. Какая температура стала (°C)?',a:3},
+ {q:'Температура −3° понизилась ещё на 6°. Сколько стало (°C)?',a:-9},
+ {q:'На счёте было 200 руб., сняли долг 250 руб. Сколько на счёте (руб.)?',a:-50},
+ {q:'Подводная лодка на глубине −80 м поднялась на 30 м. На какой глубине теперь (м)?',a:-50},
+ {q:'Игрок имел −15 очков и заработал 40. Сколько очков стало?',a:25},
+ {q:'Температура поднялась с −7° до 5°. На сколько градусов потеплело?',a:12},
+ {q:'Лифт с −2 этажа поднялся на 7 этажей. На каком этаже он теперь?',a:5}
+ ];
+ var order=P.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;}
+ var i=0,score=0,cur=null;
+ function show(){ if(i>=6){ document.getElementById('app-q').innerHTML='Готово! '+score+' / 6'; if(score>=5){addXp(15,'app-iv1');bumpProgress('app',35);}else if(score>=3){addXp(8,'app-iv1');bumpProgress('app',18);} return; }
+ cur=P[order[i]]; document.getElementById('app-i').textContent=i+1; document.getElementById('app-q').innerHTML=cur.q;
+ document.getElementById('app-a').value=''; document.getElementById('app-fb').style.display='none'; }
+ function go(){ if(i>=6)return; var fb=document.getElementById('app-fb'), v=parseInt(document.getElementById('app-a').value,10);
+ 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('app-s').textContent=score; i++; setTimeout(show,1300); }
+ document.getElementById('app-go').addEventListener('click',go);
+ document.getElementById('app-a').addEventListener('keydown',function(e){ if(e.key==='Enter')go(); }); show();
+ })();
+}
+
+/* ===================== ФИНАЛ ГЛАВЫ — БОССЫ ===================== */
+function buildFinal(){
+ var box=document.getElementById('final-body'); var h='';
+ h+=makeCard('theory','Финал главы 4','★','
Шесть боссов проверят модуль, сравнение и все действия с рациональными числами. Победи всех!
');
+ h+='
Боссы
Сразись с главой 4
'
+ +'
'
+ +'
Босс 1 / 6Побеждено: 0 / 6
'
+ +''
+ +''
+ +''
+ +'
';
+ h+=secNav('app',null)+readBtn('final','Завершить главу 4 (+10 XP)');
+ box.innerHTML=h; renderMath(box);
+
+ (function(){
+ var bosses=[
+ function(){ var v=_nz(-15,15); return {name:'Модуль', q:'Вычисли $|'+v+'|$.', ans:Math.abs(v)}; },
+ function(){ var a=_nz(-12,12),b=_nz(-12,12); return {name:'Сумматор', q:'Вычисли $'+a+' + '+_par(b)+'$.', ans:a+b}; },
+ function(){ var a=_ri(-10,10),b=_nz(-10,10); return {name:'Вычитатель', q:'Вычисли $'+a+' - '+_par(b)+'$.', ans:a-b}; },
+ function(){ var a=_nz(-9,9),b=_nz(-9,9); return {name:'Множитель', q:'Вычисли $'+_par(a)+' \\cdot '+_par(b)+'$.', ans:a*b}; },
+ function(){ var q=_nz(-9,9),b=_nz(-6,6); return {name:'Делитель', q:'Вычисли $'+_par(q*b)+' \\div '+_par(b)+'$.', ans:q}; },
+ function(){ var e=_pick([['-3 + 4\\cdot(-2)',-11],['(-5+2)\\cdot 3',-9],['-2\\cdot(-3)+1',7],['(-12)\\div(-4)-5',-2]]); return {name:'Порядок Действий', q:'Вычисли $'+e[0]+'$.', ans:e[1]}; }
+ ];
+ var i=0,score=0,cur=null,done=false,N=6;
+ function show(){ if(i>=N){ done=true; document.getElementById('fin-name').textContent=''; document.getElementById('fin-q').innerHTML=(score>=5?'Победа! Глава 4 пройдена. ':'Бой окончен. ')+'Побеждено боссов: '+score+' / '+N+'.'; document.getElementById('fin-hp').style.width=(score>=5?0:40)+'%';
+ if(score>=5){ 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*100/N)+'%';
+ 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>=N)return; var fb=document.getElementById('fin-fb'), v=parseInt(document.getElementById('fin-a').value,10);
+ if(isNaN(v)){ feedback(fb,false,'Введи число.'); return; }
+ if(v===cur.ans){ 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();
+ })();
+}
+
+/* ===================== ДАННЫЕ ===================== */
+var SIDEBARS = {
+ p1:{ title:'Шпаргалка § 1', rows:[ ['Положительные','справа от 0'], ['Отрицательные','слева от 0'], ['Ноль','ни +, ни −'], ['Координата','число точки на прямой'] ]},
+ p2:{ title:'Шпаргалка § 2', rows:[ ['Модуль $|a|$','расстояние до 0, $\\ge0$'], ['$|{-7}|$','$=7$'], ['Противоположные','$a$ и $-a$, сумма $0$'], ['$\\mathbb{N}\\subset\\mathbb{Z}\\subset\\mathbb{Q}$','натур. ⊂ целые ⊂ рацион.'] ]},
+ p3:{ title:'Шпаргалка § 3', rows:[ ['Больше','то, что правее'], ['$+ > -$','любое полож. > любого отриц.'], ['Два отрицат.','больше с меньшим модулем'], ['$-2 > -5$','ближе к нулю'] ]},
+ p4:{ title:'Шпаргалка § 4', rows:[ ['Одинаковые знаки','складываем модули, знак тот же'], ['Разные знаки','модули вычитаем, знак большего'], ['$a+(-a)$','$=0$'] ]},
+ p5:{ title:'Шпаргалка § 5', rows:[ ['Вычитание','$a-b=a+(-b)$'], ['$5-8$','$=5+(-8)=-3$'], ['$2-(-6)$','$=2+6=8$'] ]},
+ p6:{ title:'Шпаргалка § 6', rows:[ ['Переместительный','$a+b=b+a$'], ['Сочетательный','$(a+b)+c=a+(b+c)$'], ['Удобно','группируем противоположные'] ]},
+ p7:{ title:'Шпаргалка § 7', rows:[ ['$(-)\\cdot(-)$','$=+$'], ['$(+)\\cdot(-)$','$=-$'], ['Модули','перемножаем'], ['$\\cdot 0$','$=0$'] ]},
+ p8:{ title:'Шпаргалка § 8', rows:[ ['Знаки','как при умножении'], ['$(-)\\div(-)$','$=+$'], ['$(+)\\div(-)$','$=-$'], ['На 0','делить нельзя'] ]},
+ p9:{ title:'Шпаргалка § 9', rows:[ ['Порядок','скобки → ×÷ → +−'], ['Знаки','следим внимательно'], ['$-3+4\\cdot(-2)$','$=-11$'] ]},
+ app:{ title:'Шпаргалка § 11', rows:[ ['Потеплело','прибавляем'], ['Похолодало','вычитаем'], ['Долг','отрицательное число'], ['Глубина','со знаком −'] ]},
+ final:{ title:'Финал главы 4', rows:[ ['6 боссов','модуль, сравнение, все действия'], ['Победа','5 из 6 и больше'], ['Награда','+40 XP и достижение «Глава 4 пройдена»'] ]}
+};
+var TIPS = [
+ { sec:'p1', html:'Отрицательные числа левее нуля. Чем левее число, тем оно меньше: $-6$ меньше, чем $-1$.' },
+ { sec:'p2', html:'Модуль «снимает» знак: $|{-7}|=7$. Противоположное — меняет знак: для $-7$ это $7$.' },
+ { sec:'p3', html:'На прямой больше то, что правее. Из двух отрицательных больше то, что ближе к нулю (меньше по модулю).' },
+ { sec:'p4', html:'Сначала реши: знаки одинаковые (складываем модули) или разные (вычитаем меньший модуль из большего, знак — от большего).' },
+ { sec:'p5', html:'Любое вычитание превращай в сложение: $a-b=a+(-b)$. Дальше работают правила сложения.' },
+ { sec:'p6', html:'Ищи пары противоположных чисел ($-7$ и $7$) — их сумма ноль; складывай их первыми, остальное проще.' },
+ { sec:'p7', html:'Сначала перемножь модули, потом поставь знак: одинаковые знаки — плюс, разные — минус. «Минус на минус — плюс».' },
+ { sec:'p8', html:'Деление по тем же правилам знаков, что умножение. Сначала найди знак, потом раздели модули.' },
+ { sec:'p9', html:'Порядок: скобки, потом умножение/деление, потом сложение/вычитание. Каждый шаг следи за знаком.' }
+];
+var GLOSSARY = [
+ { term:'отрицательное число', def:'Число меньше нуля, со знаком минус ($-3$).', sec:'p1', aliases:['отрицательное число','отрицательные числа','отрицательных чисел','отрицательным'] },
+ { term:'координатная прямая', def:'Прямая с началом, направлением и единичным отрезком.', sec:'p1', aliases:['координатная прямая','координатной прямой','координатную прямую'] },
+ { term:'модуль', def:'Расстояние от числа до нуля, $|a|\\ge0$.', sec:'p2', aliases:['модуль','модуля','модуле','модулем','модулю'] },
+ { term:'противоположные числа', def:'Числа, отличающиеся только знаком ($a$ и $-a$); их сумма ноль.', sec:'p2', aliases:['противоположные числа','противоположное число','противоположных чисел','противоположное'] },
+ { term:'целые числа', def:'Натуральные, противоположные им и ноль: $\\mathbb{Z}$.', sec:'p2', aliases:['целые числа','целых чисел','целое число'] },
+ { term:'рациональные числа', def:'Числа, представимые дробью $\\frac{m}{n}$ (включая отрицательные): $\\mathbb{Q}$.', sec:'p2', aliases:['рациональные числа','рациональных чисел','рациональное число'] }
+];
+var BUILDERS = { p1:buildP1, p2:buildP2, p3:buildP3, p4:buildP4, p5:buildP5, p6:buildP6, p7:buildP7, p8:buildP8, p9:buildP9, app:buildApp, final:buildFinal };
+Object.assign(window.M6, { sidebars:SIDEBARS, tips:TIPS, glossary:GLOSSARY, builders:BUILDERS });