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
+194
View File
@@ -0,0 +1,194 @@
VARIANTS[33] = {
label: "Вариант 33",
tasks: [
{
text: `Отношение чисел $16$ и $2$ равно:`,
opts: [
["а", "$8$"], ["б", "$32$"], ["в", "$16$"],
["г", "$14$"], ["д", "$1$"],
],
sol: `$$16 : 2 = 8$$
<div class="sol-ans">Ответ: а)&ensp;$8$</div>`
},
{
text: `Запись выражения $\\dfrac{m}{n} - 1$ в виде дроби имеет вид:`,
opts: [
["а", "$\\dfrac{m-1}{n}$"], ["б", "$\\dfrac{1-m}{n}$"], ["в", "$\\dfrac{m-n}{n}$"],
["г", "$m - n$"], ["д", "$\\dfrac{n-m}{n}$"],
],
sol: `Приводим к общему знаменателю $n$:
$$\\dfrac{m}{n} - 1 = \\dfrac{m}{n} - \\dfrac{n}{n} = \\dfrac{m-n}{n}$$
<div class="sol-ans">Ответ: в)&ensp;$\\dfrac{m-n}{n}$</div>`
},
{
text: `Какое из следующих утверждений <b>НЕ</b> верно:`,
opts: [
["а", "если четырёхугольник $ABCD$ вписан в окружность, то $\\angle A + \\angle C = 180^{\\circ}$;"],
["б", "любая медиана равнобедренного треугольника является его высотой;"],
["в", "вписанный угол равен половине градусной меры дуги, на которую он опирается;"],
["г", "тангенс острого угла прямоугольного треугольника равен отношению противолежащего катета к прилежащему?"],
],
sol: `<ul>
<li>а) Противоположные углы вписанного четырёхугольника дополняют друг друга до $180°$ — <b>верно</b></li>
<li>б) «Любая медиана равнобедренного треугольника — это высота» — <b style="color:#dc2626">НЕВЕРНО</b>. Медианой-высотой является только медиана, проведённая из вершинного угла к <em>основанию</em>. Медианы к боковым сторонам высотами не являются.</li>
<li>в) Вписанный угол $= \\frac{1}{2}$ дуги — <b>верно</b></li>
<li>г) $\\tan\\alpha = \\dfrac{\\text{противолежащий катет}}{\\text{прилежащий катет}}$ — <b>верно</b></li>
</ul>
<div class="sol-ans">Ответ: б)</div>`
},
{
text: `Решите неравенство $\\dfrac{x}{2} + 3 > 0$ и укажите наименьшее целое решение этого неравенства.`,
sol: `$$\\dfrac{x}{2} > -3 \\implies x > -6$$
Решение: $x\\in(-6;\\,+\\infty)$. Наименьшее целое число, <em>строго большее</em> $-6$ — это $\\mathbf{-5}$.
<div class="sol-ans">Ответ: $x > -6$; наименьшее целое решение $= -5$</div>`
},
{
text: `В угол $A$ вписана окружность с центром в точке $O$, которая касается сторон угла
в точках $B$ и $C$. Найдите угол $BCO$, если $\\angle A = 64^{\\circ}$.`,
sol: `<b>Свойство касательной к окружности:</b> радиус, проведённый в точку касания, перпендикулярен касательной.
<br>Значит, $\\angle OBA = 90°$ и $\\angle OCA = 90°$.
<svg viewBox="0 0 205 140" xmlns="http://www.w3.org/2000/svg" style="max-width:250px;width:100%;height:auto;display:block;margin:8px 0">
<line x1="10" y1="120" x2="195" y2="120" stroke="#334155" stroke-width="1.8"/>
<line x1="30" y1="120" x2="83" y2="12" stroke="#334155" stroke-width="1.8"/>
<circle cx="75" cy="92" r="28" fill="rgba(37,99,235,0.08)" stroke="#2563eb" stroke-width="1.5"/>
<line x1="75" y1="92" x2="75" y2="120" stroke="#2563eb" stroke-width="1.2" stroke-dasharray="4,2"/>
<line x1="75" y1="92" x2="50" y2="80" stroke="#2563eb" stroke-width="1.2" stroke-dasharray="4,2"/>
<line x1="75" y1="120" x2="50" y2="80" stroke="#475569" stroke-width="1.5"/>
<polygon points="75,120 83,120 83,112 75,112" fill="none" stroke="#334155" stroke-width="1.2"/>
<polygon points="50,80 53,74 59,77 56,83" fill="none" stroke="#334155" stroke-width="1.2"/>
<path d="M 48 120 A 18 18 0 0 0 38 104" fill="none" stroke="#555" stroke-width="1.2"/>
<circle cx="75" cy="92" r="3" fill="#334155"/>
<circle cx="75" cy="120" r="3" fill="#2563eb"/>
<circle cx="50" cy="80" r="3" fill="#2563eb"/>
<text x="15" y="134" font-size="14" font-family="serif" font-style="italic">A</text>
<text x="78" y="88" font-size="12" font-family="serif" font-style="italic">O</text>
<text x="78" y="134" font-size="12" font-family="serif" font-style="italic" fill="#2563eb">B</text>
<text x="35" y="78" font-size="12" font-family="serif" font-style="italic" fill="#2563eb">C</text>
<text x="49" y="110" font-size="10" fill="#555">64°</text>
<text x="54" y="110" font-size="10" fill="#16a34a">32°</text>
<text x="63" y="108" font-size="10" fill="#dc2626">?</text>
</svg>
<b>Шаг 1.</b> Найдём угол $BOC$ в четырёхугольнике $ABOC$.
<br>По <b>теореме о сумме углов четырёхугольника</b>: сумма углов любого четырёхугольника равна $360°$.
$$\\angle A + \\angle OBA + \\angle BOC + \\angle OCA = 360°$$
Подставляем известные углы:
$$64° + 90° + \\angle BOC + 90° = 360°$$
$$\\angle BOC = 360° - 244° = 116°$$
<b>Шаг 2.</b> Рассмотрим треугольник $OBC$.
<br>Так как $OB$ и $OC$ — радиусы одной окружности, то $OB = OC$. Значит, $\\triangle OBC$ <b>равнобедренный</b> с основанием $BC$.
<br>По <b>свойству равнобедренного треугольника:</b> углы при основании равны.
$$\\angle OBC = \\angle BCO$$
<b>Шаг 3.</b> Сумма углов треугольника $OBC$ равна $180°$:
$$\\angle BCO = \\dfrac{180° - \\angle BOC}{2} = \\dfrac{180° - 116°}{2} = \\dfrac{64°}{2} = 32°$$
<div class="sol-ans">Ответ: $\\angle BCO = 32°$</div>`
},
{
text: `В бензобак грузового автомобиля МАЗ залили $200$ л бензина.
В каждый день пути расходовалось $m$ литров бензина.
На сколько дней хватит $200$ л бензина?
Составьте формулу зависимости числа дней $k$ от количества литров бензина,
расходуемого каждый день.`,
sol: `<b>Метод составления уравнения по условию задачи.</b>
<br><b>Шаг 1.</b> Введём обозначение. Пусть $k$ — искомое число дней, на которые хватит бензина.
<br><b>Шаг 2.</b> По условию за один день расходуется $m$ литров. Значит, за $k$ дней израсходуется $m\\cdot k$ литров.
<br><b>Шаг 3.</b> Так как в баке всего $200$ л и весь бензин будет израсходован за $k$ дней, составим уравнение:
$$m\\cdot k = 200$$
<b>Шаг 4.</b> Выразим $k$. Разделим обе части на $m$ (это можно сделать, так как $m\\ne 0$):
$$k = \\dfrac{200}{m}$$
<div class="sol-ans">Ответ: бензина хватит на $\\dfrac{200}{m}$ дней;&ensp; формула: $k = \\dfrac{200}{m}$</div>`
},
{
text: `Решите уравнение $\\dfrac{3}{8} : \\dfrac{3}{4} = y : \\dfrac{2}{3}$.`,
sol: `<b>Правило деления дробей:</b> чтобы разделить на дробь, надо умножить на дробь, обратную делителю: $\\dfrac{a}{b} : \\dfrac{c}{d} = \\dfrac{a}{b} \\cdot \\dfrac{d}{c}$.
<br><b>Шаг 1.</b> Вычислим левую часть уравнения:
$$\\dfrac{3}{8}:\\dfrac{3}{4} = \\dfrac{3}{8}\\cdot\\dfrac{4}{3} = \\dfrac{12}{24} = \\dfrac{1}{2}$$
<b>Шаг 2.</b> Уравнение принимает вид:
$$\\dfrac{1}{2} = y : \\dfrac{2}{3}$$
По правилу деления, $y : \\dfrac{2}{3} = y \\cdot \\dfrac{3}{2}$. Значит:
$$\\dfrac{1}{2} = y \\cdot \\dfrac{3}{2}$$
<b>Шаг 3.</b> Находим $y$. Умножим обе части на $\\dfrac{2}{3}$:
$$y = \\dfrac{1}{2} \\cdot \\dfrac{2}{3} = \\dfrac{1}{3}$$
<b>Проверка:</b> $\\dfrac{1}{3} : \\dfrac{2}{3} = \\dfrac{1}{3} \\cdot \\dfrac{3}{2} = \\dfrac{1}{2}$
<div class="sol-ans">Ответ: $y = \\dfrac{1}{3}$</div>`
},
{
text: `Из Фаниполя в Юцковские родники, расстояние между которыми равно $20$ км, вышел турист.
Одновременно с ним по тому же маршруту из Юцковских родников в Фаниполь выехал велосипедист,
скорость которого в $4$ раза больше скорости пешехода.
Сколько километров осталось преодолеть туристу до Юцковских родников
после встречи с велосипедистом?`,
sol: `<b>Метод введения переменной и составления уравнения движения навстречу.</b> При движении навстречу скорости участников складываются: $v_{\\text{сбл}} = v_1 + v_2$.
<br><b>Шаг 1.</b> Пусть скорость пешехода равна $v$ км/ч. По условию скорость велосипедиста в $4$ раза больше, значит, она равна $4v$ км/ч.
<br><b>Шаг 2.</b> Так как они движутся навстречу друг другу, скорость сближения равна сумме скоростей:
$$v_{\\text{сбл}} = v + 4v = 5v\\text{ км/ч}$$
<br><b>Шаг 3.</b> Пусть $t$ — время от старта до встречи. За это время участники вместе прошли всё расстояние $20$ км:
$$5v\\cdot t = 20 \\implies v\\cdot t = 4$$
Значит, путь $v\\cdot t$, пройденный туристом до встречи, равен $4$ км.
<br><b>Шаг 4.</b> Так как турист шёл из Фаниполя, ему осталось пройти:
$$20 - 4 = 16\\text{ км}$$
<div class="sol-ans">Ответ: $16$ км</div>`
},
{
text: `Основания трапеции равны $10$ см и $35$ см, боковые стороны — $15$ см и $20$ см.
Найдите площадь трапеции.`,
sol: `<b>Формула площади трапеции:</b> $S = \\dfrac{a+b}{2}\\cdot h$, где $a$ и $b$ — основания, $h$ — высота.
<br>Чтобы найти высоту, опустим из вершин верхнего основания перпендикуляры $BH$ и $CK$ на нижнее основание.
<svg viewBox="0 0 225 150" xmlns="http://www.w3.org/2000/svg" style="max-width:260px;width:100%;height:auto;display:block;margin:8px 0">
<polygon points="15,122 60,62 110,62 190,122" fill="rgba(37,99,235,0.07)" stroke="#334155" stroke-width="1.8"/>
<line x1="60" y1="62" x2="60" y2="122" stroke="#16a34a" stroke-width="1.5" stroke-dasharray="4,3"/>
<line x1="110" y1="62" x2="110" y2="122" stroke="#16a34a" stroke-width="1.5" stroke-dasharray="4,3"/>
<polygon points="60,122 68,122 68,114 60,114" fill="none" stroke="#334155" stroke-width="1.2"/>
<polygon points="110,122 118,122 118,114 110,114" fill="none" stroke="#334155" stroke-width="1.2"/>
<text x="2" y="132" font-size="12" font-family="serif" font-style="italic">A</text>
<text x="53" y="56" font-size="12" font-family="serif" font-style="italic">B</text>
<text x="113" y="56" font-size="12" font-family="serif" font-style="italic">C</text>
<text x="192" y="132" font-size="12" font-family="serif" font-style="italic">D</text>
<text x="57" y="136" font-size="10" font-family="serif" font-style="italic">H</text>
<text x="107" y="136" font-size="10" font-family="serif" font-style="italic">K</text>
<text x="78" y="57" font-size="11" fill="#334155" text-anchor="middle">10</text>
<text x="100" y="138" font-size="11" fill="#334155" text-anchor="middle">35</text>
<text x="30" y="98" font-size="11" fill="#334155">15</text>
<text x="158" y="98" font-size="11" fill="#334155">20</text>
<text x="64" y="96" font-size="11" fill="#16a34a">h</text>
<text x="32" y="135" font-size="10" fill="#475569">9</text>
<text x="147" y="135" font-size="10" fill="#475569">16</text>
<text x="83" y="135" font-size="10" fill="#475569">10</text>
</svg>
<b>Шаг 1.</b> Так как $BH\\parallel CK$ и оба перпендикулярны $AD$, четырёхугольник $BCKH$ — прямоугольник. Значит, $HK = BC = 10$ см.
<br>Тогда сумма «выступов» по краям:
$$AH + KD = AD - HK = 35 - 10 = 25\\text{ см}$$
<b>Шаг 2.</b> По <b>теореме Пифагора</b> ($c^2 = a^2 + b^2$) в прямоугольных треугольниках $ABH$ и $DCK$:
$$AH^2 + h^2 = AB^2 = 15^2 = 225$$
$$KD^2 + h^2 = CD^2 = 20^2 = 400$$
<b>Шаг 3.</b> Вычтем первое равенство из второго:
$$KD^2 - AH^2 = 400 - 225 = 175$$
По <b>формуле разности квадратов</b> ($a^2 - b^2 = (a-b)(a+b)$):
$$(KD+AH)(KD-AH) = 175$$
Поскольку $KD + AH = 25$:
$$25\\cdot(KD-AH) = 175 \\implies KD - AH = 7$$
<b>Шаг 4.</b> Из системы $\\{AH + KD = 25;\\; KD - AH = 7\\}$ получаем: $AH = 9$, $KD = 16$.
<br><b>Шаг 5.</b> Находим высоту $h$ по теореме Пифагора:
$$h^2 = 225 - AH^2 = 225 - 81 = 144 \\implies h = 12\\text{ см}$$
<b>Шаг 6.</b> Подставляем в формулу площади:
$$S = \\dfrac{10+35}{2}\\cdot 12 = \\dfrac{45}{2}\\cdot 12 = 270\\text{ см}^2$$
<div class="sol-ans">Ответ: $270$ см²</div>`
},
{
text: `Известно, что $x_1$ и $x_2$ — корни уравнения $0{,}1x^2 + 0{,}7x - 1{,}2 = 0$.
Найдите значение выражения $\\dfrac{x_1 x_2}{-3x_1^2 - 3x_2^2}$.`,
sol: `<b>Теорема Виета:</b> для приведённого уравнения $x^2 + px + q = 0$ корни $x_1$ и $x_2$ удовлетворяют:
$$x_1 + x_2 = -p, \\quad x_1 \\cdot x_2 = q$$
<b>Шаг 1.</b> Приведём уравнение к виду $x^2 + px + q = 0$. Разделим обе части на $0{,}1$:
$$x^2 + 7x - 12 = 0$$
<b>Шаг 2.</b> По теореме Виета:
$$x_1 + x_2 = -7, \\quad x_1 \\cdot x_2 = -12$$
<b>Шаг 3.</b> Чтобы найти $x_1^2 + x_2^2$, воспользуемся <b>формулой квадрата суммы:</b>
$$(x_1 + x_2)^2 = x_1^2 + 2x_1 x_2 + x_2^2$$
Отсюда:
$$x_1^2 + x_2^2 = (x_1 + x_2)^2 - 2x_1 x_2 = (-7)^2 - 2\\cdot(-12) = 49 + 24 = 73$$
<b>Шаг 4.</b> Подставляем в исходное выражение:
$$\\dfrac{x_1 x_2}{-3x_1^2 - 3x_2^2} = \\dfrac{x_1 x_2}{-3(x_1^2 + x_2^2)} = \\dfrac{-12}{-3\\cdot 73} = \\dfrac{12}{219} = \\dfrac{4}{73}$$
<div class="sol-ans">Ответ: $\\dfrac{4}{73}$</div>`
},
]
};