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