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[18] = {
label: "Вариант 18",
tasks: [
{
text: `Определите рисунок, на котором изображён график функции $y = |x| + 1$:`,
figure: `<img src="/img/exam9/v18_t1.png" class="task-fig" />`,
sol: `Функция $y=|x|+1$:
<ul>
<li>При $x=0$: $y=1$ — <b>вершина V-образной фигуры в точке $(0;\\,1)$</b></li>
<li>Пересечение с осью $Ox$: $|x|+1=0 \\implies |x|=-1$ — <b>нет пересечений</b> (весь график выше оси $Ox$)</li>
<li>При $x>0$: $y=x+1$ (луч вправо-вверх); при $x<0$: $y=-x+1$ (луч влево-вверх)</li>
<li>График симметричен относительно оси $Oy$</li>
</ul>
На рисунке ищем V-образную кривую с вершиной в точке $(0;\\,1)$, целиком выше оси $Ox$.
<div class="sol-ans">Ответ: рисунок с V-образным графиком, вершина которого в точке $(0;\\,1)$</div>`
},
{
text: `Из данных чисел выберите те, которые <b>НЕ</b> входят в область определения выражения $\\dfrac{2}{\\sqrt{3x-9}}$:`,
opts: [
["а", "$\\dfrac{1}{3}$"], ["б", "$3{,}5$"], ["в", "$3$"],
["г", "$4$"], ["д", "$5$"],
],
sol: `Знаменатель не равен нулю и подкоренное выражение положительно: $3x-9>0 \\Rightarrow x>3$.
<br>ОДЗ: $x>3$. Проверяем:
<ul>
<li>а) $\\frac{1}{3}<3$ ✗ — <b>НЕ входит</b></li>
<li>б) $3{,}5>3$ ✓ — входит</li>
<li>в) $3=3$ → знаменатель $=0$ ✗ — <b>НЕ входит</b></li>
<li>г) $4>3$ ✓ — входит</li>
<li>д) $5>3$ ✓ — входит</li>
</ul>
<div class="sol-ans">Ответ: а) и в)</div>`
},
{
text: `Какое из следующих утверждений <b>НЕ</b> верно:`,
opts: [
["а", "у правильного $n$-угольника все углы равны;"],
["б", "по теореме косинусов для треугольника со сторонами $a$, $b$, $c$ верно, что $b^2 = a^2 + c^2 - 2ac\\cos\\beta$;"],
["в", "площадь прямоугольного треугольника равна половине произведения катетов;"],
["г", "длина окружности с радиусом $R$ равна $\\pi R$?"],
],
sol: `<ul>
<li>а) Правильный $n$-угольник — все углы равны — <b>верно</b></li>
<li>б) Теорема косинусов $b^2=a^2+c^2-2ac\\cos\\beta$ — <b>верно</b></li>
<li>в) $S=\\frac{1}{2}\\cdot\\text{катет}_1\\cdot\\text{катет}_2$ — <b>верно</b></li>
<li>г) Длина окружности $=\\pi R$ — <b style="color:#dc2626">НЕВЕРНО</b></li>
</ul>
Длина окружности равна $2\\pi R$, а не $\\pi R$.
<div class="sol-ans">Ответ: г)</div>`
},
{
text: `Найдите значение выражения $x \\cdot y$, где $(x;\\, y)$ — решение системы уравнений
$$\\begin{cases} x + y = 5, \\\\[4pt] 3x - y = 7. \\end{cases}$$`,
sol: `Сложим оба уравнения: $4x=12 \\Rightarrow x=3$.
<br>Из первого: $y=5-3=2$.
$$x\\cdot y = 3\\cdot 2 = 6$$
<div class="sol-ans">Ответ: $6$</div>`
},
{
text: `Четырёхугольник $ABCD$ вписан в окружность, центр $O$ окружности лежит на стороне $AD$.
Найдите угол $BCD$, если угол $ADB$ равен $32^{\\circ}$.`,
sol: `<b>Ключевой факт:</b> $O$ лежит на $AD$ $\\Rightarrow$ $AD$ — диаметр окружности.
<svg viewBox="0 0 195 155" xmlns="http://www.w3.org/2000/svg" style="max-width:195px;width:100%;height:auto;display:block;margin:10px 0">
<!-- окружность: O=(90,90), R=60 -->
<circle cx="90" cy="90" r="60" fill="none" stroke="#cbd5e1" stroke-width="1.2"/>
<!-- четырёхугольник ABCD: A=(30,90), D=(150,90), B=(60,38), C=(130,38) на окружности -->
<polygon points="30,90 60,38 130,38 150,90" fill="rgba(37,99,235,0.06)" stroke="#334155" stroke-width="1.8"/>
<!-- диаметр AD (горизонталь) -->
<line x1="30" y1="90" x2="150" y2="90" stroke="#475569" stroke-width="1.8"/>
<!-- диагональ DB (синяя) -->
<line x1="150" y1="90" x2="60" y2="38" stroke="#2563eb" stroke-width="1.4" stroke-dasharray="5,3"/>
<!-- центр O на AD -->
<circle cx="90" cy="90" r="3.5" fill="#e11d48"/>
<text x="88" y="104" font-size="10" fill="#e11d48" text-anchor="middle">O</text>
<!-- знак прямого угла при B: ∠ABD=90° -->
<path d="M55,44 L61,50 L67,44" fill="none" stroke="#16a34a" stroke-width="1.3"/>
<text x="52" y="60" font-size="10" fill="#16a34a">90°</text>
<!-- дуга ∠ADB=32° при D=(150,90) -->
<path d="M132,90 A18,18 0 0,0 137,73" fill="none" stroke="#334155" stroke-width="1.2"/>
<text x="118" y="82" font-size="9" fill="#334155">32°</text>
<!-- метки вершин -->
<text x="13" y="98" font-size="13" font-family="serif" font-style="italic">A</text>
<text x="153" y="98" font-size="13" font-family="serif" font-style="italic">D</text>
<text x="44" y="32" font-size="13" font-family="serif" font-style="italic">B</text>
<text x="132" y="32" font-size="13" font-family="serif" font-style="italic">C</text>
<!-- ∠BCD при C -->
<text x="110" y="55" font-size="10" fill="#e11d48">122°</text>
</svg>
<b>Шаг 1.</b> $AD$ — диаметр $\\Rightarrow$ $\\angle ABD = 90°$ (вписанный угол, опирающийся на диаметр).
<br><b>Шаг 2.</b> В треугольнике $ABD$: $\\angle ABD=90°$, $\\angle ADB=32°$:
$$\\angle BAD = 180° - 90° - 32° = 58°$$
<b>Шаг 3.</b> $ABCD$ — вписанный четырёхугольник, противоположные углы в сумме дают $180°$:
$$\\angle BCD = 180° - \\angle BAD = 180° - 58° = 122°$$
<div class="sol-ans">Ответ: $\\angle BCD = 122°$</div>`
},
{
text: `Найдите количество целых решений неравенства $x^2 + 4x < 12$.`,
sol: `<b>Метод интервалов для квадратного неравенства:</b> переносим всё в одну часть, раскладываем на множители и находим знаки.
<br><b>Шаг 1.</b> Переносим $12$ влево: $x^2+4x-12\\lt 0$.
<br><b>Шаг 2.</b> Раскладываем на множители. Ищем два числа с произведением $-12$ и суммой $4$ — это $6$ и $-2$, поэтому $x^2+4x-12=(x+6)(x-2)$.
<br><b>Шаг 3.</b> Решаем $(x+6)(x-2)\\lt 0$. Произведение отрицательно, когда множители разных знаков, значит $-6\\lt x\\lt 2$.
<svg viewBox="0 0 260 52" xmlns="http://www.w3.org/2000/svg" style="max-width:260px;width:100%;height:auto;display:block;margin:10px 0">
<defs><marker id="a18t6" 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="26" x2="248" y2="26" stroke="#bbb" stroke-width="1.2" marker-end="url(#a18t6)"/>
<line x1="30" y1="22" x2="30" y2="30" stroke="#777" stroke-width="1"/><text x="30" y="44" font-size="10" text-anchor="middle" fill="#555">6</text>
<line x1="75" y1="22" x2="75" y2="30" stroke="#777" stroke-width="1"/><text x="75" y="44" font-size="10" text-anchor="middle" fill="#555">4</text>
<line x1="120" y1="22" x2="120" y2="30" stroke="#777" stroke-width="1"/><text x="120" y="44" font-size="10" text-anchor="middle" fill="#555">2</text>
<line x1="165" y1="22" x2="165" y2="30" stroke="#777" stroke-width="1"/><text x="165" y="44" font-size="10" text-anchor="middle" fill="#555">0</text>
<line x1="210" y1="22" x2="210" y2="30" stroke="#777" stroke-width="1"/><text x="210" y="44" font-size="10" text-anchor="middle" fill="#555">2</text>
<line x1="30" y1="26" x2="210" y2="26" stroke="#2563eb" stroke-width="4" stroke-linecap="round" opacity="0.55"/>
<circle cx="30" cy="26" r="5" fill="white" stroke="#2563eb" stroke-width="2"/>
<circle cx="210" cy="26" r="5" fill="white" stroke="#2563eb" stroke-width="2"/>
</svg>
<b>Шаг 4.</b> Выписываем целые числа из интервала $(-6;\\;2)$, не включая концы (неравенство строгое): $-5,\\,-4,\\,-3,\\,-2,\\,-1,\\,0,\\,1$ — всего <b>7</b> чисел.
<div class="sol-ans">Ответ: $7$</div>`
},
{
text: `Найдите $75\\%$ от значения выражения $\\dfrac{62^2 - 12^2 + 74 \\cdot 46}{53^2 - 21^2}$.`,
sol: `<b>Формула разности квадратов:</b> $a^2-b^2=(a-b)(a+b)$. <b>Правило процентов:</b> $p\\%$ от числа $N$ равно $\\dfrac{p}{100}\\cdot N$.
<br><b>Шаг 1.</b> Преобразуем числитель. По формуле разности квадратов:
$$62^2-12^2 = (62-12)(62+12) = 50\\cdot 74.$$
Значит, в числителе $50\\cdot 74 + 74\\cdot 46$. Множитель $74$ общий, выносим его за скобки:
$$50\\cdot 74 + 74\\cdot 46 = 74\\cdot(50+46) = 74\\cdot 96 = 7104.$$
<b>Шаг 2.</b> Преобразуем знаменатель аналогично:
$$53^2-21^2 = (53-21)(53+21) = 32\\cdot 74 = 2368.$$
<b>Шаг 3.</b> Делим числитель на знаменатель — общий множитель $74$ сокращается:
$$\\dfrac{74\\cdot 96}{32\\cdot 74} = \\dfrac{96}{32} = 3.$$
<b>Шаг 4.</b> Находим $75\\%$ от полученного числа:
$$75\\%\\text{ от }3 = \\dfrac{75}{100}\\cdot 3 = 0{,}75\\cdot 3 = 2{,}25.$$
<div class="sol-ans">Ответ: $2{,}25$</div>`
},
{
text: `Найдите значение выражения $a + x_0$, где $a$ — отрицательное число,
при котором левая часть уравнения $4x^2 + ax + 9 = 0$ является квадратом разности,
а $x_0$ — корень уравнения.`,
sol: `<b>Формула квадрата разности:</b> $(A-B)^2 = A^2 - 2AB + B^2$.
<br><b>Шаг 1.</b> Заметим, что $4x^2=(2x)^2$ и $9=3^2$. Значит, представляем выражение в виде $(2x-3)^2$ или $(2x+3)^2$.
<br><b>Шаг 2.</b> Раскрываем квадраты:
<br>$(2x-3)^2 = 4x^2-12x+9$ — здесь средний коэффициент $-12$;
<br>$(2x+3)^2 = 4x^2+12x+9$ — здесь средний коэффициент $+12$.
<br><b>Шаг 3.</b> По условию $a$ отрицательное, значит $a=-12$.
<br><b>Шаг 4.</b> Решаем уравнение $4x^2-12x+9=(2x-3)^2=0$. Отсюда $2x-3=0$, и $x_0=\\dfrac{3}{2}$.
<br><b>Шаг 5.</b> Находим $a+x_0$:
$$a+x_0 = -12+\\dfrac{3}{2} = -10{,}5$$
<div class="sol-ans">Ответ: $-10{,}5$</div>`
},
{
text: `В равнобедренной трапеции $ABCD$ с основаниями $AD$ и $BC$ проведена высота $CH$.
Найдите площадь трапеции, если $CH = 12$ см, диагональ $BD = 15$ см.`,
sol: `<b>Свойство равнобедренной трапеции:</b> если из вершины меньшего основания опустить высоту на большее основание, то её основание отстоит от ближайшей вершины большего основания на $\\dfrac{AD-BC}{2}$.
<br><b>Формула площади трапеции:</b> $S = \\dfrac{a+b}{2}\\cdot h$ — произведение средней линии на высоту.
<br><b>Теорема Пифагора:</b> в прямоугольном треугольнике $c^2=a^2+b^2$.
<svg viewBox="0 0 195 100" xmlns="http://www.w3.org/2000/svg" style="max-width:195px;width:100%;height:auto;display:block;margin:10px 0">
<polygon points="20,80 164,80 116,8 68,8" fill="rgba(37,99,235,0.07)" stroke="#334155" stroke-width="1.8"/>
<line x1="116" y1="8" x2="116" y2="80" stroke="#e11d48" stroke-width="1.5" stroke-dasharray="4,2"/>
<path d="M109,80 L109,73 L116,73" fill="none" stroke="#555" stroke-width="1.2"/>
<line x1="164" y1="80" x2="68" y2="8" stroke="#2563eb" stroke-width="1.5" stroke-dasharray="5,3"/>
<text x="5" y="92" font-size="13" font-family="serif" font-style="italic">A</text>
<text x="166" y="92" font-size="13" font-family="serif" font-style="italic">D</text>
<text x="117" y="5" font-size="13" font-family="serif" font-style="italic">C</text>
<text x="54" y="5" font-size="13" font-family="serif" font-style="italic">B</text>
<text x="117" y="92" font-size="10" fill="#334155">H</text>
<text x="118" y="50" font-size="11" fill="#e11d48">CH=12</text>
<text x="80" y="54" font-size="11" fill="#2563eb">BD=15</text>
</svg>
<b>Шаг 1.</b> Введём координаты: $A=(0;0)$, $D=(AD;0)$, $C=(AD - p;\\,12)$, $B=(p;\\,12)$, где $p=\\dfrac{AD-BC}{2}$. Это даёт высоту $CH=12$, опущенную из $C$ в точку $H=(AD-p;\\,0)$.
<br><b>Шаг 2.</b> Найдём $DH$ — отрезок от $D$ до основания высоты:
$$DH = AD - (AD-p) = p = \\dfrac{AD-BC}{2}$$
<b>Шаг 3.</b> Замечаем: средняя линия трапеции равна $\\dfrac{AD+BC}{2}$, а длина $BH$ (горизонтальная проекция диагонали $BD$) как раз и равна $AD-p = \\dfrac{AD+BC}{2}$ — это средняя линия.
<br><b>Шаг 4.</b> Треугольник $BHD$ прямоугольный (так как $CH\\perp AD$ и $BH\\parallel AD$). По теореме Пифагора:
$$\\text{средняя линия} = BH = \\sqrt{BD^2 - CH^2} = \\sqrt{15^2-12^2} = \\sqrt{225-144} = \\sqrt{81} = 9\\text{ см}$$
<b>Шаг 5.</b> Применяем формулу площади:
$$S = \\text{средняя линия}\\cdot h = 9\\cdot 12 = 108\\text{ см}^2$$
<div class="sol-ans">Ответ: $108$ см²</div>`
},
{
text: `В аквацентре, который расположен в городе Гродно, один из бассейнов можно заполнять
через две трубы, причём заполнение до максимальной метки через вторую —
на $5$ часов быстрее, чем через первую. Заполнение бассейна через обе трубы
одновременно продолжается не более $6$ часов.
За какое наибольшее количество часов можно заполнить бассейн через вторую трубу?`,
sol: `Пусть вторая труба заполняет за $t_2$ часов, тогда первая — за $t_1=t_2+5$ часов.
<br>Условие «<b>не более 6 часов</b>» означает, что совместная скорость $\\geq \\dfrac{1}{6}$:
$$\\frac{1}{t_1}+\\frac{1}{t_2} \\geq \\frac{1}{6}$$
$$\\frac{1}{t_2+5}+\\frac{1}{t_2} \\geq \\frac{1}{6}$$
$$\\frac{2t_2+5}{t_2(t_2+5)} \\geq \\frac{1}{6}$$
$$6(2t_2+5) \\geq t_2(t_2+5)$$
$$12t_2+30 \\geq t_2^2+5t_2$$
$$t_2^2-7t_2-30 \\leq 0$$
$$(t_2-10)(t_2+3) \\leq 0$$
$$-3 \\leq t_2 \\leq 10$$
Так как $t_2>0$, получаем $0 < t_2 \\leq 10$.
<br><b>Проверка</b> $t_2=10$: $t_1=15$, вместе: $\\frac{1}{15}+\\frac{1}{10}=\\frac{1}{6}$ (ровно 6 ч) ✓
<div class="sol-ans">Ответ: не более $10$ часов</div>`
},
]
};