graph LR
%% НАСТРОЙКА СТРОГОГО МОНОХРОМА
linkStyle default stroke:#FFFFFF,stroke-width:2px,color:#FFFFFF,font-size:14px,font-weight:bold;
classDef default fill:#1C1C1C,stroke:#FFFFFF,stroke-width:2px,color:#FFFFFF,font-size:14px,font-weight:bold;
classDef grp fill:#111827,stroke:#6B7280,stroke-width:1px,color:#FFFFFF,font-size:16px,font-weight:bold;
classDef grpRed fill:#4A1414,stroke:#C62828,stroke-width:1px,color:#FFFFFF,font-size:16px,font-weight:bold;
%% ============ 1. ВХОД В СИСТЕМУ ============
subgraph ENTRY["1. Вход в систему"]
Root[Узел:
Корневой объект]
Q1[Есть доступ к
формулировке задания?]
Q2[Просят решить уравнение -
найти нули или корни?]
Q3[Есть знак '=' между
левой и правой частями?]
Q4[Есть хотя бы одна неизвестная
переменная x - y - z?]
Root --> Q1
Q1 -->|Да| Q2
Q1 -->|Нет| Q3
Q3 -->|Да| Q4
end
%% ============ 2. ДИСПЕТЧЕРСКАЯ ============
subgraph DISP["2. Диспетчерская"]
Dispatcher[Центральный Диспетчер:
Узел Уравнение]
Q_Check[Проверка количества переменных]
Q_Type[Ревизия маркеров объекта]
Dispatcher --> Q_Check
Q_Check -->|В строке только одна переменная| Q_Type
end
%% ============ 3. ЛИНЕЙНЫЕ ============
subgraph LIN["3. Линейные уравнения"]
LinTarget[Цель:
Вид ax = b]
LinQ1[Шаг 1:
Есть скобки?]
LinAct1[Действие:
Раскрыть ВСЕ скобки]
LinQ2[Шаг 2:
Слагаемые перемешаны?]
LinAct2[Действие:
Иксы влево - числа вправо
с переменой знака]
LinAct3[Шаг 3:
Привести подобные]
SpecQ1[Особый случай:
Коэффициент a = 0?]
SpecAns1[1 корень:
x = b / a]
SpecQ2[Число b = 0?]
SpecAns2[0 = 0
Корень - ЛЮБОЕ число]
SpecAns3[0 = числу
Корней НЕТ]
LinTarget --> LinQ1
LinQ1 -->|Да| LinAct1
LinAct1 --> LinQ1
LinQ1 -->|Нет| LinQ2
LinQ2 -->|Да| LinAct2
LinAct2 --> LinQ2
LinQ2 -->|Нет| LinAct3
LinAct3 --> SpecQ1
SpecQ1 -->|Нет| SpecAns1
SpecQ1 -->|Да| SpecQ2
SpecQ2 -->|Да| SpecAns2
SpecQ2 -->|Нет| SpecAns3
end
%% ============ 4. КВАДРАТНЫЕ ============
subgraph QUAD["4. Квадратные уравнения"]
QuadTarget[Цель:
Вид ax² + bx + c = 0]
QuadQ1[Шаг 1:
Раскиданы слагаемые?]
QuadAct1[Перенести все влево
справа оставить 0]
QuadQ2[Шаг 2:
Привести подобные]
QuadQ3[Шаг 3:
Слагаемые с x² уничтожились?]
QuadQ4[Шаг 4:
Все коэффициенты на месте?]
Неполные[Ветка: Неполные]
Неполные1[Вынести x за скобки:
x=0 или ax+b=0]
Неполные2[Уединить x²:
Если -c/a меньше 0 - нет корней]
Полные[Ветка: Полные]
QuadQ5[Приведенное и D в уме?]
Виет[Теорема Виета:
x1+x2=-b, x1*x2=c]
Дискр[Дискриминант D = b² - 4ac]
DQ[Знак D?]
D1[Корней НЕТ]
D2[1 корень:
x = -b / 2a]
D3[2 корня:
x = -b ± √D / 2a]
QuadTarget --> QuadQ1
QuadQ1 -->|Да| QuadAct1
QuadAct1 --> QuadQ2
QuadQ1 -->|Нет| QuadQ2
QuadQ2 --> QuadQ3
QuadQ3 -->|Нет| QuadQ4
QuadQ4 -->|Нет| Неполные
Неполные -->|нет c| Неполные1
Неполные -->|нет b| Неполные2
QuadQ4 -->|Да| Полные
Полные --> QuadQ5
QuadQ5 -->|Да| Виет
QuadQ5 -->|Нет| Дискр
Дискр --> DQ
DQ -->|D меньше 0| D1
DQ -->|D = 0| D2
DQ -->|D больше 0| D3
end
%% ============ 5. ВЫСШИЕ СТЕПЕНИ ============
subgraph HIGH["5. Высшие степени"]
HighTarget[Цель:
Понизить степень]
HighQ1[Биквадратное?]
HighAct1[Замена x² = t при t >= 0]
HighQ2[Есть свободное число c?]
HighAct2[Вынести X в меньшей степени]
HighQ3[Работает группировка?]
HighAct3[Вынести общую скобку]
HighQ4[Целые коэффициенты?]
Безу[Теорема Безу:
Ищем корни в делителях c
Делим в столбик на x-x1]
ВУЗ[Высшая математика / Численные методы]
HighTarget --> HighQ1
HighQ1 -->|Да| HighAct1
HighQ1 -->|Нет| HighQ2
HighQ2 -->|Нет| HighAct2
HighQ2 -->|Да| HighQ3
HighQ3 -->|Да| HighAct3
HighQ3 -->|Нет| HighQ4
HighQ4 -->|Да| Безу
HighQ4 -->|Нет| ВУЗ
end
%% ============ 6. СИСТЕМЫ И ВЕКТОРЫ ============
subgraph SYS["6. Системы и векторы"]
SysTarget[Цель:
Система уравнений]
SysQ1[Переменных больше уравнений?]
SysParam[Ветка: Олимпиадный хак - Решение в целых числах подбором квадратов]
SysQ2[Все линейные?]
SysQ3[Уравнений больше 2?]
Гаусс[Метод Гаусса / Матрицы]
Школа[Школьные методы решения систем]
Метод1[Подстановка:
Выразить букву и подставить]
Метод2[Сложение:
Уничтожить слагаемое]
Veq[Векторное уравнение]
VeqQ1[Даны координаты?]
VeqAct1[Метод координат]
VeqAct2[Метод проекций на OX и OY]
SysTarget --> SysQ1
SysQ1 -->|Да| SysParam
SysQ1 -->|Нет| SysQ2
SysQ2 -->|Да| SysQ3
SysQ3 -->|Да| Гаусс
SysQ3 -->|Нет| Школа
SysQ2 -->|Нет| Школа
Школа --> Метод1
Школа --> Метод2
Veq --> VeqQ1
VeqQ1 -->|Да| VeqAct1
VeqQ1 -->|Нет| VeqAct2
VeqAct1 --> SysTarget
VeqAct2 --> SysTarget
end
%% ============ 7. ДРОБИ ============
subgraph FRAC["7. Дробно-рациональные"]
FracTarget[Цель:
Убить знаменатель]
FracStep1[Шаг 1: Фиксация ОДЗ
Знаменатели не равны 0]
FracStep2[Шаг 2: Домножить на общий знаменатель
и сократить его]
FracTarget --> FracStep1
FracStep1 --> FracStep2
end
%% ============ 8. ТРИГОНОМЕТРИЯ ============
subgraph TRIG["8. Тригонометрия"]
TrigTarget[Цель:
Вид функция от x равна числу]
TrigQ1[Уже простейший вид]
TrigBase[Проверка модуля числа]
TrigErr[Сбой! Корней нет]
TrigAns[Запись ответа по таблице плюс период]
TrigQ2[Углы аргументов одинаковые]
TrigAct1[Хаб выражений:
Формулы двойного угла и приведения]
TrigQ3[Имена функций одинаковые]
TrigQ4[Уравнение однородное]
TrigAct2[Разделить на косинус
Перейти к тангенсу]
TrigAct3[Хаб выражений:
Основное тождество]
TrigQ5[Квадратный паттерн]
TrigSub[Замена t = функция от x при модуле t меньше или равном 1]
TrigQ6[Можно вынести функцию за скобки]
TrigSplit[Вынести за скобки
Распад на два простейших]
TrigHard[Хаб выражений:
Формулы суммы и произведения]
TrigTarget --> TrigQ1
TrigQ1 -->|Да| TrigBase
TrigBase -->|Модуль числа больше 1| TrigErr
TrigBase -->|Модуль числа меньше или равен 1| TrigAns
TrigQ1 -->|Нет| TrigQ2
TrigQ2 -->|Нет| TrigAct1
TrigAct1 -.-> TrigQ2
TrigQ2 -->|Да| TrigQ3
TrigQ3 -->|Нет| TrigQ4
TrigQ4 -->|Да| TrigAct2
TrigQ4 -->|Нет| TrigAct3
TrigAct2 -.-> TrigQ3
TrigAct3 -.-> TrigQ3
TrigQ3 -->|Да| TrigQ5
TrigQ5 -->|Да| TrigSub
TrigQ5 -->|Нет| TrigQ6
TrigQ6 -->|Да| TrigSplit
TrigQ6 -->|Нет| TrigHard
TrigSplit -.-> TrigQ1
end
%% ============ 9. МОДУЛИ ============
subgraph MOD["9. Модули"]
ModTarget[Цель:
Снять палочки модуля]
ModQ1[Только один модуль]
ModAct1[Изолировать модуль:
Вид модуль A равен B]
ModQ2[Правая часть - число]
ModQ3[Знак числа]
ModErr[Сбой! Корней нет]
ModZero[Стереть палочки: A = 0]
ModSplit[Две ветки: A = Число и A = -Число]
ModX[Вид модуль A равен B-x
Фильтр B-x больше или равен нулю
Ветки A = B-x и A = -B-x]
ModQ4[Два модуля вида модуль A равен модулю B]
ModTwo[Быстрое раскрытие:
A = B или A = -B]
ModIntervals[Сложный хаос:
Метод промежутков и интервалов]
ModTarget --> ModQ1
ModQ1 -->|Да| ModAct1
ModAct1 --> ModQ2
ModQ2 -->|Да| ModQ3
ModQ3 -->|Отрицательное| ModErr
ModQ3 -->|Равно нулю| ModZero
ModQ3 -->|Положительное| ModSplit
ModQ2 -->|Нет| ModX
ModQ1 -->|Нет| ModQ4
ModQ4 -->|Да| ModTwo
ModQ4 -->|Нет| ModIntervals
end
%% ============ 10. КОРНИ (РАДИКАЛЫ) ============
subgraph IRR["10. Корни (радикалы)"]
IrrTarget[Цель:
Уничтожить радикалы]
IrrQ1[Степень корня четная]
IrrНечет[Нечетный корень:
Ограничений нет - возвести в куб]
IrrAct1[Изолировать корень:
Вид √A = B]
IrrQ2[Справа голое число]
IrrQ3[Знак числа]
IrrErr[Сбой! Корней нет]
IrrZero[Подкоренное A = 0]
IrrPos[Фильтр A больше или равен нулю
Возвести в квадрат: A = Число в квадрате]
ЩитМеч[Скрипт Щит и Меч:
Щит: B-x больше или равен нулю
Меч: A = B-x в квадрате]
IrrTarget --> IrrQ1
IrrQ1 -->|Нет| IrrНечет
IrrQ1 -->|Да| IrrAct1
IrrAct1 --> IrrQ2
IrrQ2 -->|Да| IrrQ3
IrrQ3 -->|Отрицательное| IrrErr
IrrQ3 -->|Равно нулю| IrrZero
IrrQ3 -->|Положительное| IrrPos
IrrQ2 -->|Нет| ЩитМеч
end
%% ============ 11. ПОКАЗАТЕЛЬНЫЕ ============
subgraph EXP["11. Показательные"]
ExpTarget[Цель:
Спустить X на землю]
ExpQ1[Вид a^f-x = B. Знак B]
ExpErr[Сбой! Корней нет]
ExpQ2[Можно уравнять основания]
ExpAct1[Привести к одинаковым основаниям
Схлопнуть: f-x=g-x]
ExpQ3[Разные степени одного числа]
ExpAct2[Вынести наименьшую степень
разделить правую часть]
ExpQ4[Квадратный паттерн]
ExpSub[Замена t = a^x при t больше нуля]
ExpLog[Тупик оснований: вид 2^x=3
Ключ: x = log2 3]
ExpTarget --> ExpQ1
ExpQ1 -->|B меньше или равно нулю| ExpErr
ExpQ1 -->|B больше нуля| ExpQ2
ExpQ2 -->|Да| ExpAct1
ExpQ2 -->|Нет| ExpQ3
ExpQ3 -->|Да| ExpAct2
ExpAct2 -.-> ExpQ2
ExpQ3 -->|Нет| ExpQ4
ExpQ4 -->|Да| ExpSub
ExpQ4 -->|Нет| ExpLog
end
%% ============ 12. ЛОГАРИФМЫ ============
subgraph LOG["12. Логарифмы"]
LogTarget[Цель:
Схлопнуть логарифмы]
LogОДЗ[Шаг 1: Фиксация ОДЗ
Аргумент больше нуля Основание больше нуля и не равно единице]
LogAct1[Шаг 2: Упаковать логарифмы свойствами]
LogQ1[Каков канонический вид]
LogDef[По определению:
f-x = a^B]
LogPot[Потенцирование:
f-x = g-x]
LogSub[Замена t = log_a x]
LogTarget --> LogОДЗ
LogОДЗ --> LogAct1
LogAct1 --> LogQ1
LogQ1 -->|log_a f-x = B| LogDef
LogQ1 -->|log_a f-x = log_a g-x| LogPot
LogQ1 -->|Квадрат логарифма| LogSub
end
%% ============ 13. МАТРЕШКИ ============
subgraph MAT["13. Матрешки (сложные функции)"]
MatTarget[Правило:
Снаружи внутрь]
MatStep1[Заменить внутренность на коробку Т]
MatStep2[Решить для внешней функции:
Снять наружную оболочку]
MatStep3[Приравнять внутренность к результату]
MatTarget --> MatStep1
MatStep1 --> MatStep2
MatStep2 --> MatStep3
end
%% ============ 14. СЕРВИСНЫЙ ХАБ ВЫРАЖЕНИЙ ============
subgraph HUBG["14. Сервисный хаб: преобразование выражений"]
Hub[Центральный хаб:
Преобразование Выражений]
B1[Библиотека 1:
Свойства Степеней]
B2[Библиотека 2:
Свойства Логарифмов]
B3[Библиотека 3:
ФСУ и Скобки]
B4[Библиотека 4:
Тригонометрия]
Hub --> B1
Hub --> B2
Hub --> B3
Hub --> B4
end
%% ================================================
%% СВЯЗИ МЕЖДУ ГРУППАМИ
%% ================================================
%% Вход -> Диспетчерская
Q2 -->|Да| Dispatcher
Q4 -->|Да| Dispatcher
%% Диспетчерская -> магистрали
Q_Check -->|В строке сразу две переменные x и y| SysTarget
Q_Type -->|Степени нет| LinTarget
Q_Type -->|x во 2-й степени| QuadTarget
Q_Type -->|x в 3-й степени и выше| HighTarget
Q_Type -->|Векторы| Veq
Q_Type -->|Система| SysTarget
Q_Type -->|x в знаменателе| FracTarget
Dispatcher -->|Тригонометрия| TrigTarget
Dispatcher -->|Модуль| ModTarget
Dispatcher -->|Корень| IrrTarget
Dispatcher -->|Показательное| ExpTarget
Dispatcher -->|Логарифм| LogTarget
Dispatcher -->|Матрешка| MatTarget
%% Возвраты в диспетчерскую
QuadQ3 -->|Да| Dispatcher
Неполные1 -.-> Dispatcher
HighAct1 -.-> Dispatcher
HighAct2 -.-> Dispatcher
HighAct3 -.-> Dispatcher
Безу -.-> Dispatcher
Метод1 -.-> Dispatcher
Метод2 -.-> Dispatcher
FracStep2 -.-> Dispatcher
TrigSub -.-> Dispatcher
TrigBase -.-> Dispatcher
TrigHard -.-> Dispatcher
ModZero -.-> Dispatcher
ModSplit -.-> Dispatcher
ModX -.-> Dispatcher
ModTwo -.-> Dispatcher
ModIntervals -.-> Dispatcher
IrrНечет -.-> Dispatcher
IrrZero -.-> Dispatcher
IrrPos -.-> Dispatcher
ЩитМеч -.-> Dispatcher
ExpAct1 -.-> Dispatcher
ExpSub -.-> Dispatcher
ExpLog -.-> Dispatcher
LogDef -.-> Dispatcher
LogPot -.-> Dispatcher
LogSub -.-> Dispatcher
MatStep3 -.-> Dispatcher
%% Связи с сервисным хабом
TrigAct1 -.-> Hub
TrigAct3 -.-> Hub
TrigHard -.-> Hub
LogAct1 -.-> Hub
LinAct1 -.-> Hub
%% Оформление рамок групп
class DISP,LIN,QUAD,HIGH,SYS,FRAC,TRIG,MOD,IRR,EXP,LOG,MAT,HUBG grp
class ENTRY grpRed