feat: exam9 — Экзамен 9 класс по математике (80 вариантов)

Новый отдельный модуль /exam9 в стиле LearnSpace:
- 80 вариантов × 10 заданий = 800 задач с разбором (KaTeX + SVG)
- Сайдбар: пункт «Экзамен 9 класс» (clipboard-check)
- Feature flag: feature_exam9_enabled (мигр. 002)
- Видим всем авторизованным; рендер на стороне клиента
- Прогресс в localStorage: подсветка вариантов (done/partial)
- Возобновление последнего варианта при возврате

Структура:
  frontend/exam9.html              — страница (LearnSpace layout)
  frontend/js/exam9/app.js         — рендерер
  frontend/js/exam9/variants/      — 80 файлов с данными
  frontend/img/exam9/              — 22 PNG/JPG фигур заданий

Картинки путей _tmp/ → /img/exam9/ переписаны автоматически.

Все маршруты проверены: 200 OK на /exam9, /js/exam9/*, /img/exam9/*.
This commit is contained in:
Maxim Dolgolyov
2026-05-16 12:53:49 +03:00
parent ae31e4c4e8
commit 6cff327e88
107 changed files with 16507 additions and 0 deletions
+197
View File
@@ -0,0 +1,197 @@
VARIANTS[2] = {
label: "Вариант 2",
tasks: [
{
text: `Какое из следующих чисел является натуральным:`,
opts: [
["а", "$-6$"], ["б", "$0$"], ["в", "$2{,}5$"],
["г", "$\\dfrac{7}{30}$"], ["д", "$143$"],
],
sol: `Натуральные числа — это 1, 2, 3, … (положительные целые).
<ul>
<li>а) $-6$ — отрицательное;</li>
<li>б) $0$ — нуль, не натуральное;</li>
<li>в) $2{,}5$ — дробное;</li>
<li>г) $\\dfrac{7}{30}$ — правильная дробь;</li>
<li>д) $143$ — натуральное ✓</li>
</ul>
<div class="sol-ans">Ответ: д)&ensp;$143$</div>`
},
{
text: `Результат упрощения выражения $4a^6 : a^{-12}$ имеет вид:`,
opts: [
["а", "$4a^{-6}$"], ["б", "$4a^6$"], ["в", "$\\dfrac{4}{a^{18}}$"],
["г", "$4a^{18}$"], ["д", "$\\dfrac{a^6}{4}$"],
],
sol: `При делении степеней с одним основанием показатели <em>вычитаются</em>:
$$4a^6 : a^{-12} = 4\\cdot a^{6-(-12)} = 4\\cdot a^{6+12} = 4a^{18}$$
<div class="sol-ans">Ответ: г)&ensp;$4a^{18}$</div>`
},
{
text: `Какое из следующих утверждений <b>НЕ</b> верно:`,
opts: [
["а", "в равнобедренном треугольнике углы при основании равны;"],
["б", "сумма смежных углов равна $180^{\\circ}$;"],
["в", "у любого параллелограмма все стороны равны;"],
["г", "диагонали любого ромба перпендикулярны?"],
],
sol: `<ul>
<li>а) Углы при основании равнобедренного треугольника равны — <b>верно</b></li>
<li>б) Сумма смежных углов равна $180°$ — <b>верно</b></li>
<li>в) У любого параллелограмма все стороны равны — <b style="color:#dc2626">НЕВЕРНО</b></li>
<li>г) Диагонали любого ромба перпендикулярны — <b>верно</b></li>
</ul>
Все стороны равны лишь у <b>ромба</b> — частного случая параллелограмма; в общем параллелограмме противоположные стороны равны, но смежные стороны могут различаться.
<div class="sol-ans">Ответ: в)</div>`
},
{
text: `Определите наименьшее целое решение совокупности неравенств
$$\\left[\\begin{array}{l} x^2 - 4x \\leq 0, \\\\[4pt] x > -1{,}5. \\end{array}\\right.$$`,
sol: `Совокупность «$[\\,$» означает объединение: решение удовлетворяет <em>хотя бы одному</em> из неравенств.
<br><b>Неравенство 1:</b> $x^2-4x\\leq 0\\Rightarrow x(x-4)\\leq 0\\Rightarrow 0\\leq x\\leq 4$
<br><b>Неравенство 2:</b> $x>-1{,}5$
<br>Объединение: $(0\\leq x\\leq 4)\\cup(x>-1{,}5) = x>-1{,}5$
<svg viewBox="0 0 268 50" xmlns="http://www.w3.org/2000/svg" style="max-width:268px;width:100%;height:auto;display:block;margin:10px 0"><defs><marker id="arrv2t4" viewBox="0 0 7 6" refX="7" refY="3" markerWidth="5" markerHeight="5" orient="auto"><path d="M0,0.5 L7,3 L0,5.5Z" fill="#555"/></marker></defs><line x1="8" y1="25" x2="256" y2="25" stroke="#bbb" stroke-width="1.2" marker-end="url(#arrv2t4)"/><line x1="70" y1="21" x2="70" y2="29" stroke="#777" stroke-width="1"/><text x="70" y="42" font-size="10" text-anchor="middle" fill="#555">&#x2212;1</text><line x1="120" y1="21" x2="120" y2="29" stroke="#777" stroke-width="1"/><text x="120" y="42" font-size="10" text-anchor="middle" fill="#555">0</text><line x1="170" y1="21" x2="170" y2="29" stroke="#777" stroke-width="1"/><text x="170" y="42" font-size="10" text-anchor="middle" fill="#555">1</text><line x1="220" y1="21" x2="220" y2="29" stroke="#777" stroke-width="1"/><text x="220" y="42" font-size="10" text-anchor="middle" fill="#555">2</text><line x1="45" y1="25" x2="250" y2="25" stroke="#2563eb" stroke-width="4" stroke-linecap="round" opacity="0.55"/><circle cx="45" cy="25" r="5" fill="white" stroke="#2563eb" stroke-width="2"/><text x="45" y="14" font-size="9" text-anchor="middle" fill="#2563eb">&#x2212;1,5</text></svg>Наименьшее целое число, большее $-1{,}5$: это $-1$.
<div class="sol-ans">Ответ: $-1$</div>`
},
{
text: `Сократите дробь $\\dfrac{x^2 + x - 12}{x^2 + 8x + 16}$
и найдите значение полученной дроби при $x = -3$.`,
sol: `<b>Теорема Виета (обратная):</b> $x^2+px+q=(x-x_1)(x-x_2)$, где $x_1+x_2=-p$, $x_1\\cdot x_2=q$.
<br><b>Формула квадрата суммы:</b> $(x+a)^2 = x^2+2ax+a^2$.
<br><br>
<b>Шаг 1.</b> Разложим <em>числитель</em> на множители. Ищем числа с суммой $-1$ и произведением $-12$. Подходят $-3$ и $4$:
$$x^2+x-12 = (x+4)(x-3)$$
<b>Шаг 2.</b> Разложим <em>знаменатель</em>. Это полный квадрат:
$$x^2+8x+16 = x^2+2\\cdot 4\\cdot x + 4^2 = (x+4)^2$$
<b>Шаг 3.</b> Сокращаем общий множитель $(x+4)$ (так как $x\\neq -4$, иначе знаменатель равен нулю):
$$\\dfrac{(x+4)(x-3)}{(x+4)^2} = \\dfrac{x-3}{x+4}$$
<b>Шаг 4.</b> Подставляем $x=-3$:
$$\\dfrac{-3-3}{-3+4} = \\dfrac{-6}{1} = -6$$
<div class="sol-ans">Ответ: $-6$</div>`
},
{
text: `Диагонали параллелограмма $ABCD$ пересекаются в точке $O$, $AD = 8$ см.
Высота, проведённая из вершины $A$ к стороне $BC$, равна $4$ см.
Найдите площадь треугольника $AOD$.`,
sol: `<b>Свойства параллелограмма:</b> противоположные стороны равны; диагонали точкой пересечения делятся пополам и разбивают параллелограмм на <b>4 равновеликих треугольника</b>.
<br><b>Формула площади параллелограмма:</b> $S = a\\cdot h$, где $a$ — сторона, $h$ — высота к ней.
<br><br>
<b>Шаг 1.</b> Так как $AD$ и $BC$ — противоположные стороны параллелограмма, то $BC = AD = 8$ см.
<br><b>Шаг 2.</b> Высота из вершины $A$ к стороне $BC$ длиной $4$ см — это расстояние между параллельными прямыми $AD$ и $BC$.
<br><b>Шаг 3.</b> Находим площадь всего параллелограмма:
$$S_{ABCD} = AD\\cdot h = 8\\cdot 4 = 32\\text{ см}^2$$
<b>Шаг 4.</b> Точка $O$ — пересечение диагоналей. Диагонали делят параллелограмм на четыре равновеликих треугольника:
<svg viewBox="0 0 250 145" xmlns="http://www.w3.org/2000/svg" style="max-width:250px;width:100%;height:auto;display:block;margin:10px 0"><polygon points="20,118 205,118 222,28 37,28" fill="rgba(37,99,235,0.06)" stroke="#475569" stroke-width="1.8"/><polygon points="20,118 222,28 115,73" fill="rgba(37,99,235,0.25)" stroke="none"/><line x1="20" y1="118" x2="222" y2="28" stroke="#94a3b8" stroke-width="1.2" stroke-dasharray="5,3"/><line x1="205" y1="118" x2="37" y2="28" stroke="#94a3b8" stroke-width="1.2" stroke-dasharray="5,3"/><circle cx="115" cy="73" r="3" fill="#1e293b"/><text x="4" y="123" font-size="14" font-family="serif" font-style="italic" fill="#1e293b">A</text><text x="208" y="123" font-size="14" font-family="serif" font-style="italic" fill="#1e293b">B</text><text x="224" y="24" font-size="14" font-family="serif" font-style="italic" fill="#1e293b">C</text><text x="26" y="24" font-size="14" font-family="serif" font-style="italic" fill="#1e293b">D</text><text x="120" y="70" font-size="12" font-family="serif" font-style="italic" fill="#1e293b">O</text><text x="72" y="100" font-size="11" fill="#1d4ed8" text-anchor="middle">S/4</text></svg>
<b>Шаг 5.</b> Значит:
$$S_{AOD} = \\dfrac{S_{ABCD}}{4} = \\dfrac{32}{4} = 8\\text{ см}^2$$
<div class="sol-ans">Ответ: $8$ см²</div>`
},
{
text: `Отчисления в бюджет по фиксированной ставке с доходов физических лиц
в Беларуси составляют $13\\%$ от заработной платы. После удержания налога
на доходы сотрудник предприятия получил $1131$ р.
Сколько рублей составляет заработная плата сотрудника без вычета налога?`,
sol: `<b>Метод уравнения для задачи на проценты:</b> неизвестную величину обозначаем переменной и выражаем условие задачи как уравнение.
<br><b>Свойство:</b> если из величины удерживают $p\\%$, то остаётся $(100-p)\\%$.
<br><br>
<b>Шаг 1.</b> Обозначим за $x$ заработную плату сотрудника до удержания налога.
<br><b>Шаг 2.</b> По условию налог $= 13\\%$ от $x$. Значит, на руки сотрудник получает оставшиеся $100\\%-13\\%=87\\%$ от $x$:
$$0{,}87\\cdot x = 1131$$
<b>Шаг 3.</b> Делим обе части уравнения на $0{,}87$:
$$x = \\dfrac{1131}{0{,}87} = \\dfrac{1131\\cdot 100}{87} = \\dfrac{113100}{87}$$
<b>Шаг 4.</b> Выполняем деление: $113100:87 = 1300$.
$$x = 1300\\text{ р.}$$
<b>Проверка:</b> $13\\%$ от $1300$ — это $0{,}13\\cdot 1300=169$ р.; на руки $1300-169=1131$ р. ✓
<div class="sol-ans">Ответ: $1300$ р.</div>`
},
{
text: `Найдите значение выражения $x_1 \\cdot x_2 + y_1 \\cdot y_2$,
где $(x_1;\\, y_1)$, $(x_2;\\, y_2)$ — решения системы уравнений
$$\\begin{cases} x^2 - y = 16, \\\\[4pt] x + y = 4. \\end{cases}$$`,
sol: `<b>Метод подстановки</b> для системы уравнений: выражаем одну переменную через другую и подставляем.
<br><b>Теорема Виета (обратная):</b> для $x^2+px+q=0$ корни $x_1,x_2$ удовлетворяют $x_1+x_2=-p$, $x_1\\cdot x_2=q$.
<br><br>
<b>Шаг 1.</b> Из второго уравнения выразим $y$ через $x$:
$$y = 4 - x$$
<b>Шаг 2.</b> Подставим в первое уравнение:
$$x^2 - (4-x) = 16$$
$$x^2 + x - 20 = 0$$
<b>Шаг 3.</b> По теореме Виета ищем корни: $x_1+x_2=-1$, $x_1\\cdot x_2=-20$. Подходят $-5$ и $4$:
$$(x+5)(x-4)=0 \\implies x_1=-5,\\; x_2=4$$
<b>Шаг 4.</b> По формуле $y = 4-x$ находим $y$ для каждого корня:
<table style="border-collapse:collapse;margin:8px 0"><tr><td style="padding:2px 14px 2px 0"><b>$x_1=-5$:</b></td><td>$y_1=4-(-5)=9$</td></tr><tr><td style="padding:2px 14px 2px 0"><b>$x_2=4$:</b></td><td>$y_2=4-4=0$</td></tr></table>
<b>Шаг 5.</b> Вычисляем требуемое выражение:
$$x_1 x_2 + y_1 y_2 = (-5)\\cdot 4 + 9\\cdot 0 = -20+0 = -20$$
<div class="sol-ans">Ответ: $-20$</div>`
},
{
text: `Функция $y = f(x)$ нечётная и для $x > 0$ задаётся формулой
$f(x) = \\dfrac{1}{x} - x^2$.
Найдите значение выражения $f\\!\\left(-\\dfrac{1}{3}\\right) - f(-3)$.`,
sol: `<b>Свойство нечётной функции:</b> $f(-x)=-f(x)$ для всех $x$ из области определения.
<br><b>Идея решения:</b> формула задана только при $x\\gt 0$. Чтобы найти значения функции в отрицательных точках, применяем свойство нечётности.
<br><br>
<b>Шаг 1.</b> Вычислим $f\\!\\left(\\dfrac{1}{3}\\right)$ по данной формуле (так как $\\dfrac{1}{3}\\gt 0$):
$$f\\!\\left(\\dfrac{1}{3}\\right) = \\dfrac{1}{1/3} - \\left(\\dfrac{1}{3}\\right)^2 = 3 - \\dfrac{1}{9} = \\dfrac{27-1}{9} = \\dfrac{26}{9}$$
<b>Шаг 2.</b> По свойству нечётности:
$$f\\!\\left(-\\dfrac{1}{3}\\right) = -f\\!\\left(\\dfrac{1}{3}\\right) = -\\dfrac{26}{9}$$
<b>Шаг 3.</b> Вычислим $f(3)$ по той же формуле:
$$f(3) = \\dfrac{1}{3} - 3^2 = \\dfrac{1}{3} - 9 = \\dfrac{1-27}{3} = -\\dfrac{26}{3}$$
<b>Шаг 4.</b> По свойству нечётности:
$$f(-3) = -f(3) = -\\left(-\\dfrac{26}{3}\\right) = \\dfrac{26}{3}$$
<b>Шаг 5.</b> Находим требуемую разность. Приведём дроби к общему знаменателю $9$:
$$f\\!\\left(-\\dfrac{1}{3}\\right) - f(-3) = -\\dfrac{26}{9} - \\dfrac{26}{3} = -\\dfrac{26}{9} - \\dfrac{78}{9} = -\\dfrac{104}{9}$$
<div class="sol-ans">Ответ: $-\\dfrac{104}{9}$</div>`
},
{
text: `В прямоугольном треугольнике точка касания вписанной окружности
делит гипотенузу на отрезки длиной $4$ см и $3$ см.
Найдите площадь треугольника.`,
sol: `<b>Обозначения.</b> Пусть прямой угол в точке $C$, катеты $CA=b$, $CB=a$, гипотенуза $AB=c$. Вписанная окружность касается гипотенузы в точке $P$: $AP=4$, $PB=3$.
<svg viewBox="0 0 200 180" xmlns="http://www.w3.org/2000/svg" style="max-width:200px;width:100%;height:auto;display:block;margin:10px 0">
<path d="M20,158 L32,158 L32,146" fill="none" stroke="#475569" stroke-width="1.3"/>
<line x1="20" y1="18" x2="20" y2="158" stroke="#334155" stroke-width="1.8"/>
<line x1="20" y1="158" x2="115" y2="158" stroke="#334155" stroke-width="1.8"/>
<line x1="115" y1="158" x2="20" y2="18" stroke="#334155" stroke-width="1.8"/>
<circle cx="51" cy="127" r="31" fill="rgba(37,99,235,0.09)" stroke="#2563eb" stroke-width="1.5"/>
<line x1="51" y1="127" x2="20" y2="127" stroke="#2563eb" stroke-width="1" stroke-dasharray="3,2"/>
<line x1="51" y1="127" x2="51" y2="158" stroke="#2563eb" stroke-width="1" stroke-dasharray="3,2"/>
<circle cx="20" cy="127" r="2.5" fill="#2563eb"/>
<circle cx="51" cy="158" r="2.5" fill="#2563eb"/>
<circle cx="77" cy="109" r="2.5" fill="#dc2626"/>
<text x="6" y="14" font-size="13" font-family="serif" font-style="italic">A</text>
<text x="117" y="168" font-size="13" font-family="serif" font-style="italic">B</text>
<text x="5" y="168" font-size="13" font-family="serif" font-style="italic">C</text>
<text x="79" y="106" font-size="11" font-family="serif" font-style="italic" fill="#dc2626">P</text>
<text x="7" y="95" font-size="10" fill="#2563eb">r</text>
<text x="33" y="170" font-size="10" fill="#2563eb">r</text>
<text x="40" y="88" font-size="11" fill="#c2410c" font-weight="bold">4</text>
<text x="96" y="140" font-size="11" fill="#c2410c" font-weight="bold">3</text>
<text x="7" y="57" font-size="10" fill="#475569">4</text>
<text x="38" y="168" font-size="10" fill="#475569">r</text>
<text x="7" y="147" font-size="10" fill="#475569">r</text>
</svg>
<b>Шаг 1. Свойство касательных.</b>
<br>Из каждой вершины отрезки до двух точек касания равны:
<ul>
<li>Из $A$: касательная к гипотенузе $AP=4$, касательная к катету $CA$ тоже $=4$.</li>
<li>Из $B$: касательная к гипотенузе $BP=3$, касательная к катету $CB$ тоже $=3$.</li>
<li>Из $C$ (прямой угол): обе касательные равны $r$.</li>
</ul>
Значит:
$$AB = 4+3 = 7\\text{ см}, \\quad CA = 4+r, \\quad CB = 3+r$$
<b>Шаг 2. Теорема Пифагора.</b>
$$(4+r)^2 + (3+r)^2 = 7^2$$
$$16+8r+r^2+9+6r+r^2=49$$
$$2r^2+14r+25=49$$
$$2r^2+14r-24=0$$
$$r^2+7r-12=0 \\quad (*)$$
<b>Шаг 3. Площадь без нахождения $r$.</b>
$$S=\\dfrac{1}{2}(4+r)(3+r)=\\dfrac{1}{2}\\bigl(12+7r+r^2\\bigr)$$
Из уравнения $(*)$: $r^2+7r=12$. Подставляем:
$$S=\\dfrac{1}{2}\\bigl(12+12\\bigr)=\\dfrac{1}{2}\\cdot24=12\\text{ см}^2$$
<div class="sol-ans">Ответ: $12$ см²</div>`
},
]
};