diff --git a/backend/tests/math6-page.test.js b/backend/tests/math6-page.test.js
index d2fcb6f..5a69251 100644
--- a/backend/tests/math6-page.test.js
+++ b/backend/tests/math6-page.test.js
@@ -104,6 +104,23 @@ test('ch1 Волна 2: интерактивы §4–§6 монтируются
assert.deepEqual(errors, [], 'нет ошибок: ' + errors.join(' | '));
});
+test('ch1 Волна 3: интерактивы §7–§10 монтируются без ошибок', async () => {
+ const { doc, errors } = await loadDom('math_6_ch1.html');
+ const win = doc.defaultView;
+ win.goTo('p7'); await wait(80);
+ assert.ok(doc.querySelector('#p7-q') && doc.querySelector('#p7-rq'), 'тренажёры деления §7');
+ win.goTo('p8'); await wait(80);
+ assert.ok(doc.querySelector('#p8-pick [data-k]'), 'выбор примеров §8');
+ assert.ok(doc.querySelector('#p8-out').textContent.indexOf('=') >= 0, 'демонстратор переноса запятой §8');
+ win.goTo('p9'); await wait(80);
+ assert.ok(doc.querySelector('#p9-iv1 [data-fin]'), 'классификатор §9');
+ assert.ok(doc.querySelectorAll('#p9-dopts [data-o]').length === 3, 'варианты десятичной §9');
+ win.goTo('p10'); await wait(80);
+ assert.ok(doc.querySelectorAll('#p10-pool .dnd-chip').length === 5, 'сопоставление дробей §10');
+ assert.ok(doc.querySelector('#p10-q'), 'выражения §10');
+ assert.deepEqual(errors, [], 'нет ошибок: ' + errors.join(' | '));
+});
+
test('навигация и прогресс: переход на § и отметка прочтения', async () => {
const { doc, errors } = await loadDom('math_6_ch1.html');
const win = doc.defaultView;
diff --git a/frontend/textbooks/math_6_ch1.html b/frontend/textbooks/math_6_ch1.html
index f230504..0cbcb50 100644
--- a/frontend/textbooks/math_6_ch1.html
+++ b/frontend/textbooks/math_6_ch1.html
@@ -494,6 +494,228 @@ function buildP6(){
})();
}
+/* ===================== § 7. ДЕЛЕНИЕ НА НАТУРАЛЬНОЕ ЧИСЛО ===================== */
+function _gcd(a,b){ a=Math.abs(a);b=Math.abs(b); while(b){ var t=b; b=a%b; a=t; } return a||1; }
+function _finite(p,q){ var g=_gcd(p,q); q=q/g; while(q%2===0)q/=2; while(q%5===0)q/=5; return q===1; }
+function _fracDec(p,q){ var ip=Math.floor(p/q), rem=p%q; if(rem===0)return String(ip); var dg='',seen={},pos=0,ps=-1;
+ while(rem!==0){ if(seen[rem]!==undefined){ ps=seen[rem]; break; } seen[rem]=pos; rem*=10; dg+=Math.floor(rem/q); rem%=q; pos++; }
+ if(rem===0) return ip+','+dg; return ip+','+dg.slice(0,ps)+'('+dg.slice(ps)+')'; }
+function buildP7(){
+ var box=document.getElementById('p7-body'); var h='';
+ h+=makeCard('rule','Деление десятичной дроби на натуральное число','7.1',
+ '
Делят «уголком», как натуральные числа. Как только заканчивается целая часть делимого, в частном ставят запятую и продолжают деление.
'
+ +'Если делимое меньше делителя, целая часть частного равна $0$. Если деление «не заканчивается» — дописывают нули к делимому.
');
+ h+=makeCard('example','Примеры','7.2',
+ '$7{,}2 \\div 3 = 2{,}4$ · $1 \\div 4 = 0{,}25$ · $9{,}6 \\div 8 = 1{,}2$
');
+ h+=''
+ +'
Раздели десятичную дробь на натуральное число. Ответ — десятичная дробь.
'
+ +'
Пример 1 / 6 Очки: 0 / 6
'
+ +'
'
+ +'
Проверить
'
+ +'
';
+ h+=''
+ +'
Известны частное и делитель. Найди делимое (проверка делением наоборот).
'
+ +'
Пример 1 / 5 Очки: 0 / 5
'
+ +'
'
+ +'
Проверить
'
+ +'
';
+ h+=secNav('p6','p8')+readBtn('p7');
+ box.innerHTML=h; renderMath(box);
+
+ (function(){
+ var i=0,score=0,cur=null;
+ function gen(){ var r=_rnum(_pick([1,1,2])), n=_ri(2,9), dr=_dec(r), a=_mant(r,dr)*n/Math.pow(10,dr); cur={a:a,n:n,r:r}; }
+ function show(){ if(i>=6){ document.getElementById('p7-q').innerHTML='Готово! Результат: '+score+' / 6'; 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-q').innerHTML='Вычисли $'+_kf(cur.a)+' \\div '+cur.n+'$'; renderMath(document.getElementById('p7-q'));
+ document.getElementById('p7-a').value=''; document.getElementById('p7-fb').style.display='none'; }
+ function go(){ if(i>=6)return; var fb=document.getElementById('p7-fb'), v=parseFloat(document.getElementById('p7-a').value.replace(',','.').trim());
+ if(isNaN(v)){ feedback(fb,false,'Введи число.'); return; }
+ if(Math.abs(v-cur.r)<1e-9){ score++; feedback(fb,true,'✓ Верно: $'+_kf(cur.r)+'$.'); } else feedback(fb,false,'✗ Нет. Правильно: $'+_kf(cur.r)+'$.');
+ 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 r=_rnum(_pick([1,2])), n=_ri(2,9), dr=_dec(r), a=_mant(r,dr)*n/Math.pow(10,dr); cur={a:a,n:n,r:r}; }
+ function show(){ if(i>=5){ document.getElementById('p7-rq').innerHTML='Готово! Результат: '+score+' / 5'; if(score>=4){addXp(15,'p7-iv2');bumpProgress('p7',30);}else if(score>=2){addXp(8,'p7-iv2');bumpProgress('p7',16);} return; }
+ gen(); document.getElementById('p7-ri').textContent=i+1;
+ document.getElementById('p7-rq').innerHTML='Частное $'+_kf(cur.r)+'$, делитель $'+cur.n+'$. Чему равно делимое?'; renderMath(document.getElementById('p7-rq'));
+ document.getElementById('p7-ra').value=''; document.getElementById('p7-rfb').style.display='none'; }
+ function go(){ if(i>=5)return; var fb=document.getElementById('p7-rfb'), v=parseFloat(document.getElementById('p7-ra').value.replace(',','.').trim());
+ if(isNaN(v)){ feedback(fb,false,'Введи число.'); return; }
+ if(Math.abs(v-cur.a)<1e-9){ score++; feedback(fb,true,'✓ Верно: $'+_kf(cur.a)+' \\div '+cur.n+' = '+_kf(cur.r)+'$.'); } else feedback(fb,false,'✗ Нет. Делимое: $'+_kf(cur.a)+'$.');
+ document.getElementById('p7-rs').textContent=score; i++; setTimeout(show,1300); }
+ 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('rule','Деление на десятичную дробь','8.1',
+ 'Чтобы разделить на десятичную дробь, в делимом и делителе переносят запятую вправо на столько знаков, сколько их после запятой у делителя . Получается деление на натуральное число.
'
+ +'$4{,}5 \\div 0{,}5 = 45 \\div 5 = 9$ · $1{,}2 \\div 0{,}03 = 120 \\div 3 = 40$.
');
+ h+=makeCard('example','Почему так можно','8.2',
+ 'Деление — это дробь. Умножив делимое и делитель на одно и то же число ($10$, $100$…), значение дроби не меняется: $\\dfrac{4{,}5}{0{,}5}=\\dfrac{45}{5}=9$.
');
+ h+=''
+ +'
Выбери пример — увидишь, как перенос запятой превращает делитель в натуральное число.
'
+ +'
'
+ +'
';
+ h+=''
+ +'
Раздели на десятичную дробь. Ответ — целое или десятичная дробь.
'
+ +'
Пример 1 / 6 Очки: 0 / 6
'
+ +'
'
+ +'
Проверить
'
+ +'
';
+ h+=secNav('p7','p9')+readBtn('p8');
+ box.innerHTML=h; renderMath(box);
+
+ function mk(R,b){ var db=_dec(b), a=_mant(R,0)*_mant(b,db)/Math.pow(10,db); return {a:a,b:b,R:R,k:db,a2:_mant(a, _dec(a)), }; }
+ (function(){
+ var EX=[[9,0.5],[40,0.03],[6,0.25],[12,1.5],[8,0.2],[15,0.4]];
+ var pick=document.getElementById('p8-pick'), out=document.getElementById('p8-out');
+ pick.innerHTML=EX.map(function(e,k){ return '$'+_kf(_round(e[0]*e[1], _dec(e[1])))+' \\div '+_kf(e[1])+'$ '; }).join('');
+ function render(k){ var R=EX[k][0], b=EX[k][1], db=_dec(b), a=_round(R*b,db); var a2=_round(a*Math.pow(10,db), Math.max(0,_dec(a)-db)), b2=Math.round(b*Math.pow(10,db));
+ out.innerHTML='$'+_kf(a)+' \\div '+_kf(b)+' = '+a2+' \\div '+b2+' = '+R+'$
'
+ +'Переносим запятую на '+db+' '+(db===1?'знак':'знака')+' вправо у обоих чисел.
'; renderMath(out); }
+ pick.querySelectorAll('[data-k]').forEach(function(b){ b.addEventListener('click',function(){ pick.querySelectorAll('button').forEach(function(x){x.classList.remove('primary');}); b.classList.add('primary'); render(+b.getAttribute('data-k')); }); });
+ render(0);
+ })();
+
+ (function(){
+ var i=0,score=0,cur=null, BS=[0.5,0.2,0.25,0.4,0.05,1.5,0.8,0.3];
+ function gen(){ var R=_ri(2,30), b=_pick(BS), db=_dec(b), a=_round(R*b,db); cur={a:a,b:b,R:R}; }
+ function show(){ if(i>=6){ document.getElementById('p8-q').innerHTML='Готово! Результат: '+score+' / 6'; if(score>=5){addXp(15,'p8-iv2');bumpProgress('p8',30);}else if(score>=3){addXp(8,'p8-iv2');bumpProgress('p8',16);} return; }
+ gen(); document.getElementById('p8-i').textContent=i+1;
+ document.getElementById('p8-q').innerHTML='Вычисли $'+_kf(cur.a)+' \\div '+_kf(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=parseFloat(document.getElementById('p8-a').value.replace(',','.').trim());
+ if(isNaN(v)){ feedback(fb,false,'Введи число.'); return; }
+ if(Math.abs(v-cur.R)<1e-9){ score++; feedback(fb,true,'✓ Верно: $'+cur.R+'$.'); } else feedback(fb,false,'✗ Нет. Правильно: $'+cur.R+'$.');
+ 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();
+ })();
+}
+
+/* ===================== § 9. КОНЕЧНЫЕ И БЕСКОНЕЧНЫЕ ДРОБИ ===================== */
+function buildP9(){
+ var box=document.getElementById('p9-body'); var h='';
+ h+=makeCard('theory','Конечные и бесконечные десятичные дроби','9.1',
+ 'Обыкновенную дробь обращают в десятичную делением числителя на знаменатель. Иногда деление заканчивается — получается конечная дробь ($\\tfrac{3}{4}=0{,}75$).
'
+ +'Иногда цифры начинают повторяться без конца — это бесконечная периодическая дробь. Повторяющуюся группу (период) пишут в скобках: $\\tfrac{1}{3}=0{,}(3)$, $\\tfrac{1}{6}=0{,}1(6)$.
');
+ h+=makeCard('rule','Когда дробь конечная','9.2',
+ 'Несократимая обыкновенная дробь обращается в конечную десятичную тогда и только тогда, когда в разложении её знаменателя есть только множители 2 и 5 .
'
+ +'$\\tfrac{7}{20}$ — конечная ($20=2^2\\cdot5$); $\\tfrac{5}{6}$ — бесконечная ($6=2\\cdot3$).
');
+ h+=''
+ +'
Реши, обращается ли дробь в конечную десятичную (проверь множители знаменателя).
'
+ +'
Вопрос 1 / 6 Очки: 0 / 6
'
+ +'
'
+ +'
Конечная Бесконечная
'
+ +'
';
+ h+=''
+ +'
Выбери верную десятичную запись дроби (период — в скобках).
'
+ +'
Вопрос 1 / 5 Очки: 0 / 5
'
+ +'
'
+ +'
';
+ h+=secNav('p8','p10')+readBtn('p9');
+ box.innerHTML=h; renderMath(box);
+
+ (function(){
+ var i=0,score=0,cur=null;
+ function gen(){ var q=_ri(2,16), p=_ri(1,q-1), g=_gcd(p,q); p/=g; q/=g; cur={p:p,q:q,fin:_finite(p,q)}; }
+ function show(){ if(i>=6){ document.getElementById('p9-q').innerHTML='Готово! Результат: '+score+' / 6'; 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-q').innerHTML='Дробь $\\dfrac{'+cur.p+'}{'+cur.q+'}$ — какая десятичная?'; renderMath(document.getElementById('p9-q'));
+ document.getElementById('p9-fb').style.display='none'; }
+ function ans(f){ if(i>=6)return; var fb=document.getElementById('p9-fb'); var correct=cur.fin?1:0;
+ if(f===correct){ score++; feedback(fb,true,'✓ Верно — $\\dfrac{'+cur.p+'}{'+cur.q+'} = '+_fracDec(cur.p,cur.q).replace(/,/g,'{,}')+'$.'); } else feedback(fb,false,'✗ Нет. $\\dfrac{'+cur.p+'}{'+cur.q+'} = '+_fracDec(cur.p,cur.q).replace(/,/g,'{,}')+'$ — '+(cur.fin?'конечная':'бесконечная')+'.');
+ document.getElementById('p9-s').textContent=score; i++; setTimeout(show,1500); }
+ document.querySelectorAll('#p9-iv1 [data-fin]').forEach(function(b){ b.addEventListener('click',function(){ ans(+b.getAttribute('data-fin')); }); }); show();
+ })();
+
+ (function(){
+ var POOL=[[1,2],[1,4],[3,4],[1,5],[1,8],[3,8],[1,3],[2,3],[1,6],[5,6],[1,9],[7,10]];
+ var i=0,score=0,cur=null;
+ function gen(){ var f=_pick(POOL), correct=_fracDec(f[0],f[1]); var opts=[correct];
+ while(opts.length<3){ var g=_pick(POOL), s=_fracDec(g[0],g[1]); if(opts.indexOf(s)<0)opts.push(s); }
+ for(var j=opts.length-1;j>0;j--){ var k=_ri(0,j); var t=opts[j];opts[j]=opts[k];opts[k]=t; }
+ cur={f:f,correct:correct,opts:opts}; }
+ function show(){ if(i>=5){ document.getElementById('p9-dq').innerHTML='Готово! Результат: '+score+' / 5'; document.getElementById('p9-dopts').innerHTML=''; if(score>=4){addXp(15,'p9-iv2');bumpProgress('p9',30);}else if(score>=2){addXp(8,'p9-iv2');bumpProgress('p9',16);} return; }
+ gen(); document.getElementById('p9-di').textContent=i+1;
+ document.getElementById('p9-dq').innerHTML='$\\dfrac{'+cur.f[0]+'}{'+cur.f[1]+'} = ?$'; renderMath(document.getElementById('p9-dq'));
+ document.getElementById('p9-dopts').innerHTML=cur.opts.map(function(o){ return '$'+o.replace(/,/g,'{,}')+'$ '; }).join('');
+ document.querySelectorAll('#p9-dopts [data-o]').forEach(function(b){ b.addEventListener('click',function(){ ans(b.getAttribute('data-o')); }); }); renderMath(document.getElementById('p9-dopts'));
+ document.getElementById('p9-dfb').style.display='none'; }
+ function ans(o){ if(i>=5)return; var fb=document.getElementById('p9-dfb');
+ if(o===cur.correct){ score++; feedback(fb,true,'✓ Верно!'); } else feedback(fb,false,'✗ Нет. Правильно: '+cur.correct.replace('.',','));
+ document.getElementById('p9-ds').textContent=score; i++; setTimeout(show,1300); }
+ show();
+ })();
+}
+
+/* ===================== § 10. ПРЕОБРАЗОВАНИЯ ВЫРАЖЕНИЙ ===================== */
+function buildP10(){
+ var box=document.getElementById('p10-body'); var h='';
+ h+=makeCard('rule','Обыкновенные и десятичные вместе','10.1',
+ 'Десятичную дробь переводят в обыкновенную «по разрядам» и сокращают: $0{,}4=\\dfrac{4}{10}=\\dfrac{2}{5}$.
'
+ +'Обыкновенную дробь переводят в десятичную делением (если она конечная). В смешанном выражении удобно привести всё к одному виду .
');
+ h+=makeCard('example','Пример','10.2',
+ '$0{,}2 + \\dfrac{1}{4} = \\dfrac{1}{5} + \\dfrac{1}{4} = \\dfrac{9}{20} = 0{,}45$, или сразу $0{,}2 + 0{,}25 = 0{,}45$.
');
+ h+=''
+ +'
Перетащи каждую десятичную дробь к равной ей обыкновенной (или нажми карточку, потом — ящик).
'
+ +'
'
+ +'
'
+ +'
'
+ +'
'
+ +'
'
+ +'
'
+ +'
'
+ +'
'
+ +'
Проверить Сначала
'
+ +'
';
+ h+=''
+ +'
Приведи к удобному виду и запиши ответ десятичной дробью.
'
+ +'
Пример 1 / 5 Очки: 0 / 5
'
+ +'
'
+ +'
Проверить
'
+ +'
';
+ h+=secNav('p9','app')+readBtn('p10');
+ box.innerHTML=h; renderMath(box);
+
+ (function(){
+ var items=[{id:'i1',cat:'a',html:'$0{,}5$'},{id:'i2',cat:'b',html:'$0{,}25$'},{id:'i3',cat:'c',html:'$0{,}2$'},{id:'i4',cat:'d',html:'$0{,}75$'},{id:'i5',cat:'e',html:'$0{,}125$'}];
+ var sorter=setupSorter({ poolId:'p10-pool', scopeSelector:'#p10-iv1', items:items, cats:['a','b','c','d','e'], columnLayout:false });
+ document.getElementById('p10-check').addEventListener('click',function(){ var fb=document.getElementById('p10-fb');
+ var all=items.every(function(it){ return sorter.placed[it.id]===it.cat; });
+ var placed=items.filter(function(it){ return sorter.placed[it.id]; }).length;
+ if(all){ feedback(fb,true,'✓ Все 5 равенств верны! +12 XP'); addXp(12,'p10-iv1'); bumpProgress('p10',35); }
+ else if(placed=0); used.push(e); cur=e; }
+ function show(){ if(i>=5){ document.getElementById('p10-q').innerHTML='Готово! Результат: '+score+' / 5'; if(score>=4){addXp(15,'p10-iv2');bumpProgress('p10',30);}else if(score>=2){addXp(8,'p10-iv2');bumpProgress('p10',16);} return; }
+ gen(); document.getElementById('p10-i').textContent=i+1;
+ document.getElementById('p10-q').innerHTML='Вычисли $'+cur[0]+'$'; renderMath(document.getElementById('p10-q'));
+ document.getElementById('p10-a').value=''; document.getElementById('p10-afb').style.display='none'; }
+ function go(){ if(i>=5)return; var fb=document.getElementById('p10-afb'), v=parseFloat(document.getElementById('p10-a').value.replace(',','.').trim());
+ if(isNaN(v)){ feedback(fb,false,'Введи число.'); return; }
+ if(Math.abs(v-cur[1])<1e-9){ score++; feedback(fb,true,'✓ Верно: $'+_kf(cur[1])+'$.'); } else feedback(fb,false,'✗ Нет. Правильно: $'+_kf(cur[1])+'$.');
+ document.getElementById('p10-s').textContent=score; i++; setTimeout(show,1300); }
+ document.getElementById('p10-go').addEventListener('click',go);
+ document.getElementById('p10-a').addEventListener('keydown',function(e){ if(e.key==='Enter')go(); }); show();
+ })();
+}
+
/* ===================== ДАННЫЕ САЙДБАРА / ГЛОССАРИЯ ===================== */
var SIDEBARS = {
p1:{ title:'Шпаргалка § 1', rows:[
@@ -525,7 +747,27 @@ var SIDEBARS = {
p6:{ title:'Шпаргалка § 6', rows:[
['Умножение','как натуральные числа'],
['Запятая','знаков = сумма знаков множителей'],
- ['$1{,}2\\cdot 0{,}3$','$12\\cdot3=36$, 2 знака → $0{,}36$'] ]}
+ ['$1{,}2\\cdot 0{,}3$','$12\\cdot3=36$, 2 знака → $0{,}36$'] ]},
+ p7:{ title:'Шпаргалка § 7', rows:[
+ ['Деление на натур.','делим уголком'],
+ ['Запятая в частном','когда кончилась целая часть'],
+ ['Не делится','дописываем нули'],
+ ['$1\\div4$','$=0{,}25$'] ]},
+ p8:{ title:'Шпаргалка § 8', rows:[
+ ['Делитель — дробь','переносим запятую вправо'],
+ ['На сколько','на число знаков делителя'],
+ ['У обоих','и у делимого, и у делителя'],
+ ['$4{,}5\\div0{,}5$','$=45\\div5=9$'] ]},
+ p9:{ title:'Шпаргалка § 9', rows:[
+ ['Конечная','деление заканчивается'],
+ ['Бесконечная','цифры периода в скобках'],
+ ['Признак конечной','знаменатель — только 2 и 5'],
+ ['$\\frac13$','$=0{,}(3)$'] ]},
+ p10:{ title:'Шпаргалка § 10', rows:[
+ ['Десятичная → обыкн.','по разрядам и сократить'],
+ ['Обыкн. → десятичная','делением (если конечная)'],
+ ['В выражении','привести к одному виду'],
+ ['$0{,}4$','$=\\frac{2}{5}$'] ]}
};
var TIPS = [
{ sec:'p1', html:'Число цифр после запятой = числу нулей в знаменателе. У $0{,}305$ три цифры → знаменатель $1000$.' },
@@ -533,7 +775,11 @@ var TIPS = [
{ sec:'p3', html:'Чтобы отметить десятые, дели единичный отрезок на 10. $1{,}7$ — это $1$ и ещё $7$ маленьких делений.' },
{ sec:'p4', html:'Перед сложением «лесенкой» допиши нули: $7$ это $7{,}0$, тогда $7{,}0-2{,}3$ считается легко.' },
{ sec:'p5', html:'Считай нули множителя: у $1000$ их три → запятая прыгает на 3 знака. Умножаем — вправо, делим — влево.' },
- { sec:'p6', html:'Сначала перемножь без запятых. Потом отсчитай справа столько знаков, сколько их после запятой у обоих множителей вместе.' }
+ { sec:'p6', html:'Сначала перемножь без запятых. Потом отсчитай справа столько знаков, сколько их после запятой у обоих множителей вместе.' },
+ { sec:'p7', html:'Запятую в частном ставят ровно тогда, когда переходят от целой части делимого к дробной. Не делится нацело — припиши нули.' },
+ { sec:'p8', html:'Считай знаки только у делителя . Перенеси запятую на столько знаков вправо и у делимого, и у делителя — делитель станет целым.' },
+ { sec:'p9', html:'Чтобы понять, конечная ли дробь, разложи знаменатель на множители. Только 2 и 5 — конечная; есть 3, 7, … — бесконечная.' },
+ { sec:'p10', html:'Если все десятичные конечные — переведи дроби в десятичные и считай в десятичных. Иначе приводи к обыкновенным с общим знаменателем.' }
];
var GLOSSARY = [
{ term:'десятичная дробь', def:'Дробь со знаменателем $10,100,1000,\\ldots$, записанная через запятую.', sec:'p1', aliases:['десятичная дробь','десятичной дроби','десятичные дроби','десятичных дробей','десятичную дробь'] },
@@ -542,9 +788,12 @@ var GLOSSARY = [
{ term:'координата', def:'Число, показывающее расстояние точки от начала в единичных отрезках.', sec:'p3', aliases:['координата','координату','координаты','координатой'] },
{ term:'округление', def:'Замена числа близким с меньшим числом разрядов по правилу: следующая цифра $\\ge5$ — разряд увеличивают.', sec:'p2', aliases:['округление','округления','округлить','округлении'] },
{ term:'множитель', def:'Число, которое умножают. В произведении число знаков после запятой равно сумме знаков множителей.', sec:'p6', aliases:['множитель','множителя','множители','множителей'] },
- { term:'произведение', def:'Результат умножения. $1{,}2\\cdot 0{,}3 = 0{,}36$.', sec:'p6', aliases:['произведение','произведения','произведении'] }
+ { term:'произведение', def:'Результат умножения. $1{,}2\\cdot 0{,}3 = 0{,}36$.', sec:'p6', aliases:['произведение','произведения','произведении'] },
+ { term:'частное', def:'Результат деления. В $a\\div b$ число $a$ — делимое, $b$ — делитель.', sec:'p7', aliases:['частное','частного','частном'] },
+ { term:'периодическая дробь', def:'Бесконечная десятичная дробь, в которой группа цифр (период) повторяется: $0{,}(3)$.', sec:'p9', aliases:['периодическая дробь','периодической дроби','период','периода','периодом'] },
+ { term:'конечная дробь', def:'Десятичная дробь с конечным числом знаков после запятой ($0{,}75$).', sec:'p9', aliases:['конечная дробь','конечной дроби','конечная десятичная'] }
];
-var BUILDERS = { p1:buildP1, p2:buildP2, p3:buildP3, p4:buildP4, p5:buildP5, p6:buildP6 };
+var BUILDERS = { p1:buildP1, p2:buildP2, p3:buildP3, p4:buildP4, p5:buildP5, p6:buildP6, p7:buildP7, p8:buildP8, p9:buildP9, p10:buildP10 };
Object.assign(window.M6, { sidebars:SIDEBARS, tips:TIPS, glossary:GLOSSARY, builders:BUILDERS });