From 169501f12a0a891b85570d7c982ba413fa91f1d8 Mon Sep 17 00:00:00 2001 From: Maxim Dolgolyov Date: Thu, 25 Jun 2026 17:17:22 +0300 Subject: [PATCH] =?UTF-8?q?feat(trainer):=20=D0=BA=D0=BE=D0=BD=D1=82=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=205-6=20=D0=BA=D0=BB=20=E2=80=94=20=D0=B4=D0=B5?= =?UTF-8?q?=D1=81=D1=8F=D1=82=D0=B8=D1=87=D0=BD=D1=8B=D0=B5=20=D0=B4=D1=80?= =?UTF-8?q?=D0=BE=D0=B1=D0=B8=20+=20=D0=BE=D1=82=D1=80=D0=B8=D1=86=D0=B0?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5=20=D1=87=D0=B8=D1=81?= =?UTF-8?q?=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - НОВАЯ тема Десятичные (5 кл): сложение/вычитание/умножение десятичных. Строятся через десятые/сотые (целые ÷10, ÷100) → ответ печатается чисто, без float-мусора (0.8, 0.07, 0.16) - НОВАЯ тема Отрицательные (6 кл): сумма/разность/произведение с отрицательными. Словесные формулировки («Найдите сумму чисел -8 и 9», «Из числа 6 вычтите -12») — без двусмысленных операторов; constraint гарантирует хотя бы одно отрицательное - всё kind compute (движок не трогал); LEVELS проставлены - 58 генераторов, 19 тем; смоук движка 1114/1114, страница 40/40; эмодзи 0 Co-Authored-By: Claude Opus 4.8 (1M context) --- frontend/js/trainer/generators.js | 92 ++++++++++++++++++++++++++++++- 1 file changed, 90 insertions(+), 2 deletions(-) diff --git a/frontend/js/trainer/generators.js b/frontend/js/trainer/generators.js index 32c6ab1..29c8fa3 100644 --- a/frontend/js/trainer/generators.js +++ b/frontend/js/trainer/generators.js @@ -33,6 +33,8 @@ { key: 'quadratic', label: 'Квадратные', subject: 'algebra', grade: 8, order: 9 }, { key: 'progressions', label: 'Прогрессии', subject: 'algebra', grade: 9, order: 10 }, { key: 'fractions', label: 'Дроби', subject: 'algebra', grade: 5, order: 1.5 }, + { key: 'decimals', label: 'Десятичные', subject: 'algebra', grade: 5, order: 1.6 }, + { key: 'negatives', label: 'Отрицательные', subject: 'algebra', grade: 6, order: 1.7 }, { key: 'applied', label: 'Задачи', subject: 'algebra', grade: 7, order: 11 }, { key: 'g-angles', label: 'Углы', subject: 'geometry', grade: 7, order: 12 }, { key: 'g-pyth', label: 'Пифагор', subject: 'geometry', grade: 8, order: 13 }, @@ -829,6 +831,90 @@ { note: 'При одинаковом знаменателе складываем числители, знаменатель оставляем:', tex: 'x = ({a} + {b})/{n}' }, { note: 'Получаем значение:', tex: 'x = {ans}' } ] + }, + + /* ═══ Тема: Десятичные дроби (5 класс) ═══ + Строим через десятые/сотые (целые ÷10, ÷100) → ответ печатается чисто. */ + + /* сложение десятичных */ + { + id: 'dec-add', topic: 'decimals', order: 1, subject: 'algebra', grade: 5, kind: 'compute', + title: 'Сложение десятичных', + pick: { a: [1, 9], b: [1, 9] }, derive: { da: 'a/10', db: 'b/10', val: '(a + b)/10' }, + lhs: 'x', rhs: '({a} + {b})/10', display: 'Вычислите {da} + {db}.', + answerVar: 'x', answer: 'val', + solution: [ + { note: 'Складываем десятичные дроби поразрядно (запятая под запятой):', tex: 'x = {da} + {db}' }, + { note: 'Получаем:', tex: 'x = {ans}' } + ] + }, + + /* вычитание десятичных */ + { + id: 'dec-sub', topic: 'decimals', order: 2, subject: 'algebra', grade: 5, kind: 'compute', + title: 'Вычитание десятичных', + pick: { a: [2, 9], b: [1, 8] }, constraint: 'a > b', derive: { da: 'a/10', db: 'b/10', val: '(a - b)/10' }, + lhs: 'x', rhs: '({a} - {b})/10', display: 'Вычислите {da} − {db}.', + answerVar: 'x', answer: 'val', + solution: [ + { note: 'Вычитаем десятичные дроби поразрядно:', tex: 'x = {da} - {db}' }, + { note: 'Получаем:', tex: 'x = {ans}' } + ] + }, + + /* умножение десятичных */ + { + id: 'dec-mult', topic: 'decimals', order: 3, subject: 'algebra', grade: 5, kind: 'compute', + title: 'Умножение десятичных', + pick: { a: [1, 9], b: [1, 9] }, derive: { da: 'a/10', db: 'b/10', val: '(a*b)/100' }, + lhs: 'x', rhs: '({a}*{b})/100', display: 'Вычислите {da} · {db}.', + answerVar: 'x', answer: 'val', + solution: [ + { note: 'Перемножаем без запятых как целые, затем отделяем 2 знака после запятой (по сумме знаков у множителей):', tex: 'x = {da} * {db}' }, + { note: 'Получаем:', tex: 'x = {ans}' } + ] + }, + + /* ═══ Тема: Отрицательные числа (6 класс) ═══ + Словесные формулировки — без двусмысленных операторов в условии. */ + + /* сумма с отрицательными */ + { + id: 'neg-add', topic: 'negatives', order: 1, subject: 'algebra', grade: 6, kind: 'compute', + title: 'Сумма (отрицательные)', + pick: { a: [-12, 12], b: [-12, 12] }, constraint: 'a != 0 && b != 0 && (a < 0 || b < 0)', derive: { val: 'a + b' }, + lhs: 'x', rhs: '{a} + {b}', display: 'Найдите сумму чисел {a} и {b}.', + answerVar: 'x', answer: 'val', integerAnswer: true, + solution: [ + { note: 'Складываем с учётом знаков: при одинаковых знаках складываем модули; при разных — из большего модуля вычитаем меньший и ставим знак большего:', tex: 'x = {a} + {b}' }, + { note: 'Получаем:', tex: 'x = {ans}' } + ] + }, + + /* разность с отрицательными */ + { + id: 'neg-sub', topic: 'negatives', order: 2, subject: 'algebra', grade: 6, kind: 'compute', + title: 'Разность (отрицательные)', + pick: { a: [-12, 12], b: [-12, 12] }, constraint: 'a != 0 && b != 0 && (a < 0 || b < 0)', derive: { val: 'a - b' }, + lhs: 'x', rhs: '{a} - ({b})', display: 'Из числа {a} вычтите {b}.', + answerVar: 'x', answer: 'val', integerAnswer: true, + solution: [ + { note: 'Вычесть число — значит прибавить ему противоположное:', tex: 'x = {a} - ({b})' }, + { note: 'Получаем:', tex: 'x = {ans}' } + ] + }, + + /* произведение с отрицательными */ + { + id: 'neg-mult', topic: 'negatives', order: 3, subject: 'algebra', grade: 6, kind: 'compute', + title: 'Произведение (отрицательные)', + pick: { a: [-9, 9], b: [-9, 9] }, constraint: 'a != 0 && b != 0 && (a < 0 || b < 0)', derive: { val: 'a*b' }, + lhs: 'x', rhs: '{a}*{b}', display: 'Найдите произведение чисел {a} и {b}.', + answerVar: 'x', answer: 'val', integerAnswer: true, + solution: [ + { note: 'Перемножаем модули; знак минус — если множители разных знаков, плюс — если одинаковых:', tex: 'x = {a}*{b}' }, + { note: 'Получаем:', tex: 'x = {ans}' } + ] } ]; @@ -869,8 +955,10 @@ 'area-parallelogram': 2, 'area-trapezoid': 3, 'area-rhombus': 2, // Геометрия — Многоугольники / Подобие 'poly-angles-sum': 1, 'poly-regular-angle': 2, 'sim-side': 1, 'sim-perimeter': 2, - // Дроби - 'frac-of-number': 1, 'frac-add-same': 2 + // Дроби / Десятичные / Отрицательные + 'frac-of-number': 1, 'frac-add-same': 2, + 'dec-add': 1, 'dec-sub': 1, 'dec-mult': 2, + 'neg-add': 1, 'neg-sub': 2, 'neg-mult': 2 }; GENERATORS.forEach(function (g) { g.level = LEVELS[g.id] || 1; });