JustCaptain kod-buduschego

add 1.3. topic

anc · 2 недели назад 253504b541f7f2df21287b4928c87fb803c0792f
7 файлов
  • Показать разницуСкрыть разницу
    1 −## 1. Подключение библиотеки
    2 −
    3 −```cpp
    4 −#include <iostream>
    5 −```
    6 −
    7 −Подключает библиотеку для ввода и вывода данных.
    8 −
    9 −Позволяет использовать:
    10 −
    11 −- `cout` — вывод на экран.
    12 −- `cin` — ввод с клавиатуры.
    13 −- `endl` — переход на новую строку.
    14 −
    15 −## 2. Пространство имён
    16 −
    17 −```cpp
    18 −using namespace std;
    19 −```
    20 −
    21 −Позволяет писать `cout` вместо `std::cout`, а `cin` вместо `std::cin`.
    22 −
    23 −## 3. Главная функция
    24 −
    25 −```cpp
    26 −int main() {
    27 −
    28 − return 0;
    29 −}
    30 −```
    31 −
    32 −`int main()` — главная функция, с которой начинается выполнение программы.
    33 −
    34 −- `{` — начало блока кода.
    35 −- `}` — конец блока кода.
    36 −- `return 0;` — завершение программы без ошибки.
    37 −
    38 −## 4. Объявление переменных
    39 −
    40 −Переменная — это именованная область памяти, в которой хранится значение.
    41 −
    42 −**Основные типы данных:**
    43 −
    44 −| Тип | Что хранит | Пример |
    45 −| -------- | --------------- | ----------------------- |
    46 −| `int` | Целые числа | `int age = 16;` |
    47 −| `double` | Дробные числа | `double price = 12.5;` |
    48 −| `char` | Один символ | `char letter = 'A';` |
    49 −| `string` | Текст | `string name = "Alex";` |
    50 −| `bool` | Истину или ложь | `bool active = true;` |
    51 −
    52 −Пример:
    53 −
    54 −```cpp
    55 −int age = 16;
    56 −double height = 1.75;
    57 −char letter = 'A';
    58 −```
    59 −
    60 −Общий вид объявления:
    61 −
    62 −```cpp
    63 −тип имя_переменной = значение;
    64 −```
    65 −
    66 −Например:
    67 −
    68 −```cpp
    69 −int number = 10;
    70 −```
    71 −
    72 −- `int` — тип данных.
    73 −- `number` — имя переменной.
    74 −- `=` — присваивание значения.
    75 −- `10` — значение переменной.
    76 −- `;` — конец инструкции.
    77 −
    78 −## 5. Точка с запятой `;`
    79 −
    80 −Точка с запятой обозначает конец большинства инструкций в C++.
    81 −
    82 −Пример:
    83 −
    84 −```cpp
    85 −int a = 5;
    86 −int b = 10;
    87 −cout << a;
    88 −```
    89 −
    90 −**Важно:** после `if`, `for`, `while` точка с запятой обычно не ставится сразу после условия.
    91 −
    92 −Правильно:
    93 −
    94 −```cpp
    95 −if (a > 0) {
    96 − cout << a;
    97 −}
    98 −```
    99 −
    100 −## 6. Вывод на экран — `cout`
    101 −
    102 −`cout` используется для вывода информации на экран.
    103 −
    104 −```cpp
    105 −cout << "Hello!";
    106 −```
    107 −
    108 −Результат:
    109 −
    110 −```text
    111 −Hello!
    112 −```
    113 −
    114 −Можно выводить переменные:
    115 −
    116 −```cpp
    117 −int number = 25;
    118 −cout << number;
    119 −```
    120 −
    121 −Результат:
    122 −
    123 −```text
    124 −25
    125 −```
    126 −
    127 −Можно выводить несколько значений:
    128 −
    129 −```cpp
    130 −int a = 5;
    131 −int b = 10;
    132 −
    133 −cout << a << " " << b;
    134 −```
    135 −
    136 −Результат:
    137 −
    138 −```text
    139 −5 10
    140 −```
    141 −
    142 −## 7. Оператор `<<`
    143 −
    144 −Используется вместе с `cout` для передачи данных на вывод.
    145 −
    146 −```cpp
    147 −cout << "Привет";
    148 −```
    149 −
    150 −Можно передавать несколько значений подряд:
    151 −
    152 −```cpp
    153 −cout << "Число: " << 10;
    154 −```
    155 −
    156 −Результат:
    157 −
    158 −```text
    159 −Число: 10
    160 −```
    161 −
    162 −**Запомни:** `cout <<` — вывод информации.
    163 −
    164 −## 8. Оператор `>>`
    165 −
    166 −Используется вместе с `cin` для ввода данных с клавиатуры.
    167 −
    168 −```cpp
    169 −int number;
    170 −cin >> number;
    171 −```
    172 −
    173 −Если пользователь введёт `15`, переменная `number` получит значение `15`.
    174 −
    175 −Пример программы:
    176 −
    177 −```cpp
    178 −#include <iostream>
    179 −using namespace std;
    180 −
    181 −int main() {
    182 − int number;
    183 −
    184 − cout << "Введите число: ";
    185 − cin >> number;
    186 −
    187 − cout << "Вы ввели: " << number;
    188 −
    189 − return 0;
    190 −}
    191 −```
    192 −
    193 −**Запомни:** `cin >>` — ввод информации.
    194 −
    195 −## 9. Переход на новую строку — `endl`
    196 −
    197 −`endl` переводит вывод на следующую строку.
    198 −
    199 −```cpp
    200 −cout << "Привет" << endl;
    201 −cout << "Мир";
    202 −```
    203 −
    204 −Результат:
    205 −
    206 −```text
    207 −Привет
    208 −Мир
    209 −```
    210 −
    211 −Альтернатива — `\n`:
    212 −
    213 −```cpp
    214 −cout << "Привет\n";
    215 −cout << "Мир";
    216 −```
    217 −
    218 −Оба варианта переводят вывод на новую строку. `\n` обычно предпочтительнее, если не требуется принудительно сбрасывать буфер вывода.
    219 −
    220 −## 10. Условие `if`
    221 −
    222 −`if` позволяет выполнить код, если условие истинно.
    223 −
    224 −Пример:
    225 −
    226 −```cpp
    227 −int age = 18;
    228 −
    229 −if (age >= 18) {
    230 − cout << "Совершеннолетний";
    231 −}
    232 −```
    233 −
    234 −Результат:
    235 −
    236 −```text
    237 −Совершеннолетний
    238 −```
    239 −
    240 −Если условие ложно, код внутри `if` не выполнится.
    241 −
    242 −### Операторы сравнения
    243 −
    244 −| Оператор | Значение | Пример |
    245 −| -------- | ---------------- | -------- |
    246 −| `==` | Равно | `a == b` |
    247 −| `!=` | Не равно | `a != b` |
    248 −| `>` | Больше | `a > b` |
    249 −| `<` | Меньше | `a < b` |
    250 −| `>=` | Больше или равно | `a >= b` |
    251 −| `<=` | Меньше или равно | `a <= b` |
    252 −
    253 −**Важно:** `=` присваивает значение, а `==` сравнивает значения.
    254 −
    255 −```cpp
    256 −a = 5; // присвоить 5
    257 −a == 5 // проверить, равно ли a пяти
    258 −```
    259 −
    260 −### `else` — иначе
    261 −
    262 −Выполняется, если условие `if` ложно.
    263 −
    264 −```cpp
    265 −int number = 3;
    266 −
    267 −if (number > 5) {
    268 − cout << "Больше пяти";
    269 −} else {
    270 − cout << "Пять или меньше";
    271 −}
    272 −```
    273 −
    274 −Результат:
    275 −
    276 −```text
    277 −Пять или меньше
    278 −```
    279 −
    280 −### `else if` — дополнительное условие
    281 −
    282 −Позволяет проверить несколько условий.
    283 −
    284 −```cpp
    285 −int number = 0;
    286 −
    287 −if (number > 0) {
    288 − cout << "Положительное";
    289 −} else if (number < 0) {
    290 − cout << "Отрицательное";
    291 −} else {
    292 − cout << "Ноль";
    293 −}
    294 −```
    295 −
    296 −## 11. Цикл `for`
    297 −
    298 −`for` используется, когда нужно повторить действие определённое количество раз.
    299 −
    300 −Пример:
    301 −
    302 −```cpp
    303 −for (int i = 0; i < 5; i++) {
    304 − cout << i << endl;
    305 −}
    306 −```
    307 −
    308 −Результат:
    309 −
    310 −```text
    311 −0
    312 −1
    313 −2
    314 −3
    315 −4
    316 −```
    317 −
    318 −Разберём конструкцию:
    319 −
    320 −```cpp
    321 −for (int i = 0; i < 5; i++)
    322 −```
    323 −
    324 −Она состоит из трёх частей:
    325 −
    326 −1. `int i = 0` — создание переменной `i` со значением `0`.
    327 −2. `i < 5` — условие продолжения цикла. Пока оно истинно, цикл работает.
    328 −3. `i++` — увеличение `i` на единицу после каждой итерации.
    329 −
    330 −`i++` означает то же самое, что:
    331 −
    332 −```cpp
    333 −i = i + 1;
    334 −```
    335 −
    336 −### Обратный отсчёт
    337 −
    338 −Можно уменьшать значение переменной:
    339 −
    340 −```cpp
    341 −for (int i = 5; i >= 1; i--) {
    342 − cout << i << endl;
    343 −}
    344 −```
    345 −
    346 −Результат:
    347 −
    348 −```text
    349 −5
    350 −4
    351 −3
    352 −2
    353 −1
    354 −```
    355 −
    356 −`i--` уменьшает значение переменной на единицу.
    357 −
    358 −## 12. Цикл `while`
    359 −
    360 −`while` повторяет код, пока условие истинно.
    361 −
    362 −```cpp
    363 −int i = 0;
    364 −
    365 −while (i < 5) {
    366 − cout << i << endl;
    367 − i++;
    368 −}
    369 −```
    370 −
    371 −Результат:
    372 −
    373 −```text
    374 −0
    375 −1
    376 −2
    377 −3
    378 −4
    379 −```
    380 −
    381 −Здесь:
    382 −
    383 −- `i = 0` — начальное значение.
    384 −- `i < 5` — условие выполнения цикла.
    385 −- `i++` — увеличение переменной.
    386 −
    387 −**Важно:** если условие никогда не станет ложным, цикл может выполняться бесконечно.
    388 −
    389 −## 13. Оператор `break`
    390 −
    391 −`break` немедленно завершает цикл.
    392 −
    393 −```cpp
    394 −for (int i = 1; i <= 10; i++) {
    395 − if (i == 5) {
    396 − break;
    397 − }
    398 −
    399 − cout << i << endl;
    400 −}
    401 −```
    402 −
    403 −Результат:
    404 −
    405 −```text
    406 −1
    407 −2
    408 −3
    409 −4
    410 −```
    411 −
    412 −Когда `i` становится равным `5`, цикл прекращается.
    413 −
    414 −## 14. Оператор `continue`
    415 −
    416 −`continue` пропускает оставшуюся часть текущей итерации и переходит к следующей.
    417 −
    418 −```cpp
    419 −for (int i = 1; i <= 5; i++) {
    420 − if (i == 3) {
    421 − continue;
    422 − }
    423 −
    424 − cout << i << endl;
    425 −}
    426 −```
    427 −
    428 −Результат:
    Разница обрезана: показаны первые 428 строк.
  • Показать разницуСкрыть разницу
    1 +# 📘 Тема 1.1. Необходимый материал
    2 +
    3 +> Шпаргалка по первым программам на C++: из чего состоит программа, как ввести и вывести данные и посчитать результат.
    4 +
    5 +---
    6 +
    7 +## 1. Как устроена программа
    8 +
    9 +```cpp
    10 +#include <iostream> // подключаем библиотеку ввода-вывода
    11 +using namespace std; // чтобы писать cout вместо std::cout
    12 +
    13 +int main() { // отсюда начинается выполнение программы
    14 + // здесь пишем код
    15 +
    16 + return 0; // программа завершилась без ошибок
    17 +}
    18 +```
    19 +
    20 +| Часть | Зачем нужна |
    21 +|---|---|
    22 +| `#include <iostream>` | даёт доступ к `cin`, `cout`, `endl` |
    23 +| `using namespace std;` | позволяет не писать `std::` перед `cin` и `cout` |
    24 +| `int main() { ... }` | главная функция — код выполняется отсюда |
    25 +| `{` и `}` | начало и конец блока кода |
    26 +| `return 0;` | завершение программы |
    27 +
    28 +> [!NOTE]
    29 +> Без `using namespace std;` пишут полностью: `std::cout`, `std::cin`, `std::endl`.
    30 +
    31 +---
    32 +
    33 +## 2. Точка с запятой `;`
    34 +
    35 +Почти каждая инструкция в C++ заканчивается точкой с запятой.
    36 +
    37 +```cpp
    38 +int a = 5;
    39 +cout << a;
    40 +```
    41 +
    42 +> [!WARNING]
    43 +> Забытая `;` — самая частая ошибка компиляции.
    44 +
    45 +---
    46 +
    47 +## 3. Комментарии
    48 +
    49 +Комментарии не выполняются — это заметки для человека.
    50 +
    51 +```cpp
    52 +// однострочный комментарий
    53 +
    54 +/*
    55 + многострочный
    56 + комментарий
    57 +*/
    58 +```
    59 +
    60 +---
    61 +
    62 +## 4. Вывод на экран — `cout`
    63 +
    64 +```cpp
    65 +cout << "Hello!";
    66 +```
    67 +
    68 +```text
    69 +Hello!
    70 +```
    71 +
    72 +Можно выводить числа, переменные и несколько значений подряд:
    73 +
    74 +```cpp
    75 +int a = 5, b = 10;
    76 +
    77 +cout << 42; // 42
    78 +cout << a; // 5
    79 +cout << a << " " << b; // 5 10
    80 +cout << "Сумма: " << a + b; // Сумма: 15
    81 +```
    82 +
    83 +> [!TIP]
    84 +> Между значениями пробел сам не появится — его нужно вывести явно: `<< " " <<`.
    85 +
    86 +---
    87 +
    88 +## 5. Перевод строки — `endl` и `\n`
    89 +
    90 +```cpp
    91 +cout << "Привет" << endl;
    92 +cout << "Мир" << "\n";
    93 +```
    94 +
    95 +```text
    96 +Привет
    97 +Мир
    98 +```
    99 +
    100 +Оба способа переводят вывод на новую строку.
    101 +
    102 +---
    103 +
    104 +## 6. Переменные
    105 +
    106 +Переменная — именованная ячейка памяти, в которой хранится значение.
    107 +
    108 +```cpp
    109 +тип имя = значение;
    110 +```
    111 +
    112 +```cpp
    113 +int age = 16;
    114 +int count; // объявили без значения
    115 +count = 3; // присвоили значение позже
    116 +
    117 +int x = 1, y = 2; // несколько переменных сразу
    118 +```
    119 +
    120 +| Тип | Что хранит | Пример |
    121 +|---|---|---|
    122 +| `int` | целые числа | `int n = 25;` |
    123 +| `long long` | большие целые числа | `long long big = 5000000000;` |
    124 +| `double` | дробные числа | `double h = 1.75;` |
    125 +| `char` | один символ | `char c = 'A';` |
    126 +| `string` | текст | `string s = "Alex";` |
    127 +| `bool` | истина или ложь | `bool ok = true;` |
    128 +
    129 +### Правила для имён
    130 +
    131 +- латинские буквы, цифры и `_`;
    132 +- нельзя начинать с цифры;
    133 +- `Age` и `age` — **разные** переменные;
    134 +- нельзя использовать слова языка (`int`, `return`, `if` …).
    135 +
    136 +---
    137 +
    138 +## 7. Ввод с клавиатуры — `cin`
    139 +
    140 +```cpp
    141 +int n;
    142 +cin >> n;
    143 +```
    144 +
    145 +Несколько значений подряд — через пробел или с новой строки, `cin` прочитает одинаково:
    146 +
    147 +```cpp
    148 +int a, b, c;
    149 +cin >> a >> b >> c;
    150 +```
    151 +
    152 +```text
    153 +3 7 10
    154 +```
    155 +
    156 +или
    157 +
    158 +```text
    159 +3
    160 +7
    161 +10
    162 +```
    163 +
    164 +> [!IMPORTANT]
    165 +> В олимпиадных задачах **не выводите подсказки** вроде `Введите число:`. Программа должна вывести ровно то, что написано в формате выходных данных, — иначе ответ будет считаться неверным.
    166 +
    167 +---
    168 +
    169 +## 8. Арифметика
    170 +
    171 +| Операция | Запись | Пример | Результат |
    172 +|---|:-:|:-:|:-:|
    173 +| сложение | `+` | `7 + 2` | `9` |
    174 +| вычитание | `-` | `7 - 2` | `5` |
    175 +| умножение | `*` | `7 * 2` | `14` |
    176 +| деление | `/` | `7 / 2` | `3` |
    177 +| остаток от деления | `%` | `7 % 2` | `1` |
    178 +
    179 +```cpp
    180 +int a = 17, b = 5;
    181 +
    182 +cout << a / b << endl; // 3 — дробная часть отбрасывается
    183 +cout << a % b << endl; // 2 — остаток
    184 +```
    185 +
    186 +> [!WARNING]
    187 +> Деление двух целых чисел даёт **целое** число: `7 / 2` равно `3`, а не `3.5`.
    188 +
    189 +### Порядок действий
    190 +
    191 +Как в математике: сначала `*`, `/`, `%`, затем `+` и `-`. Скобки меняют порядок.
    192 +
    193 +```cpp
    194 +cout << 2 + 3 * 4 << endl; // 14
    195 +cout << (2 + 3) * 4 << endl; // 20
    196 +```
    197 +
    198 +### Изменение переменной
    199 +
    200 +```cpp
    201 +int x = 10;
    202 +
    203 +x = x + 5; // 15
    204 +x += 5; // 20 — то же самое короче
    205 +x -= 3; // 17
    206 +x *= 2; // 34
    207 +x /= 4; // 8
    208 +x++; // 9 — увеличить на 1
    209 +x--; // 8 — уменьшить на 1
    210 +```
    211 +
    212 +---
    213 +
    214 +## 9. Работа с цифрами числа
    215 +
    216 +```cpp
    217 +int n = 4729;
    218 +
    219 +cout << n % 10 << endl; // 9 — последняя цифра
    220 +cout << n / 10 << endl; // 472 — число без последней цифры
    221 +cout << n / 10 % 10 << endl; // 2 — предпоследняя цифра
    222 +cout << n / 1000 << endl; // 4 — первая цифра четырёхзначного числа
    223 +```
    224 +
    225 +---
    226 +
    227 +## 10. Условие `if` (для логических задач)
    228 +
    229 +```cpp
    230 +if (условие) {
    231 + // если условие истинно
    232 +} else {
    233 + // иначе
    234 +}
    235 +```
    236 +
    237 +| Оператор | Значение |
    238 +|:-:|---|
    239 +| `==` | равно |
    240 +| `!=` | не равно |
    241 +| `>` `<` | больше, меньше |
    242 +| `>=` `<=` | больше или равно, меньше или равно |
    243 +| `&&` | и |
    244 +| `\|\|` | или |
    245 +
    246 +```cpp
    247 +int n = 7;
    248 +
    249 +if (n % 2 == 0) {
    250 + cout << "Чётное" << endl;
    251 +} else {
    252 + cout << "Нечётное" << endl;
    253 +}
    254 +```
    255 +
    256 +> [!WARNING]
    257 +> `=` — присваивание, `==` — сравнение.
    258 +
    259 +---
    260 +
    261 +## 11. Повторение — цикл `for`
    262 +
    263 +```cpp
    264 +for (int i = 1; i <= 5; i++) {
    265 + cout << i << " ";
    266 +}
    267 +```
    268 +
    269 +```text
    270 +1 2 3 4 5
    271 +```
    272 +
    273 +| Часть | Значение |
    274 +|---|---|
    275 +| `int i = 1` | начальное значение счётчика |
    276 +| `i <= 5` | цикл работает, пока условие истинно |
    277 +| `i++` | что делать со счётчиком после каждого шага |
    278 +
    279 +Перебор всех вариантов — например, всех двузначных чисел:
    280 +
    281 +```cpp
    282 +for (int x = 10; x <= 99; x++) {
    283 + // проверяем число x
    284 +}
    285 +```
    286 +
    287 +---
    288 +
    289 +## 12. Как проверяют решения
    290 +
    291 +Решение запускается на наборе тестов. Для каждого теста ответ программы сравнивается с правильным.
    292 +
    293 +| Вердикт | Что значит |
    294 +|:-:|---|
    295 +| `OK` / `Accepted` | все тесты пройдены |
    296 +| `WA` | неверный ответ хотя бы на одном тесте |
    297 +| `CE` | ошибка компиляции — код не собрался |
    298 +| `RE` | программа упала во время работы |
    299 +| `TLE` | программа работала слишком долго |
    300 +
    301 +---
    302 +
    303 +## 13. Шаблон программы
    304 +
    305 +```cpp
    306 +#include <iostream>
    307 +using namespace std;
    308 +
    309 +int main() {
    310 + // 1. объявить переменные
    311 +
    312 + // 2. ввести данные
    313 +
    314 + // 3. посчитать
    315 +
    316 + // 4. вывести ответ
    317 +
    318 + return 0;
    319 +}
    320 +```
  • Показать разницуСкрыть разницу
    1 +# 📘 Тема 1.2. Необходимый материал
    2 +
    3 +> Шпаргалка по переменным, типам данных и математическим операциям.
    4 +
    5 +---
    6 +
    7 +## 1. Объявление переменных
    8 +
    9 +```cpp
    10 +тип имя = значение;
    11 +```
    12 +
    13 +```cpp
    14 +int a = 5;
    15 +double price = 99.9;
    16 +int x, y, z; // несколько переменных одного типа
    17 +```
    18 +
    19 +> [!WARNING]
    20 +> Переменная без начального значения содержит «мусор». Сначала присвойте значение или считайте его через `cin`, потом используйте.
    21 +
    22 +---
    23 +
    24 +## 2. Типы данных
    25 +
    26 +| Тип | Что хранит | Диапазон / размер | Пример |
    27 +|---|---|---|---|
    28 +| `int` | целые числа | примерно от −2·10⁹ до 2·10⁹ | `int n = 42;` |
    29 +| `long long` | большие целые числа | примерно от −9·10¹⁸ до 9·10¹⁸ | `long long big = 10000000000;` |
    30 +| `double` | дробные числа | ~15 значащих цифр | `double r = 2.5;` |
    31 +| `char` | один символ | 1 байт | `char c = 'Z';` |
    32 +| `string` | строка | любая длина | `string name = "Иван";` |
    33 +| `bool` | `true` / `false` | 1 байт | `bool ok = false;` |
    34 +
    35 +> [!NOTE]
    36 +> Для `string` нужно подключить `#include <string>` (в большинстве компиляторов он уже подключается вместе с `<iostream>`).
    37 +
    38 +### Переполнение
    39 +
    40 +Если результат не помещается в `int`, получится неверное число.
    41 +
    42 +```cpp
    43 +int a = 100000;
    44 +cout << a * a << endl; // неверный результат — переполнение
    45 +
    46 +long long b = 100000;
    47 +cout << b * b << endl; // 10000000000
    48 +```
    49 +
    50 +> [!TIP]
    51 +> Если числа могут быть больше ~2·10⁹ (или их произведение может быть таким) — используйте `long long`.
    52 +
    53 +---
    54 +
    55 +## 3. Ввод и вывод разных типов
    56 +
    57 +```cpp
    58 +int age;
    59 +double height;
    60 +char letter;
    61 +string word;
    62 +
    63 +cin >> age >> height >> letter >> word;
    64 +cout << age << " " << height << " " << letter << " " << word << endl;
    65 +```
    66 +
    67 +```text
    68 +16 1.75 A hello
    69 +```
    70 +
    71 +### Строка целиком, с пробелами
    72 +
    73 +`cin >> s` читает только до первого пробела. Чтобы прочитать всю строку, используйте `getline`:
    74 +
    75 +```cpp
    76 +string line;
    77 +getline(cin, line); // "Привет, как дела?"
    78 +```
    79 +
    80 +### Склейка строк
    81 +
    82 +```cpp
    83 +string first = "Код";
    84 +string second = "будущего";
    85 +
    86 +cout << first + " " + second << endl; // Код будущего
    87 +cout << "Hello, " << first << "!" << endl; // Hello, Код!
    88 +```
    89 +
    90 +---
    91 +
    92 +## 4. Арифметические операции
    93 +
    94 +| Операция | Запись | `int`: `7 ? 2` | `double`: `7.0 ? 2` |
    95 +|---|:-:|:-:|:-:|
    96 +| сложение | `+` | `9` | `9` |
    97 +| вычитание | `-` | `5` | `5` |
    98 +| умножение | `*` | `14` | `14` |
    99 +| деление | `/` | `3` | `3.5` |
    100 +| остаток | `%` | `1` | — (только для целых) |
    101 +
    102 +### Целочисленное и дробное деление
    103 +
    104 +```cpp
    105 +cout << 7 / 2 << endl; // 3 — оба числа целые
    106 +cout << 7.0 / 2 << endl; // 3.5 — хотя бы одно дробное
    107 +cout << 7 / 2.0 << endl; // 3.5
    108 +cout << 1 / 3 << endl; // 0
    109 +cout << 1.0 / 3 << endl; // 0.333333
    110 +```
    111 +
    112 +> [!CAUTION]
    113 +> Дробь вида `1 / 3` в формуле с целыми числами превращается в `0`. Пишите `1.0 / 3`.
    114 +
    115 +### Приведение типов
    116 +
    117 +```cpp
    118 +int a = 7, b = 2;
    119 +
    120 +double d = (double)a / b; // 3.5
    121 +int t = (int)3.99; // 3 — дробная часть отбрасывается
    122 +```
    123 +
    124 +### Порядок действий
    125 +
    126 +1. скобки `( )`;
    127 +2. `*`, `/`, `%` — слева направо;
    128 +3. `+`, `-` — слева направо.
    129 +
    130 +```cpp
    131 +cout << 10 - 4 / 2 << endl; // 8
    132 +cout << (10 - 4) / 2 << endl; // 3
    133 +cout << 20 / 2 * 5 << endl; // 50 — слева направо
    134 +```
    135 +
    136 +### Сокращённые операции
    137 +
    138 +```cpp
    139 +x += 3; // x = x + 3
    140 +x -= 3; // x = x - 3
    141 +x *= 3; // x = x * 3
    142 +x /= 3; // x = x / 3
    143 +x %= 3; // x = x % 3
    144 +x++; // x = x + 1
    145 +x--; // x = x - 1
    146 +```
    147 +
    148 +---
    149 +
    150 +## 5. Остаток от деления `%`
    151 +
    152 +```cpp
    153 +cout << 17 % 5 << endl; // 2
    154 +cout << 20 % 5 << endl; // 0 — делится нацело
    155 +cout << 3 % 5 << endl; // 3 — меньшее число целиком остаётся в остатке
    156 +cout << 1234 % 10 << endl; // 4 — последняя цифра
    157 +cout << 1234 % 100 << endl;// 34 — две последние цифры
    158 +```
    159 +
    160 +### Округление деления вверх
    161 +
    162 +```cpp
    163 +int a = 17, b = 5;
    164 +cout << (a + b - 1) / b << endl; // 4 — сколько групп по 5, чтобы вместить 17
    165 +```
    166 +
    167 +---
    168 +
    169 +## 6. Математические функции — `<cmath>`
    170 +
    171 +```cpp
    172 +#include <cmath>
    173 +```
    174 +
    175 +| Функция | Что делает | Пример | Результат |
    176 +|---|---|---|:-:|
    177 +| `sqrt(x)` | квадратный корень | `sqrt(16)` | `4` |
    178 +| `pow(x, y)` | `x` в степени `y` | `pow(2, 10)` | `1024` |
    179 +| `abs(x)` | модуль целого числа | `abs(-7)` | `7` |
    180 +| `fabs(x)` | модуль дробного числа | `fabs(-2.5)` | `2.5` |
    181 +| `round(x)` | округление до ближайшего целого | `round(2.5)` | `3` |
    182 +| `floor(x)` | округление вниз | `floor(2.7)` | `2` |
    183 +| `ceil(x)` | округление вверх | `ceil(2.1)` | `3` |
    184 +| `trunc(x)` | отбросить дробную часть | `trunc(-2.7)` | `-2` |
    185 +
    186 +```cpp
    187 +double side = 3;
    188 +double area = side * side; // 9
    189 +double cube = pow(side, 3); // 27
    190 +double hyp = sqrt(3 * 3 + 4 * 4); // 5
    191 +```
    192 +
    193 +> [!TIP]
    194 +> `pow` возвращает `double`. Для целых степеней небольших чисел надёжнее перемножить вручную: `x * x * x`.
    195 +
    196 +### Число π
    197 +
    198 +```cpp
    199 +const double PI = 3.14; // если в задаче сказано «π ≈ 3,14»
    200 +const double PI_EXACT = acos(-1.0); // точное значение π
    201 +```
    202 +
    203 +---
    204 +
    205 +## 7. Константы
    206 +
    207 +Значение константы нельзя изменить после объявления.
    208 +
    209 +```cpp
    210 +const int DAYS_IN_WEEK = 7;
    211 +const double G = 9.81;
    212 +```
    213 +
    214 +---
    215 +
    216 +## 8. `min` и `max`
    217 +
    218 +```cpp
    219 +#include <algorithm>
    220 +
    221 +cout << min(4, 9) << endl; // 4
    222 +cout << max(4, 9) << endl; // 9
    223 +cout << min(min(4, 9), 1) << endl; // 1 — минимум из трёх
    224 +cout << max({4, 9, 1, 7}) << endl; // 9 — максимум из списка
    225 +```
    226 +
    227 +> [!WARNING]
    228 +> Оба аргумента должны быть одного типа: `max(5, 2.5)` не скомпилируется, а `max(5.0, 2.5)` — да.
    229 +
    230 +---
    231 +
    232 +## 9. Вывод дробных чисел — `<iomanip>`
    233 +
    234 +```cpp
    235 +#include <iomanip>
    236 +
    237 +double x = 3.14159;
    238 +
    239 +cout << x << endl; // 3.14159
    240 +cout << fixed << setprecision(2) << x << endl; // 3.14
    241 +cout << fixed << setprecision(0) << x << endl; // 3
    242 +```
    243 +
    244 +> [!NOTE]
    245 +> `fixed << setprecision(n)` задаёт ровно `n` знаков после запятой и действует на все следующие выводы.
    246 +
    247 +---
    248 +
    249 +## 10. Символы `char`
    250 +
    251 +Каждый символ хранится как число — его код.
    252 +
    253 +```cpp
    254 +char c = 'A';
    255 +
    256 +cout << c << endl; // A
    257 +cout << (int)c << endl; // 65
    258 +cout << char(c + 1) << endl;// B
    259 +
    260 +char d = '7';
    261 +int digit = d - '0'; // 7 — символ-цифра в число
    262 +```
    263 +
    264 +---
    265 +
    266 +## 11. Типичные ошибки
    267 +
    268 +| ❌ Неправильно | ✅ Правильно |
    269 +|---|---|
    270 +| `double half = 1 / 2 * x;` | `double half = 1.0 / 2 * x;` |
    271 +| `int` для чисел больше 2·10⁹ | `long long` |
    272 +| `cout << "Введите число:";` в задаче | выводить только ответ |
    273 +| `x % 2.5` | `%` работает только с целыми |
    274 +| `max(5, 2.5)` | `max(5.0, 2.5)` |
    275 +| Забыли `#include <cmath>` для `sqrt` | подключить нужную библиотеку |
    276 +
    277 +---
    278 +
    279 +## 12. Шаблон программы
    280 +
    281 +```cpp
    282 +#include <iostream>
    283 +#include <cmath>
    284 +#include <iomanip>
    285 +using namespace std;
    286 +
    287 +int main() {
    288 + // ввод данных
    289 +
    290 + // вычисления
    291 +
    292 + // вывод ответа
    293 +
    294 + return 0;
    295 +}
    296 +```
  • Показать разницуСкрыть разницу
    1 +# ⭐ Необязательные задачи
    2 +
    3 +> Дополнительная тренировка по теме. Решайте, если обязательные задачи уже сданы.
    4 +
    5 +---
    6 +
    7 +## Задача 1. Допуск к финалу
    8 +
    9 +### Условие
    10 +
    11 +Участник выполнял четыре задачи. Для выхода в финал нужно решить **хотя бы три** из них.
    12 +
    13 +Для каждой задачи известно, решена она (`1`) или нет (`0`). Определите, проходит ли участник в финал.
    14 +
    15 +### Входные данные
    16 +
    17 +Четыре числа, каждое `0` или `1`.
    18 +
    19 +### Выходные данные
    20 +
    21 +`FINAL`, если участник проходит в финал, иначе `HOME`.
    22 +
    23 +### Примеры
    24 +
    25 +| Ввод | Вывод |
    26 +|---|---|
    27 +| `1 1 0 1` | `FINAL` |
    28 +| `1 0 0 1` | `HOME` |
    29 +
    30 +---
    31 +
    32 +## Задача 2. Ближайший результат
    33 +
    34 +### Условие
    35 +
    36 +Три школьника набрали `A`, `B` и `C` баллов. Проходной балл равен `P`. Выведите тот результат, который ближе всего к проходному баллу.
    37 +
    38 +### Входные данные
    39 +
    40 +Четыре целых числа `A`, `B`, `C`, `P`.
    41 +
    42 +### Выходные данные
    43 +
    44 +Результат, ближайший к `P`. Если таких результатов несколько, выведите любой из них.
    45 +
    46 +### Пример
    47 +
    48 +| Ввод | Вывод |
    49 +|---|---|
    50 +| `58 71 64 70` | `71` |
    51 +
    52 +---
    53 +
    54 +## Задача 3. Второй результат
    55 +
    56 +### Условие
    57 +
    58 +В финале олимпиады три участника набрали различное количество баллов. Выведите второй по величине результат.
    59 +
    60 +### Входные данные
    61 +
    62 +Три различных целых числа.
    63 +
    64 +### Выходные данные
    65 +
    66 +Второй по величине результат.
    67 +
    68 +### Пример
    69 +
    70 +| Ввод | Вывод |
    71 +|---|---|
    72 +| `320 287 305` | `305` |
    73 +
    74 +---
    75 +
    76 +## Задача 4. Штрафное время
    77 +
    78 +### Условие
    79 +
    80 +На олимпиаде побеждает участник, набравший больше баллов. При равенстве баллов выше тот, у кого **меньше** штрафное время.
    81 +
    82 +Определите победителя. Гарантируется, что ничьей нет.
    83 +
    84 +### Входные данные
    85 +
    86 +Четыре целых числа: баллы первого участника, штраф первого, баллы второго участника, штраф второго.
    87 +
    88 +### Выходные данные
    89 +
    90 +`FIRST` или `SECOND` — кто победил.
    91 +
    92 +### Пример
    93 +
    94 +| Ввод | Вывод |
    95 +|---|---|
    96 +| `450 38 450 42` | `FIRST` |
  • Показать разницуСкрыть разницу
    1 +# ✅ Обязательные задачи (LMS)
    2 +
    3 +> Эти задачи нужно решить и сдать в LMS.
    4 +
    5 +---
    6 +
    7 +## Задача 1. Совет школы
    8 +
    9 +### Условие
    10 +
    11 +В управляющий совет школы входят родители, учителя и учащиеся, причём родителей должно быть **не менее одной трети** от общего числа членов совета.
    12 +
    13 +Сейчас в совет входит `N` человек, из них `K` родителей. Определите, сколько родителей нужно дополнительно ввести в совет, чтобы их число стало составлять не менее трети от числа членов совета.
    14 +
    15 +### Входные данные
    16 +
    17 +Два целых числа `N` и `K` (`N > 0`, `0 ≤ K ≤ N`), записанные в отдельных строках.
    18 +
    19 +### Выходные данные
    20 +
    21 +Минимальное число родителей, которое необходимо ввести.
    22 +
    23 +### Пример
    24 +
    25 +**Ввод:**
    26 +
    27 +```text
    28 +27
    29 +7
    30 +```
    31 +
    32 +**Вывод:**
    33 +
    34 +```text
    35 +3
    36 +```
    37 +
    38 +---
    39 +
    40 +## Задача 2. Шахматная доска
    41 +
    42 +### Условие
    43 +
    44 +Шахматная доска состоит из `n × m` клеток, окрашенных в чёрный и белый цвет в «шахматном» порядке. Клетка в левом нижнем углу доски — чёрная.
    45 +
    46 +Определите, сколько всего на доске чёрных клеток.
    47 +
    48 +### Входные данные
    49 +
    50 +Два числа `n` и `m`, записанные в отдельных строках.
    51 +
    52 +### Выходные данные
    53 +
    54 +Одно целое число — количество чёрных клеток.
    55 +
    56 +### Пример
    57 +
    58 +**Ввод:**
    59 +
    60 +```text
    61 +3
    62 +3
    63 +```
    64 +
    65 +**Вывод:**
    66 +
    67 +```text
    68 +5
    69 +```
    70 +
    71 +---
    72 +
    73 +## Задача 3. Манхэттен
    74 +
    75 +### Условие
    76 +
    77 +Кварталы Манхэттена состоят из авеню, направленных с юга на север, и улиц, направленных с запада на восток. Все улицы и авеню пронумерованы числами, начиная с 1. Передвигаться можно только по улицам или по авеню.
    78 +
    79 +Миша стоит на пересечении авеню `x1` и улицы `y1`. Ему нужно попасть на перекрёсток авеню `x2` и улицы `y2`. Определите кратчайший маршрут, который он должен пройти.
    80 +
    81 +### Входные данные
    82 +
    83 +Четыре числа `x1`, `y1`, `x2`, `y2`, записанные в отдельных строках.
    84 +
    85 +### Выходные данные
    86 +
    87 +Последовательность из латинских заглавных букв: `N` — шаг на север, `S` — на юг, `W` — на запад, `E` — на восток.
    88 +
    89 +### Пример
    90 +
    91 +**Ввод:**
    92 +
    93 +```text
    94 +1
    95 +1
    96 +3
    97 +4
    98 +```
    99 +
    100 +**Вывод:**
    101 +
    102 +```text
    103 +EENNN
    104 +```
    105 +
    106 +> [!NOTE]
    107 +> Если кратчайших маршрутов несколько, можно вывести любой.
    108 +
    109 +---
    110 +
    111 +## Задача 4. Плот
    112 +
    113 +### Условие
    114 +
    115 +Посередине озера плавает плот в форме прямоугольника. Стороны плота направлены вдоль параллелей и меридианов. Ось `OX` направлена на восток, ось `OY` — на север.
    116 +
    117 +Юго-западный угол плота имеет координаты `(x1, y1)`, северо-восточный — `(x2, y2)`. Пловец находится в точке `(x, y)`.
    118 +
    119 +Определите, к какой стороне плота (северной, южной, западной или восточной) или к какому углу (северо-западному, северо-восточному, юго-западному, юго-восточному) пловцу нужно плыть, чтобы как можно скорее добраться до плота.
    120 +
    121 +### Входные данные
    122 +
    123 +Шесть чисел: `x1`, `y1`, `x2`, `y2`, `x`, `y`.
    124 +
    125 +### Выходные данные
    126 +
    127 +Одна из строк: `N`, `S`, `W`, `E`, `NW`, `NE`, `SW`, `SE`.
    128 +
    129 +### Пример
    130 +
    131 +**Ввод:**
    132 +
    133 +```text
    134 +-1 -2 5 3 -4 6
    135 +```
    136 +
    137 +**Вывод:**
    138 +
    139 +```text
    140 +NW
    141 +```
    142 +
    143 +---
    144 +
    145 +## Задача 5. Рекламный щит
    146 +
    147 +### Условие
    148 +
    149 +Уличный рекламный щит прикреплён к опоре тремя креплениями. Первое крепление выдерживает ветер со скоростью не более `A` м/с, второе — не более `B` м/с, третье — не более `C` м/с.
    150 +
    151 +Щит надёжно закреплён, если **как минимум два** крепления из трёх выдерживают ветер данной скорости. Определите максимальную скорость ветра, которую выдержит щит.
    152 +
    153 +### Входные данные
    154 +
    155 +Три целых положительных числа `A`, `B`, `C`.
    156 +
    157 +### Выходные данные
    158 +
    159 +Максимальная скорость ветра, которую выдержит щит.
    160 +
    161 +### Пример
    162 +
    163 +**Ввод:**
    164 +
    165 +```text
    166 +28 15 10
    167 +```
    168 +
    169 +**Вывод:**
    170 +
    171 +```text
    172 +15
    173 +```
  • Показать разницуСкрыть разницу
    1 +# 🧑‍🏫 Практика
    2 +
    3 +> Задачи, которые решаем на занятиях.
    4 +
    5 +---
    6 +
    7 +## Задача 1. Самый высокий результат
    8 +
    9 +### Условие
    10 +
    11 +Три участника олимпиады набрали разное количество баллов. Определите, кто из них набрал больше всех.
    12 +
    13 +Если максимальный результат у первого участника, выведите `1`, если у второго — `2`, если у третьего — `3`.
    14 +
    15 +### Входные данные
    16 +
    17 +Три целых числа `a`, `b` и `c` — баллы первого, второго и третьего участников. Гарантируется, что все три числа различны.
    18 +
    19 +### Выходные данные
    20 +
    21 +Номер участника, набравшего наибольшее количество баллов.
    22 +
    23 +### Примеры
    24 +
    25 +| Ввод | Вывод |
    26 +|---|---|
    27 +| `85 92 78` | `2` |
    28 +| `100 95 98` | `1` |
    29 +| `70 80 95` | `3` |
    30 +
    31 +---
    32 +
    33 +## Задача 2. Проверка числа
    34 +
    35 +### Условие
    36 +
    37 +Дано целое число. Определите, является ли оно **двузначным чётным** числом.
    38 +
    39 +### Входные данные
    40 +
    41 +Одно целое число.
    42 +
    43 +### Выходные данные
    44 +
    45 +`YES`, если число двузначное и чётное, иначе `NO`.
    46 +
    47 +### Примеры
    48 +
    49 +| Ввод | Вывод |
    50 +|---|---|
    51 +| `24` | `YES` |
    52 +| `35` | `NO` |
    53 +| `100` | `NO` |
    54 +
    55 +---
    56 +
    57 +## Задача 3. Скидка в книжном магазине
    58 +
    59 +### Условие
    60 +
    61 +Участникам олимпиады предоставляется скидка на учебную литературу:
    62 +
    63 +- если сумма покупки не менее 3000 рублей — скидка 15%;
    64 +- иначе, если сумма покупки не менее 1500 рублей — скидка 10%;
    65 +- иначе скидки нет.
    66 +
    67 +Определите итоговую стоимость покупки.
    68 +
    69 +### Входные данные
    70 +
    71 +Одно вещественное число — стоимость покупки.
    72 +
    73 +### Выходные данные
    74 +
    75 +Итоговая стоимость покупки после применения скидки с двумя знаками после запятой.
    76 +
    77 +### Примеры
    78 +
    79 +| Ввод | Вывод |
    80 +|---|---|
    81 +| `2000` | `1800.00` |
    82 +| `3500` | `2975.00` |
    83 +| `900` | `900.00` |
  • Показать разницуСкрыть разницу
    1 +# 📘 Тема 1.3. Необходимый материал
    2 +
    3 +> Шпаргалка по конструкциям, которые пригодятся для задач на условия.
    4 +
    5 +---
    6 +
    7 +## 1. Логический тип `bool`
    8 +
    9 +Переменная типа `bool` хранит одно из двух значений: `true` (истина) или `false` (ложь).
    10 +
    11 +```cpp
    12 +bool isReady = true;
    13 +bool isEmpty = false;
    14 +
    15 +cout << isReady << endl; // 1
    16 +cout << boolalpha << isReady << endl; // true
    17 +```
    18 +
    19 +> [!NOTE]
    20 +> По умолчанию `cout` печатает `bool` как `1` или `0`. Чтобы вывести слова `true` / `false`, используйте `boolalpha`.
    21 +
    22 +---
    23 +
    24 +## 2. Операторы сравнения
    25 +
    26 +Результат любого сравнения — значение типа `bool`.
    27 +
    28 +| Оператор | Значение | Пример | Результат |
    29 +|:-:|---|:-:|:-:|
    30 +| `==` | равно | `5 == 5` | `true` |
    31 +| `!=` | не равно | `5 != 3` | `true` |
    32 +| `>` | больше | `5 > 3` | `true` |
    33 +| `<` | меньше | `5 < 3` | `false` |
    34 +| `>=` | больше или равно | `5 >= 5` | `true` |
    35 +| `<=` | меньше или равно | `5 <= 3` | `false` |
    36 +
    37 +```cpp
    38 +int a = 7, b = 3;
    39 +bool result = a > b; // true
    40 +```
    41 +
    42 +> [!WARNING]
    43 +> `=` — это **присваивание**, `==` — это **сравнение**.
    44 +>
    45 +> ```cpp
    46 +> x = 5; // записать в x число 5
    47 +> x == 5 // проверить, равен ли x пяти
    48 +> ```
    49 +
    50 +---
    51 +
    52 +## 3. Логические операции
    53 +
    54 +| Операция | Запись | Когда истинно |
    55 +|---|:-:|---|
    56 +| И (конъюнкция) | `&&` | когда **оба** условия истинны |
    57 +| ИЛИ (дизъюнкция) | `\|\|` | когда **хотя бы одно** условие истинно |
    58 +| НЕ (инверсия) | `!` | меняет значение на противоположное |
    59 +| Исключающее ИЛИ | `^` | когда истинно **ровно одно** из двух |
    60 +
    61 +### Таблицы истинности
    62 +
    63 +| `A` | `B` | `A && B` | `A \|\| B` | `A ^ B` |
    64 +|:-:|:-:|:-:|:-:|:-:|
    65 +| `true` | `true` | `true` | `true` | `false` |
    66 +| `true` | `false` | `false` | `true` | `true` |
    67 +| `false` | `true` | `false` | `true` | `true` |
    68 +| `false` | `false` | `false` | `false` | `false` |
    69 +
    70 +| `A` | `!A` |
    71 +|:-:|:-:|
    72 +| `true` | `false` |
    73 +| `false` | `true` |
    74 +
    75 +### Примеры
    76 +
    77 +```cpp
    78 +bool a = (5 > 3) && (2 > 4); // false
    79 +bool b = (5 > 3) || (2 > 4); // true
    80 +bool c = !(5 > 3); // false
    81 +```
    82 +
    83 +> [!TIP]
    84 +> У `&&` приоритет выше, чем у `||`. Ставьте скобки, чтобы не запутаться:
    85 +>
    86 +> ```cpp
    87 +> bool ok = (x > 0 && x < 10) || (x == 100);
    88 +> ```
    89 +
    90 +---
    91 +
    92 +## 4. Частые проверки
    93 +
    94 +### Число в диапазоне
    95 +
    96 +```cpp
    97 +bool inRange = (x >= 10) && (x <= 20); // x от 10 до 20 включительно
    98 +```
    99 +
    100 +> [!CAUTION]
    101 +> Запись `10 <= x <= 20` в C++ **не работает так, как в математике**. Правильно: `10 <= x && x <= 20`.
    102 +
    103 +### Чётность и делимость
    104 +
    105 +```cpp
    106 +bool isEven = (x % 2 == 0); // чётное
    107 +bool isOdd = (x % 2 != 0); // нечётное
    108 +bool div5 = (x % 5 == 0); // делится на 5
    109 +```
    110 +
    111 +### Знак числа
    112 +
    113 +```cpp
    114 +bool isPositive = x > 0;
    115 +bool isNegative = x < 0;
    116 +bool isZero = x == 0;
    117 +```
    118 +
    119 +### Одно из нескольких значений
    120 +
    121 +```cpp
    122 +bool isWeekend = (day == 6) || (day == 7);
    123 +```
    124 +
    125 +### Символ — буква или цифра
    126 +
    127 +```cpp
    128 +char c;
    129 +bool isUpper = (c >= 'A' && c <= 'Z');
    130 +bool isLower = (c >= 'a' && c <= 'z');
    131 +bool isDigit = (c >= '0' && c <= '9');
    132 +```
    133 +
    134 +### Последняя цифра числа
    135 +
    136 +```cpp
    137 +int last = x % 10; // последняя цифра
    138 +int lastTwo = x % 100; // две последние цифры
    139 +```
    140 +
    141 +---
    142 +
    143 +## 5. Условный оператор `if`
    144 +
    145 +Блок выполняется, только если условие истинно.
    146 +
    147 +```cpp
    148 +if (условие) {
    149 + // инструкции
    150 +}
    151 +```
    152 +
    153 +```cpp
    154 +int temperature;
    155 +cin >> temperature;
    156 +
    157 +if (temperature < 0) {
    158 + cout << "Мороз" << endl;
    159 +}
    160 +```
    161 +
    162 +---
    163 +
    164 +## 6. `if-else` — два варианта
    165 +
    166 +```cpp
    167 +if (условие) {
    168 + // если условие истинно
    169 +} else {
    170 + // если условие ложно
    171 +}
    172 +```
    173 +
    174 +```cpp
    175 +int age;
    176 +cin >> age;
    177 +
    178 +if (age >= 18) {
    179 + cout << "Взрослый" << endl;
    180 +} else {
    181 + cout << "Ребёнок" << endl;
    182 +}
    183 +```
    184 +
    185 +---
    186 +
    187 +## 7. `if - else if - else` — несколько вариантов
    188 +
    189 +Условия проверяются **сверху вниз**. Выполняется **первая** ветка, условие которой истинно, остальные пропускаются.
    190 +
    191 +```cpp
    192 +if (условие1) {
    193 + // если условие1 истинно
    194 +} else if (условие2) {
    195 + // если условие1 ложно, а условие2 истинно
    196 +} else {
    197 + // если все условия ложны
    198 +}
    199 +```
    200 +
    201 +```cpp
    202 +int speed;
    203 +cin >> speed;
    204 +
    205 +if (speed > 120) {
    206 + cout << "Очень быстро" << endl;
    207 +} else if (speed > 60) {
    208 + cout << "Быстро" << endl;
    209 +} else {
    210 + cout << "Медленно" << endl;
    211 +}
    212 +```
    213 +
    214 +> [!IMPORTANT]
    215 +> Порядок условий важен. Если в примере выше сначала проверить `speed > 60`, то при скорости `150` выведется «Быстро» — до проверки `speed > 120` программа просто не дойдёт.
    216 +
    217 +---
    218 +
    219 +## 8. Вложенные условия
    220 +
    221 +Внутри одного `if` или `else` можно написать ещё один `if`.
    222 +
    223 +```cpp
    224 +int x, y;
    225 +cin >> x >> y;
    226 +
    227 +if (x > 0) {
    228 + if (y > 0) {
    229 + cout << "Первая четверть" << endl;
    230 + } else {
    231 + cout << "Четвёртая четверть" << endl;
    232 + }
    233 +} else {
    234 + cout << "Левая полуплоскость" << endl;
    235 +}
    236 +```
    237 +
    238 +---
    239 +
    240 +## 9. Тернарный оператор `?:`
    241 +
    242 +Короткая запись выбора одного из двух значений.
    243 +
    244 +```cpp
    245 +условие ? значение_если_истина : значение_если_ложь
    246 +```
    247 +
    248 +```cpp
    249 +int a = 7, b = 3;
    250 +int bigger = (a > b) ? a : b; // 7
    251 +
    252 +cout << (a % 2 == 0 ? "even" : "odd") << endl; // odd
    253 +```
    254 +
    255 +---
    256 +
    257 +## 10. Полезные функции
    258 +
    259 +### `max` и `min`
    260 +
    261 +```cpp
    262 +#include <algorithm>
    263 +
    264 +int a = 5, b = 9, c = 2;
    265 +cout << max(a, b) << endl; // 9
    266 +cout << min(a, b) << endl; // 5
    267 +cout << max(max(a, b), c) << endl; // 9 — максимум из трёх
    268 +```
    269 +
    270 +### Модуль числа `abs`
    271 +
    272 +```cpp
    273 +#include <cstdlib> // abs для целых
    274 +#include <cmath> // fabs для дробных
    275 +
    276 +cout << abs(-12) << endl; // 12
    277 +cout << abs(3 - 10) << endl; // 7 — расстояние между 3 и 10
    278 +cout << fabs(-2.5) << endl; // 2.5
    279 +```
    280 +
    281 +### Вывод дробного числа с нужным количеством знаков
    282 +
    283 +```cpp
    284 +#include <iomanip>
    285 +
    286 +double price = 1234.5;
    287 +cout << fixed << setprecision(2) << price << endl; // 1234.50
    288 +```
    289 +
    290 +### Остаток от деления отрицательного числа
    291 +
    292 +```cpp
    293 +cout << (-5) % 24 << endl; // -5, а не 19
    294 +cout << ((-5) % 24 + 24) % 24 << endl; // 19
    295 +```
    296 +
    297 +---
    298 +
    299 +## 11. Повторить действие несколько раз
    300 +
    301 +Иногда нужно вывести один и тот же символ `k` раз.
    302 +
    303 +```cpp
    304 +int k = 4;
    305 +
    306 +// способ 1: цикл
    307 +for (int i = 0; i < k; i++) {
    308 + cout << "*";
    309 +}
    310 +cout << endl; // ****
    311 +
    312 +// способ 2: строка из k одинаковых символов
    313 +cout << string(k, '#') << endl; // ####
    314 +```
    315 +
    316 +Цикл `while` повторяет блок, пока условие истинно:
    317 +
    318 +```cpp
    319 +int n = 1;
    320 +while (n < 100) {
    321 + n = n * 2;
    322 +}
    323 +cout << n << endl; // 128
    324 +```
    325 +
    326 +---
    327 +
    328 +## 12. Побитовые операции
    329 +
    330 +Работают с битами целых чисел. Не путайте с логическими `&&` и `||`.
    331 +
    332 +| Операция | Запись | Пример (`a = 5`, `b = 3`) | Результат |
    333 +|---|:-:|:-:|:-:|
    334 +| побитовое И | `&` | `a & b` | `1` |
    335 +| побитовое ИЛИ | `\|` | `a \| b` | `7` |
    336 +| побитовое исключающее ИЛИ | `^` | `a ^ b` | `6` |
    337 +| сдвиг влево (умножение на 2ⁿ) | `<<` | `a << 1` | `10` |
    338 +| сдвиг вправо (деление на 2ⁿ) | `>>` | `a >> 1` | `2` |
    339 +
    340 +---
    341 +
    342 +## 13. Типичные ошибки
    343 +
    344 +| ❌ Неправильно | ✅ Правильно |
    345 +|---|---|
    346 +| `if (x = 5)` | `if (x == 5)` |
    347 +| `if (1 <= x <= 10)` | `if (1 <= x && x <= 10)` |
    348 +| `if (x > 70)` для «не менее 70» | `if (x >= 70)` |
    349 +| Сначала мягкое условие, потом строгое | Сначала строгое, потом мягкое |
    350 +| `if (x > 0); { ... }` — лишняя `;` | `if (x > 0) { ... }` |
    351 +| Вывод подсказок вроде `Введите число:` | Выводить только то, что требуется в задаче |
    352 +
    353 +---
    354 +
    355 +## 14. Шаблон программы
    356 +
    357 +```cpp
    358 +#include <iostream>
    359 +using namespace std;
    360 +
    361 +int main() {
    362 + // ввод данных
    363 +
    364 + // проверка условий
    365 +
    366 + // вывод ответа
    367 +
    368 + return 0;
    369 +}
    370 +```