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
+188
View File
@@ -0,0 +1,188 @@
VARIANTS[75] = {
label: "Вариант 75",
tasks: [
{
text: `Определите, какое из данных чисел является решением неравенства $x < -4$:`,
opts: [
["а", "$-3$"], ["б", "$-2$"], ["в", "$-1$"], ["г", "$0$"], ["д", "$-7$"],
],
sol: `Неравенство $x \\lt -4$ выполняется только для чисел, строго меньших $-4$.
<ul>
<li>а) $-3$: $-3 \\gt -4$ — нет;</li>
<li>б) $-2$: нет;</li>
<li>в) $-1$: нет;</li>
<li>г) $0$: нет;</li>
<li>д) $-7$: $-7 \\lt -4$ — <b>да</b> ✓</li>
</ul>
<div class="sol-ans">Ответ: д)&ensp;$-7$</div>`
},
{
text: `Сумма каких двух чисел <b>НЕ</b> равна $-5{,}2$:`,
opts: [
["а", "$1$ и $-6{,}2$"], ["б", "$-2$ и $-3{,}2$"], ["в", "$-1$ и $-6{,}2$"],
["г", "$-1{,}2$ и $-4$"], ["д", "$2$ и $-7{,}2$"],
],
sol: `Проверим сумму в каждом варианте:
<ul>
<li>а) $1 + (-6{,}2) = -5{,}2$ ✓</li>
<li>б) $-2 + (-3{,}2) = -5{,}2$ ✓</li>
<li>в) $-1 + (-6{,}2) = -7{,}2 \\neq -5{,}2$ &nbsp;<b style="color:#dc2626">✗ — НЕ равна</b></li>
<li>г) $-1{,}2 + (-4) = -5{,}2$ ✓</li>
<li>д) $2 + (-7{,}2) = -5{,}2$ ✓</li>
</ul>
<div class="sol-ans">Ответ: в)</div>`
},
{
text: `Какое из следующих утверждений <b>НЕ</b> верно:`,
opts: [
["а", "сторона правильного шестиугольника равна радиусу описанной около него окружности;"],
["б", "$\\sin 45^{\\circ} = \\cos 45^{\\circ}$;"],
["в", "центр окружности, вписанной в угол, лежит на биссектрисе угла;"],
["г", "в прямоугольном треугольнике есть только один острый угол?"],
],
sol: `<ul>
<li>а) Сторона правильного шестиугольника равна радиусу описанной окружности — <b>верно</b></li>
<li>б) $\\sin 45^{\\circ} = \\cos 45^{\\circ} = \\dfrac{\\sqrt{2}}{2}$ — <b>верно</b></li>
<li>в) Центр вписанной в угол окружности лежит на биссектрисе — <b>верно</b></li>
<li>г) «В прямоугольном треугольнике есть только один острый угол» — <b style="color:#dc2626">НЕВЕРНО</b>: в прямоугольном треугольнике <em>два</em> острых угла (сумма углов $180°$, один равен $90°$, значит два оставшихся — острые)</li>
</ul>
<div class="sol-ans">Ответ: г)</div>`
},
{
text: `Разложите на множители многочлен $25x^2 - 9y^2 + 5x - 3y$.`,
sol: `Первые два слагаемых — разность квадратов, последние два группируем:
$$25x^2 - 9y^2 + 5x - 3y = (25x^2 - 9y^2) + (5x - 3y)$$
$$= (5x - 3y)(5x + 3y) + (5x - 3y)$$
Выносим общий множитель $(5x - 3y)$:
$$= (5x - 3y)(5x + 3y + 1)$$
<div class="sol-ans">Ответ: $(5x - 3y)(5x + 3y + 1)$</div>`
},
{
text: `Найдите значение выражения $2a^2 : b - 4ab$ при $a = 3$, $b = -1{,}5$.`,
sol: `<b>Порядок действий:</b> сначала выполняем возведение в степень, потом умножение и деление слева направо, затем сложение и вычитание.
<br><b>Правило знаков при умножении:</b> минус на минус даёт плюс, минус на плюс даёт минус.
<br><b>Шаг 1.</b> Подставим $a = 3$ и $b = -1{,}5$ в выражение, представив деление через дробь:
$$2a^2 : b - 4ab = \\dfrac{2a^2}{b} - 4ab.$$
<b>Шаг 2.</b> Вычислим $a^2 = 3^2 = 9$ и подставим значения:
$$\\dfrac{2\\cdot 9}{-1{,}5} - 4\\cdot 3\\cdot(-1{,}5).$$
<b>Шаг 3.</b> Выполним первое действие — деление:
$$\\dfrac{18}{-1{,}5} = -12.$$
<b>Шаг 4.</b> Выполним второе действие — умножение трёх чисел (два положительных и одно отрицательное дают отрицательное):
$$4\\cdot 3\\cdot(-1{,}5) = 12\\cdot(-1{,}5) = -18.$$
<b>Шаг 5.</b> Соберём всё, аккуратно раскрыв знак минус перед скобкой:
$$-12 - (-18) = -12 + 18 = 6.$$
<div class="sol-ans">Ответ: $6$</div>`
},
{
text: `Третий член геометрической прогрессии равен $2$, а знаменатель прогрессии равен $3$.
Найдите сумму трёх первых членов этой прогрессии.`,
sol: `<b>Формула $n$-го члена геометрической прогрессии:</b> $a_n = a_1 \\cdot q^{n-1}$, откуда $a_1 = \\dfrac{a_n}{q^{n-1}}$.
<br><b>Связь соседних членов:</b> $a_{n+1} = a_n \\cdot q$.
<br><b>Шаг 1.</b> По условию $a_3 = 2$, $q = 3$. Найдём первый член из $a_3 = a_1 \\cdot q^{2}$:
$$a_1 = \\dfrac{a_3}{q^{2}} = \\dfrac{2}{3^{2}} = \\dfrac{2}{9}.$$
<b>Шаг 2.</b> Найдём второй член, умножив первый на знаменатель $q$:
$$a_2 = a_1 \\cdot q = \\dfrac{2}{9}\\cdot 3 = \\dfrac{2}{3}.$$
<b>Шаг 3.</b> Сложим три первых члена. Приведём к общему знаменателю $9$:
$$S_{3} = a_1 + a_2 + a_3 = \\dfrac{2}{9} + \\dfrac{2}{3} + 2 = \\dfrac{2}{9} + \\dfrac{6}{9} + \\dfrac{18}{9} = \\dfrac{26}{9}.$$
<div class="sol-ans">Ответ: $\\dfrac{26}{9}$</div>`
},
{
text: `В четырёхугольнике $ABCD$ $AD = 5$ см, $AB = 8$ см, $CD = 3\\sqrt{5}$ см,
$\\angle A = 60^{\\circ}$, $\\angle C = 90^{\\circ}$. Найдите длину стороны $BC$.`,
sol: `<b>Теорема косинусов:</b> для треугольника со сторонами $a$, $b$, $c$ и углом $\\gamma$ против стороны $c$ верно $c^2 = a^2 + b^2 - 2ab\\cos\\gamma$.
<br><b>Теорема Пифагора:</b> в прямоугольном треугольнике с катетами $a$, $b$ и гипотенузой $c$ выполняется $c^2 = a^2 + b^2$.
<br><b>Значение:</b> $\\cos 60^{\\circ} = \\dfrac{1}{2}$.
<br><b>Шаг 1. Разобьём четырёхугольник на два треугольника.</b> Проведём диагональ $BD$. Получим треугольники $ABD$ (с известным углом $A=60^{\\circ}$) и $BCD$ (с прямым углом $C=90^{\\circ}$).
<br><b>Шаг 2. Найдём $BD$ из $\\triangle ABD$ по теореме косинусов.</b> Известно $AB = 8$, $AD = 5$, $\\angle A = 60^{\\circ}$:
$$BD^2 = AB^2 + AD^2 - 2\\cdot AB\\cdot AD\\cdot\\cos A = 8^2 + 5^2 - 2\\cdot 8\\cdot 5\\cdot\\dfrac{1}{2}.$$
Вычислим: $64 + 25 - 40 = 49$, значит $BD = \\sqrt{49} = 7$ см.
<br><b>Шаг 3. Найдём $BC$ из $\\triangle BCD$ по теореме Пифагора.</b> Так как $\\angle C = 90^{\\circ}$, то $BD$ — гипотенуза, а $BC$ и $CD$ — катеты. Подставим $CD = 3\\sqrt{5}$, то есть $CD^2 = 9\\cdot 5 = 45$:
$$BC^2 = BD^2 - CD^2 = 49 - 45 = 4 \\implies BC = \\sqrt{4} = 2\\text{ см}.$$
<svg viewBox="0 0 165 215" xmlns="http://www.w3.org/2000/svg" style="max-width:280px;width:100%;height:auto;display:block;margin:10px 0">
<!-- Точные пропорции: AD=5=90px, AB=8=144px, CD=3√5=120.7px, BC=2=36px. Масштаб 18px/см -->
<!-- A=(20,200), D=(110,200), B=(92,75), C=(128,81) -->
<!-- Проверено: AD=90✓ AB=144.3✓ BD=126.3≈7см✓ BC=36.5≈2см✓ CD=120.4≈3√5см✓ ∠A=60°✓ ∠C=90°✓ -->
<polygon points="20,200 110,200 128,81 92,75" fill="rgba(37,99,235,0.07)" stroke="#334155" stroke-width="1.8"/>
<!-- Диагональ BD (пунктир) -->
<line x1="92" y1="75" x2="110" y2="200" stroke="#2563eb" stroke-width="1.4" stroke-dasharray="5,3"/>
<!-- Прямой угол при C=(128,81) — точно вычислен -->
<polygon points="128,81 120,80 119,88 127,89" fill="rgba(0,0,0,0.08)" stroke="#334155" stroke-width="1.2"/>
<!-- Дуга 60° при A=(20,200) -->
<path d="M 42 200 A 22 22 0 0 0 31 181" fill="none" stroke="#475569" stroke-width="1.2"/>
<!-- Метки вершин -->
<text x="6" y="213" font-size="13" font-family="serif" font-style="italic">A</text>
<text x="112" y="213" font-size="13" font-family="serif" font-style="italic">D</text>
<text x="87" y="68" font-size="13" font-family="serif" font-style="italic">B</text>
<text x="131" y="78" font-size="13" font-family="serif" font-style="italic">C</text>
<!-- Длины сторон -->
<text x="62" y="213" font-size="11" text-anchor="middle" fill="#c2410c">5</text>
<text x="46" y="138" font-size="11" text-anchor="middle" fill="#c2410c">8</text>
<text x="125" y="148" font-size="11" fill="#c2410c">3√5</text>
<text x="115" y="78" font-size="11" fill="#c2410c">2</text>
<!-- Диагональ BD -->
<text x="104" y="136" font-size="10" fill="#2563eb">BD=7</text>
<!-- Угол 60° -->
<text x="37" y="192" font-size="10" fill="#475569">60°</text>
</svg>
<div class="sol-ans">Ответ: $BC = 2$ см</div>`
},
{
text: `В первый день туристы прошли $0{,}4$ намеченного пути,
а во второй — преодолели $0{,}3$ намеченного пути.
В третий день им оставалось пройти последние $18$ км.
Каков весь путь туристов за $3$ дня?`,
sol: `<b>Метод введения переменной:</b> обозначаем неизвестную величину буквой и составляем уравнение.
<br><b>Шаг 1. Введём переменную.</b> Пусть $S$ — весь намеченный путь (в километрах).
<br><b>Шаг 2. Выразим пройденную часть пути.</b> В первый день туристы прошли $0{,}4\\cdot S$, во второй — $0{,}3\\cdot S$. Всего за два дня:
$$0{,}4S + 0{,}3S = 0{,}7S.$$
<b>Шаг 3. Выразим оставшийся путь.</b> На третий день туристам осталось пройти весь путь $S$ минус то, что уже пройдено:
$$S - 0{,}7S = 0{,}3S.$$
<b>Шаг 4. Составим уравнение.</b> По условию в третий день осталось $18$ км:
$$0{,}3S = 18.$$
<b>Шаг 5.</b> Разделим обе части на $0{,}3$:
$$S = \\dfrac{18}{0{,}3} = 60\\text{ км}.$$
<div class="sol-ans">Ответ: $60$ км</div>`
},
{
text: `При каком значении $a$ графики функций $y = (a-3)x + 2$ и $y = 2x - 2$
не имеют общих точек? Ответ обоснуйте.`,
sol: `Графики линейных функций не имеют общих точек тогда и только тогда, когда прямые <b>параллельны</b>: угловые коэффициенты равны, свободные члены различны.
<br><b>Условие параллельности:</b> $a - 3 = 2 \\implies a = 5$
<br><b>Проверка:</b> при $a = 5$ получаем $y = 2x + 2$ и $y = 2x - 2$. Угловые коэффициенты равны ($2 = 2$), свободные члены различны ($2 \\neq -2$) — прямые параллельны ✓
<div class="sol-ans">Ответ: $a = 5$</div>`
},
{
text: `Диагонали ромба относятся как $3:4$, периметр ромба равен $200$ см.
Найдите площадь круга, окружность которого вписана в ромб.`,
sol: `<b>Свойство диагоналей ромба:</b> диагонали ромба взаимно перпендикулярны и точкой пересечения делятся пополам.
<br><b>Формула площади ромба:</b> $S_{\\text{ромб}} = \\dfrac{d_{1}\\cdot d_{2}}{2}$.
<br><b>Формула радиуса вписанной окружности:</b> $r = \\dfrac{S}{p}$ ($p$ — полупериметр).
<br><b>Формула площади круга:</b> $S_{\\text{кр}} = \\pi r^{2}$.
<br><b>Шаг 1.</b> По условию диагонали относятся как $3:4$. Введём параметр $k$: $d_{1} = 3k$, $d_{2} = 4k$. Половины диагоналей: $\\dfrac{3k}{2}$ и $2k$. Они являются катетами прямоугольного треугольника, гипотенуза которого — сторона ромба. По <b>теореме Пифагора</b>:
$$a = \\sqrt{\\left(\\dfrac{3k}{2}\\right)^{2} + (2k)^{2}} = \\sqrt{\\dfrac{9k^{2}}{4} + \\dfrac{16k^{2}}{4}} = \\sqrt{\\dfrac{25k^{2}}{4}} = \\dfrac{5k}{2}.$$
<b>Шаг 2.</b> Из периметра $P = 4a = 200$ найдём сторону: $a = 50$ см. Тогда $\\dfrac{5k}{2} = 50 \\implies k = 20$. Значит:
$$d_{1} = 3\\cdot 20 = 60\\text{ см}, \\quad d_{2} = 4\\cdot 20 = 80\\text{ см}.$$
<b>Шаг 3.</b> Площадь ромба:
$$S = \\dfrac{60\\cdot 80}{2} = 2400\\text{ см}^{2}.$$
<b>Шаг 4.</b> Полупериметр $p = \\dfrac{P}{2} = 100$ см. Радиус вписанной окружности:
$$r = \\dfrac{S}{p} = \\dfrac{2400}{100} = 24\\text{ см}.$$
<b>Шаг 5.</b> Площадь круга:
$$S_{\\text{кр}} = \\pi r^{2} = \\pi\\cdot 24^{2} = 576\\pi\\text{ см}^{2}.$$
<svg viewBox="0 0 260 230" xmlns="http://www.w3.org/2000/svg" style="max-width:260px;width:100%;height:auto;display:block;margin:10px 0">
<polygon points="70,115 130,35 190,115 130,195" fill="rgba(37,99,235,0.07)" stroke="#334155" stroke-width="1.8"/>
<line x1="70" y1="115" x2="190" y2="115" stroke="#94a3b8" stroke-width="1" stroke-dasharray="5,3"/>
<line x1="130" y1="35" x2="130" y2="195" stroke="#94a3b8" stroke-width="1" stroke-dasharray="5,3"/>
<polyline points="138,115 138,123 130,123" fill="none" stroke="#475569" stroke-width="1.2"/>
<circle cx="130" cy="115" r="48" fill="rgba(220,38,38,0.08)" stroke="#dc2626" stroke-width="1.5"/>
<circle cx="130" cy="115" r="2.5" fill="#1e293b"/>
<line x1="130" y1="115" x2="130" y2="67" stroke="#dc2626" stroke-width="1" stroke-dasharray="3,2"/>
<text x="134" y="93" font-size="10" fill="#dc2626">r=24</text>
<text x="97" y="110" font-size="10" fill="#475569" text-anchor="middle">30</text>
<text x="163" y="110" font-size="10" fill="#475569" text-anchor="middle">30</text>
<text x="143" y="78" font-size="10" fill="#475569">40</text>
<text x="143" y="158" font-size="10" fill="#475569">40</text>
</svg>
<div class="sol-ans">Ответ: $576\\pi$ см²</div>`
},
]
};