From 826e7b04f25d734a5026149ef444278420a1aacd Mon Sep 17 00:00:00 2001 From: Maxim Dolgolyov Date: Tue, 2 Jun 2026 15:03:30 +0300 Subject: [PATCH] =?UTF-8?q?feat(math6):=20=D0=93=D0=BB=D0=B0=D0=B2=D0=B0?= =?UTF-8?q?=201,=20=D0=B2=D0=BE=D0=BB=D0=BD=D0=B0=203=20=E2=80=94=20=C2=A7?= =?UTF-8?q?7=E2=80=93=C2=A710=20(=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5,=20=D0=BF=D0=B5=D1=80=D0=B8=D0=BE=D0=B4,=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B5=D0=BE=D0=B1=D1=80=D0=B0=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit §7 деление на натуральное (тренажёр + восстанови делимое); §8 деление на десятичную (демонстратор переноса запятой + тренажёр); §9 конечная/бесконечная (классификатор по множителям 2·5 + период через долгое деление с отслеживанием остатков, выбор десятичной записи); §10 сопоставление десятичная↔обыкновенная (DnD) + вычисление выражений. Шпаргалки/типсы/глоссарий §7–§10. Тесты 11/11. Co-Authored-By: Claude Opus 4.8 (1M context) --- backend/tests/math6-page.test.js | 17 ++ frontend/textbooks/math_6_ch1.html | 257 ++++++++++++++++++++++++++++- 2 files changed, 270 insertions(+), 4 deletions(-) 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
Тренажёр деления
' + +'
Раздели десятичную дробь на натуральное число. Ответ — десятичная дробь.
' + +'
Пример 1 / 6Очки: 0 / 6
' + +'
' + +'
' + +'
'; + h+='
Интерактив 2
Восстанови делимое
' + +'
Известны частное и делитель. Найди делимое (проверка делением наоборот).
' + +'
Пример 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+='
Интерактив 1
Превращаем в деление на натуральное
' + +'
Выбери пример — увидишь, как перенос запятой превращает делитель в натуральное число.
' + +'
' + +'
'; + h+='
Интерактив 2
Тренажёр деления
' + +'
Раздели на десятичную дробь. Ответ — целое или десятичная дробь.
' + +'
Пример 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 ''; }).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
Конечная или бесконечная?
' + +'
Реши, обращается ли дробь в конечную десятичную (проверь множители знаменателя).
' + +'
Вопрос 1 / 6Очки: 0 / 6
' + +'
' + +'
' + +'
'; + h+='
Интерактив 2
Запиши десятичную дробь
' + +'
Выбери верную десятичную запись дроби (период — в скобках).
' + +'
Вопрос 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 ''; }).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+='
Интерактив 1
Сопоставь дробь и десятичную
' + +'
Перетащи каждую десятичную дробь к равной ей обыкновенной (или нажми карточку, потом — ящик).
' + +'
5 десятичных — 5 ящиков
' + +'
' + +'
' + +'
$\\frac{1}{2}$
' + +'
$\\frac{1}{4}$
' + +'
$\\frac{1}{5}$
' + +'
$\\frac{3}{4}$
' + +'
$\\frac{1}{8}$
' + +'
' + +'
'; + h+='
Интерактив 2
Вычисли значение выражения
' + +'
Приведи к удобному виду и запиши ответ десятичной дробью.
' + +'
Пример 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 });