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
+203
View File
@@ -0,0 +1,203 @@
VARIANTS[51] = {
label: "Вариант 51",
tasks: [
{
text: `Сумма корней квадратного уравнения $x^2 + 6x - 11 = 0$ равна:`,
opts: [
["а", "$6$"], ["б", "$-11$"], ["в", "$-6$"], ["г", "$11$"], ["д", "$4$"],
],
sol: `<b>По теореме Виета</b> для уравнения $x^2 + px + q = 0$:
сумма корней равна $-p$.<br>
Здесь $p = 6$, поэтому $x_1 + x_2 = -6$.
<div class="sol-ans">Ответ: в) $-6$.</div>`
},
{
text: `Запись выражения $5^2 : 25 \\cdot 5^5$ в виде степени с основанием $5$ имеет вид:`,
opts: [
["а", "$5^7$"], ["б", "$5^8$"], ["в", "$5^9$"], ["г", "$5^5$"], ["д", "$5^1$"],
],
sol: `Заменим $25 = 5^2$:<br>
$5^2 : 25 \\cdot 5^5 = \\dfrac{5^2}{5^2} \\cdot 5^5 = 1 \\cdot 5^5 = 5^5.$
<div class="sol-ans">Ответ: г) $5^5$.</div>`
},
{
text: `Какое из следующих утверждений <b>НЕ</b> верно:`,
opts: [
["а", "площадь прямоугольника равна произведению его соседних сторон;"],
["б", "диагонали любого ромба равны между собой;"],
["в", "диаметры одной окружности равны между собой;"],
["г", "если три угла одного треугольника равны трём углам другого треугольника, то треугольники подобны?"],
],
sol: `Проверим утверждения:
<ul>
<li>а) верно — формула площади прямоугольника;</li>
<li><b>б) НЕ верно</b> — диагонали ромба в общем случае <b>не равны</b>;
они равны только в частном случае — <b>квадрате</b>;</li>
<li>в) верно — все диаметры окружности равны $2R$;</li>
<li>г) верно — признак подобия треугольников по трём углам.</li>
</ul>
<div class="sol-ans">Ответ: б).</div>`
},
{
text: `Найдите частное от деления наименьшего общего кратного на наибольший общий делитель
чисел $112$ и $80$.`,
sol: `Разложим числа на простые множители:<br>
$112 = 2^4 \\cdot 7,\\quad 80 = 2^4 \\cdot 5.$<br>
<b>НОД</b>$(112,\\,80) = 2^4 = 16.$<br>
<b>НОК</b>$(112,\\,80) = 2^4 \\cdot 5 \\cdot 7 = 560.$<br>
$\\dfrac{\\text{НОК}}{\\text{НОД}} = \\dfrac{560}{16} = 35.$
<div class="sol-ans">Ответ: $35$.</div>`
},
{
text: `Сократите дробь $\\dfrac{b + 2\\sqrt{b} + 1}{\\sqrt{b} + b}$.`,
sol: `<b>Формула квадрата суммы:</b> $(a + c)^2 = a^2 + 2ac + c^2$.<br>
<b>Шаг 1. Преобразуем числитель.</b><br>
Заметим, что $b = (\\sqrt{b})^2$ и $1 = 1^2$. Тогда $b + 2\\sqrt{b} + 1$ — это полный квадрат:
$$b + 2\\sqrt{b} + 1 = (\\sqrt{b} + 1)^2.$$
<b>Шаг 2. Преобразуем знаменатель.</b><br>
Вынесем общий множитель $\\sqrt{b}$:
$$\\sqrt{b} + b = \\sqrt{b} + \\sqrt{b} \\cdot \\sqrt{b} = \\sqrt{b}(1 + \\sqrt{b}).$$
<b>Шаг 3. Сокращаем дробь.</b><br>
В числителе и знаменателе есть общий множитель $(\\sqrt{b} + 1)$:
$$\\dfrac{(\\sqrt{b} + 1)^2}{\\sqrt{b}(\\sqrt{b} + 1)} = \\dfrac{\\sqrt{b} + 1}{\\sqrt{b}}.$$
<div class="sol-ans">Ответ: $\\dfrac{\\sqrt{b}+1}{\\sqrt{b}}$ (или $1 + \\dfrac{1}{\\sqrt{b}}$).</div>`
},
{
text: `Высота $DH$ ромба $ABCD$ делит сторону $BC$ на отрезки $BH = 8$ см и $HC = 12$ см.
Найдите площадь ромба.`,
sol: `<svg viewBox="0 0 360 240" width="320" xmlns="http://www.w3.org/2000/svg">
<polygon points="40,180 130,40 320,40 230,180"
fill="#fff7e6" stroke="#333" stroke-width="2"/>
<line x1="230" y1="180" x2="230" y2="40"
stroke="#c0392b" stroke-width="2" stroke-dasharray="5,4"/>
<rect x="218" y="40" width="12" height="12" fill="none" stroke="#c0392b"/>
<text x="32" y="200" font-size="16">A</text>
<text x="120" y="34" font-size="16">B</text>
<text x="324" y="34" font-size="16">C</text>
<text x="232" y="200" font-size="16">D</text>
<text x="226" y="34" font-size="14" fill="#c0392b">H</text>
<text x="170" y="30" font-size="14">BH=8</text>
<text x="262" y="30" font-size="14">HC=12</text>
<text x="238" y="115" font-size="14" fill="#c0392b">DH</text>
</svg><br>
<b>Свойство ромба:</b> все стороны равны.<br>
<b>Теорема Пифагора:</b> в прямоугольном треугольнике $c^2 = a^2 + b^2$, где $c$ — гипотенуза.<br>
<b>Формула площади ромба через высоту:</b> $S = a \\cdot h$, где $a$ — сторона, $h$ — высота.<br>
<b>Шаг 1. Находим сторону ромба.</b><br>
Точка $H$ лежит на стороне $BC$, поэтому
$$BC = BH + HC = 8 + 12 = 20\\text{ см}.$$
Так как все стороны ромба равны, $DC = BC = 20$ см.<br>
<b>Шаг 2. Находим высоту $DH$ по теореме Пифагора.</b><br>
$DH$ — высота, значит $\\triangle DHC$ прямоугольный с прямым углом в $H$. Здесь $DC = 20$ — гипотенуза, $HC = 12$ — катет:
$$DH = \\sqrt{DC^2 - HC^2} = \\sqrt{400 - 144} = \\sqrt{256} = 16\\text{ см}.$$
<b>Шаг 3. Находим площадь.</b>
$$S = BC \\cdot DH = 20 \\cdot 16 = 320\\text{ см}^2.$$
<div class="sol-ans">Ответ: $320$ см$^2$.</div>`
},
{
text: `Найдите наименьшее целое значение аргумента, принадлежащее области определения функции
$y = \\dfrac{\\sqrt{x+8}}{x^2 - 2x - 80}$.`,
sol: `<b>Правила нахождения ОДЗ:</b>
<ul>
<li>выражение под корнем должно быть $\\geq 0$;</li>
<li>знаменатель не должен равняться нулю.</li>
</ul>
<b>Шаг 1. Условие подкоренного выражения.</b><br>
Под корнем стоит $x + 8$, значит
$$x + 8 \\geq 0 \\implies x \\geq -8.$$
<b>Шаг 2. Условие знаменателя.</b><br>
Знаменатель $x^2 - 2x - 80$ не должен быть равен нулю. Разложим его на множители (находим корни, например по теореме Виета: $-10 \\cdot 8 = -80$, $-10 + 8 \\neq 2$; попробуем $10$ и $-8$: $10 \\cdot (-8) = -80$, $10 + (-8) = 2$ — подходит):
$$x^2 - 2x - 80 = (x - 10)(x + 8) \\neq 0 \\implies x \\neq 10\\text{ и }x \\neq -8.$$
<b>Шаг 3. Объединяем условия.</b><br>
$x \\geq -8$ и одновременно $x \\neq -8$, $x \\neq 10$. Значит $x \\gt -8,\\; x \\neq 10$.<br>
<b>Шаг 4. Наименьшее целое.</b><br>
Наименьшее целое число, большее $-8$, — это $-7$.
<div class="sol-ans">Ответ: $-7$.</div>`
},
{
text: `Семья Ивановых ежемесячно вносит плату за коммунальные услуги, телефон и электричество.
Если бы коммунальные услуги подорожали на $50\\%$, общая сумма платежа увеличилась бы на $25\\%$.
Если бы электричество подорожало на $50\\%$, общая сумма платежа увеличилась бы на $20\\%$.
Какой процент от общей суммы платежа приходится на телефон?`,
sol: `<b>Метод введения переменных и составления уравнений по условию задачи.</b><br>
<b>Шаг 1.</b> Вводим переменные: пусть $У$ — плата за коммунальные услуги, $Т$ — за телефон, $Э$ — за электричество. Тогда общая сумма платежа
$$S = У + Т + Э.$$
<b>Шаг 2.</b> Используем первое условие. Если коммунальные услуги подорожают на $50\\%$, то прибавка к их стоимости составит $0{,}5\\,У$. По условию эта же прибавка равна $25\\%$ от общей суммы, то есть $0{,}25\\,S$. Значит:
$$0{,}5\\,У = 0{,}25\\,S \\implies У = 0{,}5\\,S,$$
то есть на услуги приходится $50\\%$ общей суммы.<br>
<b>Шаг 3.</b> Используем второе условие. Подорожание электричества на $50\\%$ — это прибавка $0{,}5\\$, и она равна $20\\%$ общей суммы:
$$0{,}5\\,Э = 0{,}2\\,S \\implies Э = 0{,}4\\,S,$$
то есть на электричество приходится $40\\%$ суммы.<br>
<b>Шаг 4.</b> Находим долю телефона. Так как $S = У + Т + Э$, то
$$Т = S - У - Э = S - 0{,}5\\,S - 0{,}4\\,S = 0{,}1\\,S = 10\\%\\,S.$$
<div class="sol-ans">Ответ: $10\\%$.</div>`
},
{
text: `Определите количество целых решений неравенства
$\\dfrac{3x^2 + 10x + 3}{(3-x)^2(4-x^2)} > 0$.`,
sol: `<b>Числитель:</b> $3x^2 + 10x + 3 = (3x+1)(x+3),$
корни $x = -3,\\; x = -\\tfrac{1}{3}.$<br>
<b>Знаменатель:</b> $(3-x)^2(4-x^2) = (3-x)^2(2-x)(2+x).$<br>
Множитель $(3-x)^2 \\ge 0,$ обращается в $0$ при $x = 3$ (исключается из ОДЗ);
на знак не влияет. Корни знаменателя: $x = -2,\\; x = 2,\\; x = 3.$<br>
<b>Метод интервалов</b> (критические точки $-3,\\,-2,\\,-\\tfrac{1}{3},\\,2,\\,3$):
<table style="border-collapse:collapse;margin:6px 0;">
<tr><th style="border:1px solid #888;padding:2px 6px;">Интервал</th>
<th style="border:1px solid #888;padding:2px 6px;">Знак</th></tr>
<tr><td style="border:1px solid #888;padding:2px 6px;">$x<-3$</td><td style="border:1px solid #888;padding:2px 6px;">$-$</td></tr>
<tr><td style="border:1px solid #888;padding:2px 6px;">$(-3;-2)$</td><td style="border:1px solid #888;padding:2px 6px;">$+$</td></tr>
<tr><td style="border:1px solid #888;padding:2px 6px;">$(-2;-\\tfrac{1}{3})$</td><td style="border:1px solid #888;padding:2px 6px;">$-$</td></tr>
<tr><td style="border:1px solid #888;padding:2px 6px;">$(-\\tfrac{1}{3};\\,2)$</td><td style="border:1px solid #888;padding:2px 6px;">$+$</td></tr>
<tr><td style="border:1px solid #888;padding:2px 6px;">$(2;\\,3)$</td><td style="border:1px solid #888;padding:2px 6px;">$-$</td></tr>
<tr><td style="border:1px solid #888;padding:2px 6px;">$x>3$</td><td style="border:1px solid #888;padding:2px 6px;">$-$</td></tr>
</table>
Решение: $x \\in (-3;\\,-2) \\cup \\left(-\\tfrac{1}{3};\\,2\\right).$<br>
<b>Целые в этих интервалах:</b> в $(-3;-2)$ — нет; в $(-\\tfrac{1}{3};\\,2)$ — это $0$ и $1.$
Всего <b>$2$</b> целых решения.
<div class="sol-ans">Ответ: $2$.</div>`
},
{
text: `Найдите площадь прямоугольной трапеции с основаниями $4$ см и $12$ см,
если известно, что в трапецию можно вписать окружность.`,
sol: `<svg viewBox="0 0 270 180" xmlns="http://www.w3.org/2000/svg" style="max-width:340px;width:100%;height:auto;display:block;margin:8px auto">
<!-- Точные пропорции: AB=4, DC=12, AD=6, BC=10 (3-4-5 ×2). Масштаб 16px/см -->
<!-- A=(40,60), B=(104,60), C=(232,156), D=(40,156) -->
<polygon points="40,60 104,60 232,156 40,156" fill="rgba(37,99,235,0.07)" stroke="#334155" stroke-width="2"/>
<!-- Вписанная окружность: r=3см=48px, центр (88,108) -->
<circle cx="88" cy="108" r="48" fill="rgba(220,38,38,0.07)" stroke="#dc2626" stroke-width="1.6"/>
<!-- Прямые углы при A и D -->
<polygon points="40,60 50,60 50,70 40,70" fill="none" stroke="#334155" stroke-width="1.3"/>
<polygon points="40,156 50,156 50,146 40,146" fill="none" stroke="#334155" stroke-width="1.3"/>
<!-- Радиус вписанной окружности до нижнего основания -->
<line x1="88" y1="108" x2="88" y2="156" stroke="#dc2626" stroke-width="1" stroke-dasharray="3,2"/>
<circle cx="88" cy="108" r="2.5" fill="#dc2626"/>
<!-- Метки вершин -->
<text x="26" y="60" font-size="13" font-family="serif" font-style="italic">A</text>
<text x="108" y="60" font-size="13" font-family="serif" font-style="italic">B</text>
<text x="237" y="167" font-size="13" font-family="serif" font-style="italic">C</text>
<text x="26" y="167" font-size="13" font-family="serif" font-style="italic">D</text>
<!-- Длины сторон -->
<text x="63" y="54" font-size="11" fill="#334155">4</text>
<text x="130" y="170" font-size="11" fill="#334155">12</text>
<text x="22" y="112" font-size="11" fill="#334155">h=6</text>
<text x="170" y="100" font-size="11" fill="#334155">10</text>
<text x="92" y="135" font-size="10" fill="#dc2626">r=3</text>
</svg>
<b>Свойство описанного четырёхугольника</b> (с вписанной окружностью):
суммы противоположных сторон равны.<br>
Значит, сумма оснований равна сумме боковых сторон:
$4 + 12 = a + b \\implies a + b = 16,$
где $a$ — боковая сторона, перпендикулярная основаниям (равна высоте $h$),
а $b$ — наклонная боковая.<br>
Опустив высоту из вершины меньшего основания, получим прямоугольный треугольник
с катетами $h$ и $12 - 4 = 8$ и гипотенузой $b$:<br>
$b = \\sqrt{h^2 + 8^2} = \\sqrt{h^2 + 64}.$<br>
Подставим $a = h$:
$h + \\sqrt{h^2 + 64} = 16 \\implies \\sqrt{h^2 + 64} = 16 - h$<br>
$\\implies h^2 + 64 = 256 - 32h + h^2 \\implies 32h = 192 \\implies h = 6$ см.<br>
<b>Площадь трапеции:</b>
$S = \\dfrac{4 + 12}{2} \\cdot 6 = 8 \\cdot 6 = 48$ см$^2.$
<div class="sol-ans">Ответ: $48$ см$^2$.</div>`
},
]
};