Алгоритмічні мови та програмування
Від зрозумілої задачі до перевіреної програми
Курс формує повний цикл програмної роботи. Ви описуєте задачу, будуєте алгоритм, реалізуєте його в C++ або Python, перевіряєте результат і пояснюєте рішення.
Основний маршрут працює в браузері. Сайт дає теорію й послідовність, а workbench — середовище для коду та лабораторних.
Почати з Модуля 1 Відкрити робоче середовище Як виконувати лабораторні
3послідовні модулі
15лекцій
37лабораторних
282питань для самоперевірки
Як працювати з матеріалами
1. Розберіть задачуЗафіксуйте вхідні дані, результат і ключові обмеження.
2. Передбачте результатПокроково стежте за значеннями, запускайте код і порівнюйте результат із прогнозом.
3. Виконайте лабораторнуПідтримка поступово зменшується, тому частка самостійних рішень зростає.
4. Перевірте й здайтеВикористайте тести, граничні випадки, експорт notebook і коротке пояснення.
Якщо ви починаєте з нуля
Рухайтеся за послідовністю занять. Додаткові матеріали відкривайте тоді, коли потрібне повторення або ще один приклад.
Модуль 1. Основи C++ і модель стану програми
Від задачі та значень до керованої зміни стану, послідовностей і безпечного читання пам’яті.
Модуль 1. Основи C++ і модель стану програми5 лекцій · 9 лабораторних
Л1Від задачі до першої програми C++Лекція. Починаємо з нуля: розбираємо задачу, значення, імена та типи `int` і `double`, а потім складаємо першу програму C++.
ЛР1Алгоритм до коду: формалізація і покрокова перевіркаЛабораторна. Сервіс контролює споживання електроенергії пристроєм і обчислює підсумкову вартість сеансу.
ЛР2Перша програма C++ і контрольоване налагодженняЛабораторна. Невелике замовлення має ціну одиниці, кількість, доставку та окрему плату за пакування.
Л2Дані, вирази та вибір: умови й межіЛекція. Розбираємо арифметику різних типів, порівняння, логічні значення, умовні гілки та точні межі правил.
ЛР3Числові типи, перетворення та умовний операторЛабораторна. Система формує статистику партії та вибирає тарифне значення за одним порогом.
ЛР4Умови, `switch` і тести на межахЛабораторна. Контролер класифікує числовий показник у допустимому діапазоні та обробляє код команди.
Л3Копії, спільні дані й адреси в пам'ятіЛекція. Розрізняємо незалежні копії та спільний доступ, а потім вводимо адреси, вказівники й безпечні межі часу життя.
ЛР5Значення, посилання, вказівники та час життя об’єктівЛабораторна. Експерименти з копіями, посиланнями й вказівниками переходять у code review часу життя та безпечності розіменування.
Л4Цикли й повторення: стан, межі та вибір формиЛекція. Розбираємо `while`, `do-while`, `for` і цикл за елементами як різні форми керованого повторення, пов’язані зі станом та умовою завершення.
ЛР6Алгоритмічні патерни циклів і трасуванняЛабораторна. Послідовність значень утворюється арифметичним правилом, тому її можна опрацьовувати без контейнера.
ЛР7Самостійна задача з циклом і контрприкладомЛабораторна. Лічильник ресурсу збільшується фіксованим кроком, доки поточне значення не перевищить межу.
Л5Послідовності C++: масиви, контейнери й текстЛекція. Порівнюємо вбудовані масиви, `std::array`, `std::vector` і `std::string`, вчимося працювати з межами та двовимірними даними.
ЛР8Фіксовані й динамічні послідовності C++Лабораторна. Невеликий набір вимірювань треба прочитати як fixed-size data, сформувати динамічний результат і проаналізувати текстову мітку.
ЛР9Межі, двовимірні дані й побудова результатуЛабораторна. Таблиця вимірювань має рядки й стовпці. Потрібно отримати підсумки та безпечно прочитати одну клітинку.
МК1Модульний контроль 1Модульний контроль. Перевіряємо алгоритмізацію, умови, модель пам’яті, цикли, послідовності та перевірку меж.
Модуль 2. Алгоритми та інженерний C++
Декомпозувати програми, оцінювати алгоритми та керувати ресурсами безпечними засобами C++.
Модуль 2. Алгоритми та інженерний C++5 лекцій · 14 лабораторних
Л6Функції й узагальнення: декомпозиція, параметри та тестиЛекція. Будуємо функції з явними контрактами, вивчаємо параметри, перевантаження, значення за замовчуванням і перший простий шаблон функції.
ЛР10Рефакторинг у функціїЛабораторна. Монолітний фрагмент працює, але змішує три різні обчислення над однією послідовністю.
ЛР11Default arguments, overloads, function template і тестиЛабораторна. Невеликий набір helper-функцій має однаковий стиль виклику для кількох числових випадків.
Л7Пошук у послідовності та обсяг роботиЛекція. Порівнюємо способи пошуку, рахуємо основні операції та досліджуємо, як обсяг роботи змінюється зі зростанням даних.
ЛР12Лінійний і двійковий пошук: контракти, передумови та обсяг роботиЛабораторна. В одній роботі реалізуються лінійний і двійковий пошук, вимірюється їхня робота та перевіряється передумова впорядкованості.
ЛР13Порівняння пошуків і проєктування тестівЛабораторна. Є два workloads: багато запитів до вже sorted data та один запит до невпорядкованої послідовності.
Л8Сортування та поділ задачі на менші частиниЛекція. Впорядковуємо послідовності, оцінюємо вкладені проходи та простежуємо задачі, які розв’язуються через менші підзадачі.
ЛР14Сортування вибором і `std::sort`Лабораторна. Невеликий рейтинг треба впорядкувати та пояснити через invariant відсортованого префікса.
ЛР15Рекурсія і стек викликівЛабораторна. Рекурсивна функція підсумовує суфікс послідовності, переходячи до наступного індексу.
ЛР16Порівняння алгоритмів і рефакторингЛабораторна. Один aggregate обчислюється ітеративно та рекурсивним divide-and-conquer підходом.
Л9Моделювання даних, ресурси та стандартна бібліотека C++Лекція. Поєднуємо RAII, `struct`, `enum class`, `switch`, вибір контейнера, стандартні алгоритми та локальні lambda-вирази.
ЛР17Рефакторинг до RAIIЛабораторна. Starter code володіє ресурсом вручну та має control path, де cleanup легко пропустити.
ЛР18Записи, `enum class`, `switch` і колекціїЛабораторна. Набір заявок має id, назву, стан і числову вагу. Дані треба зібрати в предметні записи.
ЛР19Стандартні алгоритми, lambda й вибір контейнераЛабораторна. Послідовність треба знайти, відфільтрувати за predicate, трансформувати та впорядкувати.
ЛР20Записи, стани й перевірка інваріантівЛабораторна. Пакет records містить повторні id та некоректні quantity/price. Потрібно виділити допустиму частину.
Л10Файли, текстові дані й обробка помилокЛекція. Будуємо шлях від текстового рядка до перевірених даних, а потім додаємо читання, запис і явну обробку помилок.
ЛР21Текстові файли й чиста обробка данихЛабораторна. Добре сформований text file містить пари `name value`. Потрібно прочитати його й створити короткий report.
ЛР22Парсер, валідація і політика помилокЛабораторна. Text file містить записи `name quantity price`, серед яких є format errors і domain errors.
ЛР23Мініпроєкт C++: перевірені records і звітЛабораторна. Невеликий файл продажів містить `id category quantity price`. Програма має сформувати перевірений summary report.
МК2Модульний контроль 2Модульний контроль. Перевіряємо алгоритми, сучасний C++, роботу з пам’яттю, даними та помилками.
Модуль 3. Python і перенесення мислення
Перенести сформовані інженерні звички у Python.
Модуль 3. Python і перенесення мислення5 лекцій · 14 лабораторних
Л11Python як друга мова: перенесення мисленняЛекція. Переносимо сформовані алгоритмічні навички у Python та вивчаємо модель виконання notebook.
ЛР24Знайомі алгоритми у PythonЛабораторна. Відомі циклові обчислення переносяться з C++ у Python без зміни самого алгоритмічного задуму.
ЛР25Керування виконанням у Python і читання tracebackЛабораторна. Короткі Python fragments перевіряють truthiness, зміну стану та runtime conversion error.
ЛР26Відтворюваний notebook без прихованого стануЛабораторна. Notebook містить залежні обчислення, а старе значення змінної робить випадковий запуск оманливим.
Л12Колекції Python і текстЛекція. Обираємо list, tuple, set і dict за властивостями задачі та застосовуємо comprehensions.
ЛР27Ітерація, `enumerate` і `zip`Лабораторна. Мітки, основні значення та друга числова послідовність треба обходити без ручного індексування.
ЛР28Нормалізація тексту, `set`, `dict` і частотний аналізЛабораторна. Текст спочатку нормалізується, а потім аналізується через множини й словники для належності, унікальності та частот.
ЛР29Спільні списки, копії та тести змінЛабораторна. Два імені посилаються на один list, а третє отримує незалежну копію перед наступною мутацією.
Л13Функції, тести і винятки у PythonЛекція. Зберігаємо культуру декомпозиції, тестування та явної політики помилок.
ЛР30Функції без прихованого стану notebookЛабораторна. Обчислення працює в notebook лише тому, що читає global names із попередніх комірок.
ЛР31Підказки типів, тести й аналіз правдоподібного кодуЛабораторна. Коротка function виглядає правдоподібно, але один boundary або accumulator rule дає неправильну поведінку.
ЛР32Винятки й пакетна перевірка данихЛабораторна. Пакет рядків містить коректні та некоректні цілі числа. Expected data errors не повинні зупиняти всю обробку.
Л14Генератори, рекурсія й ефективність у PythonЛекція. Порівнюємо ліниве та матеріалізоване опрацювання і повертаємося до вартості рекурсії.
ЛР33Рекурсія і повторна роботаЛабораторна. Функція рахує кількість способів дійти до позиції `n`, використовуючи кроки 1 або 2.
ЛР34Comprehensions і генераториЛабораторна. Потрібно відфільтрувати числа, піднести їх до квадрата та використати результат один раз або кілька разів.
Л15pathlib, модулі й фінальний конвеєр PythonЛекція. Виходимо за межі одного notebook та збираємо відтворювану програму з кількох модулів.
ЛР35`pathlib` і файли у браузеріЛабораторна. Variant directory містить текстовий файл із цілими значеннями. Треба прочитати його та записати summary поруч.
ЛР36Модулі й багатофайловий конвеєрЛабораторна. Working script треба розділити на reusable transformation, summary та orchestration modules.
ЛР37Фінальна інтеграція у Python і transfer check C++Лабораторна. Файл містить записи `name quantity price discount`. Потрібно побудувати перевірений data-processing pipeline і report.
МК3Модульний контроль 3Модульний контроль. Перевіряємо перенесення навичок у Python, роботу з даними, тести й самостійне проєктування.