add 1.3. topic
Родитель:
b2eaa8d
· сравнить с родителем
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 строк. -
C++/Тема 1.1 Введение в олимпиадное программирование и среду разработки/Необходимый материал.md +320
Показать разницуСкрыть разницу
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 +```