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
+205
View File
@@ -0,0 +1,205 @@
VARIANTS[5] = {
label: "Вариант 5",
tasks: [
{
text: `Определите наименьшее целое число, принадлежащее промежутку $[-8{,}5;\\, 3{,}4]$:`,
opts: [
["а", "$-9$"], ["б", "$-8$"], ["в", "$0$"], ["г", "$3$"], ["д", "$-1$"],
],
sol: `Промежуток $[-8{,}5;\\, 3{,}4]$ включает $-8{,}5$ (закрытый конец).
<br>Ближайшее целое $\\geq -8{,}5$ — это $-8$.
<div class="sol-ans">Ответ: б)&ensp;$-8$</div>`
},
{
text: `Второй член арифметической прогрессии $(a_n)$,
у которой $d = 2$ и $a_1 = \\dfrac{1}{2}$, равен:`,
opts: [
["а", "$1$"], ["б", "$1\\dfrac{1}{2}$"], ["в", "$2\\dfrac{1}{2}$"],
["г", "$2$"], ["д", "$-1\\dfrac{1}{2}$"],
],
sol: `$$a_2 = a_1 + d = \\dfrac{1}{2} + 2 = \\dfrac{5}{2} = 2\\dfrac{1}{2}$$
<div class="sol-ans">Ответ: в)&ensp;$2\\dfrac{1}{2}$</div>`
},
{
text: `Какое из следующих утверждений <b>НЕ</b> верно:`,
opts: [
["а", "сумма острых углов прямоугольного треугольника равна $90^{\\circ}$;"],
["б", "диагонали параллелограмма точкой пересечения делятся пополам;"],
["в", "любая точка серединного перпендикуляра к отрезку равноудалена от концов отрезка;"],
["г", "если три угла одного треугольника соответственно равны трём углам другого, то такие треугольники равны?"],
],
sol: `<ul>
<li>а) Сумма острых углов прямоугольного треугольника $= 90°$ — <b>верно</b></li>
<li>б) Диагонали параллелограмма делятся пополам — <b>верно</b></li>
<li>в) Точки серединного перпендикуляра равноудалены от концов — <b>верно</b></li>
<li>г) Три равных угла → равные треугольники — <b style="color:#dc2626">НЕВЕРНО</b></li>
</ul>
Три равных угла означают лишь <b>подобие</b> треугольников, но не равенство (они могут иметь разные стороны).
<div class="sol-ans">Ответ: г)</div>`
},
{
text: `Решите уравнение $2x^2 - 0{,}4x = 0$.
В ответ запишите среднее арифметическое корней уравнения.`,
sol: `Выносим $x$ за скобку:
$$x(2x - 0{,}4) = 0 \\implies x_1=0,\\quad x_2 = \\frac{0{,}4}{2} = 0{,}2$$
Среднее арифметическое: $\\dfrac{x_1+x_2}{2} = \\dfrac{0+0{,}2}{2} = 0{,}1$
<div class="sol-ans">Ответ: $0{,}1$</div>`
},
{
text: `Высоты параллелограмма, проведённые из вершины тупого угла, равны $6$ см и $9$ см.
Периметр параллелограмма равен $40$ см. Найдите площадь параллелограмма.`,
figure: `<svg viewBox="0 0 195 112" xmlns="http://www.w3.org/2000/svg" style="max-width:195px;width:100%;height:auto;display:block;margin:10px 0">
<polygon points="55,95 165,95 130,20 20,20" fill="rgba(37,99,235,0.07)" stroke="#334155" stroke-width="1.8"/>
<path d="M85,95 A30,30 0 0,1 42,67" fill="none" stroke="#94a3b8" stroke-width="1.2"/>
<text x="74" y="90" font-size="9" fill="#888">тупой</text>
<text x="38" y="110" font-size="13" font-family="serif" font-style="italic">A</text>
<text x="167" y="110" font-size="13" font-family="serif" font-style="italic">B</text>
<text x="132" y="15" font-size="13" font-family="serif" font-style="italic">C</text>
<text x="5" y="15" font-size="13" font-family="serif" font-style="italic">D</text>
<text x="100" y="108" font-size="10" fill="#475569" font-style="italic">a</text>
<text x="18" y="62" font-size="10" fill="#475569" font-style="italic">b</text>
<line x1="55" y1="95" x2="55" y2="20" stroke="#2563eb" stroke-width="1.5" stroke-dasharray="5,3"/>
<path d="M48,20 L48,27 L55,27" fill="none" stroke="#2563eb" stroke-width="1"/>
<text x="58" y="62" font-size="11" fill="#2563eb" font-weight="bold">h₁=6</text>
<line x1="55" y1="95" x2="143" y2="49" stroke="#e11d48" stroke-width="1.5" stroke-dasharray="5,3"/>
<path d="M140.2,43.7 L145.5,40.9 L148.3,46.2" fill="none" stroke="#e11d48" stroke-width="1"/>
<text x="95" y="61" font-size="11" fill="#e11d48" font-weight="bold">h₂=9</text>
</svg>`,
sol: `Пусть стороны параллелограмма $a$ и $b$. Высоты из вершины тупого угла перпендикулярны к <b>смежным</b> сторонам: $h_a=6$ (к стороне $a$) и $h_b=9$ (к стороне $b$).
<br>Площадь одна и та же: $S = a\\cdot h_a = b\\cdot h_b$, значит:
$$6a = 9b \\implies \\frac{a}{b} = \\frac{3}{2}$$
Периметр: $2(a+b)=40 \\Rightarrow a+b=20$.
<br>С учётом $a=3k,\\ b=2k$: $5k=20 \\Rightarrow k=4$, т.е. $a=12$, $b=8$.
$$S = a\\cdot h_a = 12\\cdot 6 = 72\\text{ см}^2$$
<div class="sol-ans">Ответ: $72$ см²</div>`
},
{
text: `При каких натуральных значениях $n$ верно неравенство
$4{,}8(n - 4) - 3{,}7(2 - n) < 24{,}4$?`,
sol: `<b>Свойства линейных неравенств:</b> можно прибавлять одинаковое число к обеим частям и умножать/делить на положительное число, не меняя знак неравенства.
<br><b>Натуральные числа:</b> $1, 2, 3, \\ldots$ — положительные целые.
<br><br>
<b>Шаг 1.</b> Раскроем скобки слева:
$$4{,}8(n-4) = 4{,}8n - 19{,}2$$
$$-3{,}7(2-n) = -7{,}4 + 3{,}7n$$
Неравенство примет вид:
$$4{,}8n - 19{,}2 - 7{,}4 + 3{,}7n \\lt 24{,}4$$
<b>Шаг 2.</b> Приведём подобные слагаемые:
$$8{,}5n - 26{,}6 \\lt 24{,}4$$
<b>Шаг 3.</b> Перенесём $-26{,}6$ вправо со сменой знака:
$$8{,}5n \\lt 51$$
<b>Шаг 4.</b> Разделим обе части на $8{,}5$ (положительное число, знак сохраняется):
$$n \\lt 6$$
<b>Шаг 5.</b> Выбираем натуральные значения, удовлетворяющие $n\\lt 6$:
$$n \\in \\{1,\\ 2,\\ 3,\\ 4,\\ 5\\}$$
<div class="sol-ans">Ответ: $n = 1,\\ 2,\\ 3,\\ 4,\\ 5$</div>`
},
{
text: `Известно, что график функции $y = f(x)$ симметричен относительно оси ординат
и $f(-3) = 5$, $f(2) = -6$.
Найдите значение выражения $f(3) + 2f(-2)$.`,
sol: `<b>Признак чётной функции:</b> график функции симметричен относительно оси ординат тогда и только тогда, когда функция чётная.
<br><b>Свойство чётной функции:</b> $f(-x) = f(x)$ для всех $x$ из области определения.
<br><br>
<b>Шаг 1.</b> По признаку чётной функции из симметрии графика относительно оси $Oy$ следует:
$$f(-x) = f(x)$$
<b>Шаг 2.</b> Применяем это свойство, чтобы выразить нужные значения через известные.
<br>Так как $f(3) = f(-3)$, то по условию:
$$f(3) = f(-3) = 5$$
<b>Шаг 3.</b> Аналогично для $f(-2)$:
$$f(-2) = f(2) = -6$$
<b>Шаг 4.</b> Подставляем найденные значения в выражение:
$$f(3) + 2f(-2) = 5 + 2\\cdot(-6) = 5 - 12 = -7$$
<div class="sol-ans">Ответ: $-7$</div>`
},
{
text: `Определите число решений системы уравнений
$$\\begin{cases} x^2 + y^2 = 16, \\\\[4pt] y = -x^2 + 4. \\end{cases}$$
Ответ обоснуйте.`,
sol: `<b>Метод подстановки:</b> подставляем выражение для $y$ из одного уравнения в другое.
<br><b>Формула квадрата суммы:</b> $(a+b)^2 = a^2+2ab+b^2$.
<br><b>Геометрический смысл:</b> первое уравнение задаёт окружность с центром в начале координат и радиусом $4$; второе — параболу с вершиной $(0;4)$, ветви вниз.
<br><br>
<b>Шаг 1.</b> Из второго уравнения возьмём выражение $y=-x^2+4$ и подставим в первое:
$$x^2+(-x^2+4)^2=16$$
<b>Шаг 2.</b> Раскрываем квадрат:
$$x^2+x^4-8x^2+16=16$$
<b>Шаг 3.</b> Приводим подобные и упрощаем:
$$x^4-7x^2=0$$
$$x^2(x^2-7)=0$$
<b>Шаг 4.</b> Произведение равно нулю, когда один из множителей нуль:
<ul>
<li>$x^2=0 \\Rightarrow x=0$</li>
<li>$x^2-7=0 \\Rightarrow x=\\pm\\sqrt{7}$</li>
</ul>
Получили три значения $x$. Поскольку $y$ однозначно определяется как $y=-x^2+4$, каждому значению $x$ соответствует одно значение $y$:
<table style="border-collapse:collapse;margin:8px 0"><tr><td style="padding:2px 12px 2px 0">$x=0$:</td><td>$y=4$</td><td style="padding:2px 0 2px 12px">— точка $(0,4)$</td></tr><tr><td>$x=\\pm\\sqrt{7}$:</td><td>$y=-3$</td><td style="padding:2px 0 2px 12px">— точки $(\\pm\\sqrt{7},\\,-3)$</td></tr></table>
<b>Шаг 5.</b> Итого — три решения системы:
<svg viewBox="0 0 200 195" xmlns="http://www.w3.org/2000/svg" style="max-width:200px;width:100%;height:auto;display:block;margin:10px 0">
<defs><marker id="arrs5" 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="10" y1="100" x2="190" y2="100" stroke="#bbb" stroke-width="1" marker-end="url(#arrs5)"/>
<line x1="100" y1="185" x2="100" y2="10" stroke="#bbb" stroke-width="1" marker-end="url(#arrs5)"/>
<text x="186" y="97" font-size="10" fill="#555">x</text><text x="102" y="12" font-size="10" fill="#555">y</text>
<circle cx="100" cy="100" r="80" fill="none" stroke="#2563eb" stroke-width="1.8"/>
<text x="155" y="38" font-size="10" fill="#2563eb">x²+y²=16</text>
<path d="M28,164 Q64,20 100,20 Q136,20 172,164" fill="none" stroke="#e11d48" stroke-width="1.8"/>
<text x="140" y="175" font-size="10" fill="#e11d48">y=x²+4</text>
<circle cx="100" cy="20" r="4" fill="#16a34a"/><text x="105" y="18" font-size="9" fill="#16a34a">(0,4)</text>
<circle cx="153" cy="160" r="4" fill="#16a34a"/><text x="155" y="158" font-size="9" fill="#16a34a">(√7,3)</text>
<circle cx="47" cy="160" r="4" fill="#16a34a"/><text x="2" y="158" font-size="9" fill="#16a34a">(−√7,3)</text>
</svg>
<div class="sol-ans">Ответ: 3 решения</div>`
},
{
text: `К раствору, содержащему $30$ г соли, добавили $100$ г воды,
после чего концентрация соли уменьшилась на $5\\%$.
Найдите первоначальную процентную концентрацию соли в растворе.`,
sol: `Пусть $m$ — начальная масса раствора. Соли — $30$ г, она не меняется.
<br><br>
<table style="border-collapse:collapse;width:100%;font-size:.93rem">
<tr style="background:#f1f5f9"><th style="border:1px solid #cbd5e1;padding:4px 10px"></th><th style="border:1px solid #cbd5e1;padding:4px 10px">Масса раствора</th><th style="border:1px solid #cbd5e1;padding:4px 10px">Масса соли</th><th style="border:1px solid #cbd5e1;padding:4px 10px">Концентрация</th></tr>
<tr><td style="border:1px solid #cbd5e1;padding:4px 10px"><b>До</b></td><td style="border:1px solid #cbd5e1;padding:4px 10px">$m$</td><td style="border:1px solid #cbd5e1;padding:4px 10px">$30$ г</td><td style="border:1px solid #cbd5e1;padding:4px 10px">$c = \\dfrac{30}{m}$</td></tr>
<tr><td style="border:1px solid #cbd5e1;padding:4px 10px"><b>После</b></td><td style="border:1px solid #cbd5e1;padding:4px 10px">$m+100$</td><td style="border:1px solid #cbd5e1;padding:4px 10px">$30$ г</td><td style="border:1px solid #cbd5e1;padding:4px 10px">$c' = \\dfrac{30}{m+100}$</td></tr>
</table>
<br>
<b>Шаг 1.</b> По условию концентрация уменьшилась на $5\\% = 0{,}05$:
$$\\frac{30}{m} - \\frac{30}{m+100} = 0{,}05$$
<b>Шаг 2.</b> Приведём к общему знаменателю:
$$\\frac{30(m+100) - 30m}{m(m+100)} = 0{,}05 \\implies \\frac{3000}{m(m+100)} = \\frac{1}{20}$$
$$m(m+100) = 60000$$
<b>Шаг 3.</b> Решаем квадратное уравнение $m^2 + 100m - 60000 = 0$:
$$D = 100^2 + 4\\cdot60000 = 10000 + 240000 = 250000 = 500^2$$
$$m = \\frac{-100 + 500}{2} = 200\\text{ г} \\quad (m > 0)$$
<b>Шаг 4.</b> Начальная концентрация:
$$c = \\frac{30}{200} = 0{,}15 = 15\\%$$
<b>Проверка:</b> после добавления $c' = \\dfrac{30}{300} = 10\\% = 15\\% - 5\\%$
<div class="sol-ans">Ответ: $15\\%$</div>`
},
{
text: `Найдите площадь сектора круга, угол которого равен $30^{\\circ}$,
а длина дуги — $4$ см. Ответ округлите до целых см², взяв $\\pi \\approx 3{,}14$.`,
sol: `<b>Формула длины дуги:</b> $l = \\dfrac{\\pi r\\alpha°}{180°}$, где $\\alpha°$ — центральный угол сектора в градусах.
<br><b>Формула площади сектора через длину дуги:</b> $S = \\dfrac{l\\cdot r}{2}$.
<br><br>
<b>Шаг 1.</b> По формуле длины дуги при $l=4$ и $\\alpha=30°$ найдём радиус:
$$4 = \\dfrac{\\pi r\\cdot 30}{180} = \\dfrac{\\pi r}{6}$$
Отсюда:
$$r = \\dfrac{24}{\\pi}$$
<b>Шаг 2.</b> Подставляем найденный радиус в формулу площади сектора:
$$S = \\dfrac{l\\cdot r}{2} = \\dfrac{4\\cdot\\dfrac{24}{\\pi}}{2} = \\dfrac{48}{\\pi}$$
<b>Шаг 3.</b> Подставляем $\\pi\\approx 3{,}14$ и округляем:
$$S \\approx \\dfrac{48}{3{,}14} \\approx 15{,}3 \\approx 15\\text{ см}^2$$
<svg viewBox="0 0 120 115" xmlns="http://www.w3.org/2000/svg" style="max-width:120px;width:100%;height:auto;display:block;margin:10px 0">
<path d="M60,60 L60,15 A45,45 0 0,1 98,82 Z" fill="rgba(37,99,235,0.2)" stroke="#2563eb" stroke-width="1.8"/>
<path d="M60,60 L60,15" stroke="#334155" stroke-width="1.5"/>
<path d="M60,60 L98,82" stroke="#334155" stroke-width="1.5"/>
<circle cx="60" cy="60" r="45" fill="none" stroke="#94a3b8" stroke-width="1" stroke-dasharray="4,3"/>
<path d="M77,52 A20,20 0 0,1 72,72" fill="none" stroke="#555" stroke-width="1.2"/>
<text x="78" y="62" font-size="10" fill="#555">30°</text>
<text x="62" y="40" font-size="10" fill="#2563eb">r</text>
<text x="62" y="35" font-size="9" fill="#e11d48" transform="rotate(30,62,35)">l=4</text>
</svg>
<div class="sol-ans">Ответ: $15$ см²</div>`
},
]
};