Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
177 changes: 176 additions & 1 deletion doc/README.md
Original file line number Diff line number Diff line change
@@ -1 +1,176 @@
# Теория
# Документация курса по C++

Добро пожаловать в документацию курса по программированию на C++!

## Структура курса

Курс состоит из **11 занятий**, каждое занятие длится **2 пары** (4 академических часа). Из них примерно **1/3 (4 занятия)** - практические занятия.

### Теоретические занятия

1. [Занятие 1: Введение в C++](lesson_01.md) - 2 пары
2. [Занятие 2: Базовые типы данных и переменные](lesson_02.md) - 2 пары
3. [Занятие 4: Функции и указатели](lesson_04.md) - 2 пары
4. [Занятие 5: Массивы и строки](lesson_05.md) - 2 пары
5. [Занятие 7: Управление потоком выполнения](lesson_07.md) - 2 пары
6. [Занятие 8: Динамическая память](lesson_08.md) - 2 пары
7. [Занятие 10: Структуры и классы](lesson_10.md) - 2 пары

### Практические занятия

1. [Занятие 3: Практика 1 - Работа с переменными и типами данных](lesson_03.md) - 2 пары
2. [Занятие 6: Практика 2 - Функции и массивы](lesson_06.md) - 2 пары
3. [Занятие 9: Практика 3 - Алгоритмы и структуры данных](lesson_09.md) - 2 пары
4. [Занятие 11: Практика 4 - Объектно-ориентированное программирование](lesson_11.md) - 2 пары

## Программа курса

### Блок 1: Основы C++ (Занятия 1-5)
- Введение в язык (2 пары)
- Типы данных и переменные (2 пары)
- **Практика 1** (2 пары)
- Функции и указатели (2 пары)
- Массивы и строки (2 пары)

### Блок 2: Управление и память (Занятия 6-9)
- **Практика 2** (2 пары)
- Управление потоком выполнения (2 пары)
- Динамическая память (2 пары)
- **Практика 3** (2 пары)

### Блок 3: Объектно-ориентированное программирование (Занятия 10-11)
- Структуры и классы (2 пары)
- **Практика 4** (2 пары)

## Структура занятий

Каждое занятие состоит из **2 пар** (4 академических часа):
- **Пара 1** - первая часть материала
- **Пара 2** - вторая часть материала и практика

## Как пользоваться документацией

1. Изучайте теоретические занятия последовательно
2. Каждое занятие рассчитано на 2 пары - планируйте время соответственно
3. После каждого блока выполняйте практическое занятие
4. Решайте домашние задания из каждого урока
5. Используйте дополнительные материалы для углубленного изучения

## Дополнительные материалы

### Онлайн-ресурсы и документация

#### Справочники и документация
- [cppreference.com](https://en.cppreference.com/) - полный справочник по C++ стандартной библиотеке
- [C++ Reference](https://www.cplusplus.com/reference/) - альтернативный справочник с примерами
- [cppreference.com (русская версия)](https://ru.cppreference.com/) - русскоязычная версия справочника
- [C++ Standards](https://isocpp.org/std/the-standard) - официальные стандарты C++

#### Учебные материалы
- [Learn C++](https://www.learncpp.com/) - интерактивный учебник с примерами
- [C++ Tutorial](https://www.tutorialspoint.com/cplusplus/) - пошаговые уроки
- [C++ Language Tutorial](http://www.cplusplus.com/doc/tutorial/) - базовый туториал
- [GeeksforGeeks C++](https://www.geeksforgeeks.org/c-plus-plus/) - статьи и примеры кода

#### Рекомендации и best practices
- [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/) - рекомендации по написанию кода от создателей C++
- [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html) - стиль кодирования Google
- [C++ Best Practices](https://github.com/cpp-best-practices/cppbestpractices) - коллекция лучших практик

### Инструменты разработки

#### Компиляторы
- [GCC (GNU Compiler Collection)](https://gcc.gnu.org/) - свободный компилятор
- [Clang](https://clang.llvm.org/) - компилятор на базе LLVM
- [Microsoft Visual C++](https://visualstudio.microsoft.com/vs/features/cplusplus/) - компилятор от Microsoft

#### IDE и редакторы
- [Visual Studio Code](https://code.visualstudio.com/) - легковесный редактор с поддержкой C++

#### Инструменты отладки и анализа
- [Valgrind](https://valgrind.org/) - инструмент для обнаружения утечек памяти
- [AddressSanitizer](https://github.com/google/sanitizers/wiki/AddressSanitizer) - обнаружение ошибок памяти
- [GDB](https://www.gnu.org/software/gdb/) - отладчик GNU
- [cppcheck](http://cppcheck.sourceforge.net/) - статический анализатор кода

#### Системы сборки
- [CMake](https://cmake.org/) - кроссплатформенная система сборки
- [Make](https://www.gnu.org/software/make/) - классическая система сборки
- [Ninja](https://ninja-build.org/) - быстрая система сборки

### Книги

#### Для начинающих
- "Язык программирования C++" - Бьярн Страуструп
- "C++ Primer" - Стэнли Липпман, Жози Лажойе, Барбара Му
- "Программирование: принципы и практика с использованием C++" - Бьярн Страуструп

#### Продвинутые темы
- "Эффективный и современный C++" - Скотт Мейерс
- "C++ Concurrency in Action" - Энтони Уильямс (многопоточность)
- "The C++ Programming Language" - Бьярн Страуструп (полное руководство)

### Видео-курсы и лекции

- [C++ Programming Course](https://www.youtube.com/results?search_query=c%2B%2B+programming+course) - различные курсы на YouTube
- [CppCon](https://www.youtube.com/user/CppCon) - конференция по C++ с записями докладов
- [C++ Weekly](https://www.youtube.com/c/lefticus1) - еженедельные видео о C++

### Сообщества и форумы

- [Stack Overflow](https://stackoverflow.com/questions/tagged/c%2B%2B) - вопросы и ответы по C++
- [Reddit r/cpp](https://www.reddit.com/r/cpp/) - сообщество на Reddit
- [C++ Forum](https://cplusplus.com/forum/) - форум для обсуждения C++
- [Habr C++](https://habr.com/ru/hub/cpp/) - статьи на русском языке

### Практика и задачи

- [LeetCode](https://leetcode.com/) - задачи по алгоритмам и структурам данных
- [HackerRank C++](https://www.hackerrank.com/domains/cpp) - задачи по программированию
- [Codeforces](https://codeforces.com/) - соревнования по программированию
- [Project Euler](https://projecteuler.net/) - математические задачи для программирования

### Полезные библиотеки

- [Boost](https://www.boost.org/) - набор библиотек для C++
- [STL](https://en.cppreference.com/w/cpp/header) - стандартная библиотека шаблонов
- [Qt](https://www.qt.io/) - фреймворк для разработки приложений
- [SFML](https://www.sfml-dev.org/) - библиотека для мультимедиа и игр

### Онлайн-компиляторы

- [Compiler Explorer](https://godbolt.org/) - интерактивный компилятор с анализом кода
- [OnlineGDB](https://www.onlinegdb.com/online_c++_compiler) - онлайн компилятор с отладчиком
- [Repl.it](https://replit.com/languages/cpp) - онлайн IDE для C++

### Дополнительные темы для изучения

#### После базового курса
- Шаблоны (templates) и метапрограммирование
- STL контейнеры и алгоритмы
- Умные указатели (smart pointers)
- Многопоточность (threading)
- Лямбда-выражения и функциональное программирование
- Move-семантика и rvalue references
- RAII и управление ресурсами
- Исключения (exceptions) и обработка ошибок

## Форматирование кода

Весь код в курсе должен быть отформатирован с помощью `clang-format` со стилем Google.

```bash
clang-format -i --style=Google *.cpp *.h
```

## Структура проекта

- `task_XX/` - домашние задания
- `sandbox/` - примеры и шаблоны
- `additional_tasks/` - дополнительные задачи
- `lib/` - общие утилиты
- `doc/` - документация курса

## Лицензия

См. файл [LICENSE](../LICENSE) в корне проекта.
94 changes: 94 additions & 0 deletions doc/lesson_01.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# Занятие 1: Введение в C++

**Длительность:** 2 пары (4 академических часа)

## Цели занятия
- Познакомиться с языком C++ и его историей
- Понять основные отличия C++ от других языков программирования
- Настроить среду разработки
- Написать первую программу на C++

---

## Пара 1: Основы C++

### Теоретический материал

### Что такое C++?
C++ — это компилируемый язык программирования общего назначения, созданный Бьярном Страуструпом как расширение языка C.

### Основные особенности C++
- Объектно-ориентированное программирование
- Шаблоны (templates)
- Управление памятью
- Производительность
- Многопарадигменность

### Первая программа

```cpp
#include <iostream>

int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
```

### Компиляция и запуск
```bash
g++ -o program main.cpp
./program
```

---

## Пара 2: Первая программа и компиляция

### Практическая работа

#### Установка среды разработки
- Установка компилятора (GCC/Clang)
- Настройка IDE (VS Code, CLion, или другой)
- Проверка установки: `g++ --version`

#### Первая программа
```cpp
#include <iostream>

int main() {
std::cout << "Hello, World!" << std::endl;
std::cout << "Меня зовут [Ваше имя]" << std::endl;
return 0;
}
```

#### Компиляция и запуск
```bash
# Компиляция
g++ -o hello hello.cpp

# Запуск
./hello

# Компиляция с предупреждениями
g++ -Wall -Wextra -o hello hello.cpp
```

#### Структура программы на C++
- Директивы препроцессора (`#include`)
- Функция `main()` - точка входа
- Пространства имен (`std::`)
- Операторы ввода/вывода (`std::cout`, `std::cin`)

### Домашнее задание
- Настроить среду разработки (компилятор, IDE)
- Написать программу, которая выводит ваше имя и группу
- Изучить базовые типы данных в C++
- Написать программу, которая запрашивает имя пользователя и выводит приветствие

### Дополнительные материалы
- [cppreference.com](https://en.cppreference.com/)
- Документация по компилятору GCC/Clang
- Основы работы с командной строкой

Loading