- Галузь знань: 12 Інформаційні технології
- Спеціальність: 123 Компʼютерна інженерія
- Освітня програма: "Сучасне програмування, мобільні пристрої та комп’ютерні ігри"
- Рівень вищої освіти: перший (бакалаврський)
- Вид дисципліни: професійна підготовка; обовʼязкова
- Форма навчання: денна
Метою навчальної дисципліни “Програмування” є отримання студентами загальних відомостей про сучасні технології програмування та цілеспрямоване використання розповсюджених мов програмування; отримання знань та навичок практичного застосування прийомів програмування при створенні прикладних та системних програмних продуктів. Курс містить практичні вправи для ознайомлення студентів з базовими принципами програмування для вирішення поставлених задач.
Компетентності:
- P3. Здатність розробляти алгоритмічне та програмне забезпечення, компоненти комп’ютерних систем та мереж, Інтернет додатків, кіберфізичних систем з використанням сучасних методів і мов програмування, а також засобів і систем автоматизації проектування тощо
- Z1. Здатність до абстрактного мислення, аналізу і синтезу
- Z2. Здатність до навчання та самонавчання (пошуку, оброблення та аналізу інформації з різних джерел)
- Z3. Здатність застосовувати знання на практиці
За результатами навчання студенти повинні знати:
- N1. Знати і розуміти наукові і математичні положення, що лежать в основі функціонування комп’ютерних засобів, систем та мереж.
- N2. Знати основи професійно-орієнтованих дисциплін спеціальності.
- N3. Мати знання та навички щодо проведення експериментів, збору даних та моделювання в комп’ютерних системах.
За результатами навчання студенти повинні вміти:
- N6. Вміти застосовувати знання для ідентифікації, формулювання і розв’язування технічних задач спеціальності, використовуючи відомі методи
За результатами навчання студенти повинні бути ознайомленими:
- з напрямками розвитку мов та технологій програмування;
- з напрямками розвитку архітектури нових комп’ютерів та характеристик їх апаратних і програмних модулів.
За результатами навчання студенти повинні мати навички:
- роботи з командною строкою ОС Linux;
- створення базових додатків на мові С;
- відлагодження розроблюємих програм;
- створення простих програм мовою С та С++ з використанням класів та бібліотеки STL;
- розробки програмної документації з виконанням умов ЄСПД.
На лекційних, практичних та лабораторних заняттях використовуються: розповідь, пояснення, демонстрація, дискусія.
На лекційних заняттях викладання матеріалу здійснюється в усній формі з використанням презентацій із записом основних положень лекції у конспект.
На практичних заняттях здійснюється підготовка до виконання лабораторних робіт: вирішуються типові завдання згідно темам лабораторних робіт, розроблюються схеми алгоритмів для розроблених програм.
На лабораторних заняттях студенти виконують та демонструють індивідуальні завдання по розробці програмних продуктів. Для цього вони використовують необхідні програмні та апаратні інструментальні засоби: середовище розробки, персональні комп’ютери.
Самостійна робота студента зводиться до опрацювання лекційного матеріалу, підготовці до лабораторних занять з використанням методичних рекомендацій.
За джерелами знань використовуються такі методи навчання: словесні – розповідь, пояснення, інструктаж; наочні – демонстрація, ілюстрація; лабораторна робота, вправи, контрольні роботи. За характером логіки пізнання використовуються такі методи: аналітичний, синтетичний, аналітико-синтетичний, індуктивний, дедуктивний. За рівнем самостійної розумової діяльності використовуються методи: проблемний, частково-пошуковий, дослідницький.
Поточний контроль реалізується у формі опитування під час проведення занять, захисту лабораторних робіт, проведення контрольних робіт.
Контроль складової робочої програми, яка освоюється під час самостійної роботи студента, проводиться:
- з лекційного матеріалу – шляхом перевірки контрольних робіт;
- з лабораторних занять – за допомогою перевірки виконаних завдань.
Семестровий контроль проводиться у формі екзамену у терміни, встановлені навчальним планом.
Семестровий контроль проводиться в усній та письмовій формах по екзаменаційних білетах, які включають екзаменаційні запитання та контрольні завдання (задачі).
Результати поточного контролю (поточна успішність) можуть враховуватись як допоміжна інформація для виставлення оцінки з даної дисципліни.
Відповідно до порядку визнання результатів навчання, здобутих у неформальній та/або інформальній освіті в НТУ "ХПІ", отримані надбання можуть бути частково зарахованими у вигляді балів за лабораторні заняття.
Студент вважається допущеним до семестрового екзамену з навчальної дисципліни за умови повного відпрацювання усіх лабораторних занять, передбачених навчальною програмою з дисципліни.
Семестровий контроль проводиться у формі екзамену у терміни, встановлені навчальним планом у усній або письмовій формі за екзаменаційними білетами, які включають екзаменаційні запитання та контрольні завдання (задачі). За умови дистанційного навчання екзамени проходять за допомогою функціоналу Microsoft Teams.
Таблиця 1. Розподіл навчального часу за семестрами та видами навчальних занять
Програмування ч.1 | Програмування ч.2 | |
---|---|---|
Семестр | 1 | 2 |
Загальний обсяг (годин / кредитів ECTS) | ?? 120/4 | ?? 180/6 |
Самостійна робота (годин) | ?? 56 | ?? 84 |
Лекції (годин) | 16 | 32 |
Лабораторні заняття (годин) | 32 | 32 |
Практичні заняття (годин) | 32 | 32 |
Семестровий контроль | Екзамен | Екзамен |
Таблиця 2. Розподіл балів для оцінювання успішності студента
Лабораторні роботи | Практичні заняття | Модульні контролі | Екзамен | Сума | |
---|---|---|---|---|---|
Програмування ч.1 | 64 | 26 | 10 | 15 | 115 |
Програмування ч.2 | 64 | 16 | 20 | 15 | 115 |
Таблиця 3. Шкала оцінювання знань та умінь: національна та ECTS
Сума балів за всі види навчальної діяльності | Оцінка ECTS | Оцінка за національною шкалою |
---|---|---|
90 - 100 | A | відмінно |
82 - 89 | B | добре |
74 - 81 | C | добре |
64 - 73 | D | задовільно |
60 - 63 | E | задовільно |
35 - 59 | FX | незадовільно з можливістю повторного складання |
0 - 34 | F | незадовільно з обов’язковим повторним вивченням дисципліни |
- Тема 1. Вступ до курсу.
- Вступ до курсу. Термін "програмування". Термін "мова програмування". Класифікація мов програмування. Типи даних. Змінні. Константи. Структура програми.
- Вступ до командної строки Linux. Термін "термінал". Утиліти sudo, apt-get, cd, mkdir, rm, ls, tree, nano, vim. Робота з системою контролю версіями git. Збірка проектів через Makefile. Компіляція програми з командної строки. Відлагодження додатків. Вступ до gdb, lldb. Точки зупинки (breakpoints).
- Тема 2. Основні механізми, що застосовуються при програмуванні.
- Розробка лінійних програм. Робота з числовими типами даних. Константи. Коментарі. Типи даних. Оператори та їх пріоритети. Стандарти оформлення коду. Процес отримання результатів роботи с-файлу. Опис прикладу звіту для лабораторних робіт другої теми.
- Використання умовного оператора if, if-else, if-else-if. Логічні операції. Тернарний оператор. Оператор вибору (case). Опис оператору вибору в вигляді схеми алгоритмів за умов присутності та відсутності оператору break. Стандарти оформлення коду при написанні умовних конструкцій.
- Робота з операторами циклу (for, while-do, do-while). Оператори break та continue. Схеми алгоритмів операторів циклу. Стандарти оформлення коду при написанні циклічних конструкцій.
- Робота з масивами. Об‘ява. Ініціалізація. Індексація. Алгоритм сортування типу «бульбашка». Пошук елементів в масиві. Одновимірні та багатовимірні масиви. Символьні масиви.
- Введення до процедурного програмування. Робота з функціями. Їх призначення. Створення власної функції. Передача аргументів в функцію. Сигнатура функції. Попередня об‘ява функції. Повернення значення з функції. Область видимості змінних. Передача аргументів з значення за замовчуванням. Бібліотечні функції. Перевантаження функції. Рекурсивні функції. Генератор псевдовипадкових чисел. Варіативні функції. Розмір типів даних (sizeof). Заголовні файли. Функція main() та її варіації. Статус завершення програми.
- Тема 3. Вступ до документації коду.
- Вступ до документації коду. Критерії опису коду. Створення автогенерації документації коду за допомогою doxygen. Знайомство с ДСТУ-оформленням документації про програмного продукту. Альтернативний варіант – markdown. Вимоги до оформлення лабораторних робіт 5ї та 6ї тем.
- Тема 4. Сучасні технології мови С
- Модульне тестування. Призначення. Якість модульних тестів. Життєвий цикл модульних тестів. Робота за бібліотекою check - опис структури файлів, приклад проекту, функції порівняння. Багатофайлова структура. Покриття коду за допомогою llvm-cov.
- Бібліотеки - статичні та динамічні. Призначення. Структура проекту при їх робробки. Компіляція бібліотек. Використання. Порівняння структури скомпільованих статичних та динамічних бібліотек та main модуля.
- Тема 5. Основа роботи з покажчиками
- Введення до вказівників. Сегменти памʼяті. Робота з динамічними масивами. Створення та робота з багатовимірними масивами. Передача аргументів в функцію за значенням та за вказівником. Розименування вказівників. Виділення та очистка пам‘яті. Контроль витіку пам‘яті. Ключове слово typedef.
- Оператори вводу/виводу. ASCII таблиця. Порівняння потокових та стандартних операторів вводу/виводу. Форматований ввід/вивід даних на екран за допомогою функцій printf / scanf. Флаги форматування. Робота з файлами. Файлові вказівники. Бібліотека stdio.h та функції роботи з файлами. Бібліотека errno.h. Передача потоків вводу та виводу у Linux.
- Представлення рядків в пам‘яті. NTCS. Робота з рядками типу char *. Бібліотека string.h та функції роботи зі строками та символами. Модифікація строк. Модульне тестування при роботі зі строками.
- Структуровані типи даних. Структури, суміші, перерахування. Опис структурованих типів даних. Призначення кожного типу. Доступ до полів структури. Ініціалізація структури. Масиви структур. Запис структур у файл.
- Динамічні типи даних. Динамічні масиви. Опис додання та видалення елементів із динамічного масиву.
- Тема 6. Класи. Вступ до ООП
- Вступ до об‘єктно-орієнтованого програмування. Класи. Перехід від мови С на С++. Поля та методи класу. Відрізнення класів від структур. Модифікатори доступу. Парадигми ООП. Інкапсуляція. Конструктори. Конструктор за умовчуванням. Конструктор копіювання. Деструктори. Списки ініціалізації. Перевантаження методів-конструторів. Передача об‘єкту класу за посиланням та за значенням. Константні методи.
- Класи. Робота з потоковим вводом / виведенням на консоль та у файл. Бібліотека iostream та стосовні класи istream, ostream, string, stringstream. Маніпулятори виводу. Методи роботи зі строками. Простір імен.
- Класи. Спадкування. Роль специфікаторів доступу при спадкуванні. Ключові слова override, final при спадкуванні. Ієрархія класів. Поліморфізм. Віртуальні функції. Віртуальні деструктори. Таблиця віртуальних функцій. Масив елементів ієрархії класів. Позднє зв‘язування. dynamic_cast
- Класи. Перевантаження операторів. Опис оператору як синтаксичний цукор функції. Перевантажувальні та неперевантажувальні оператори. Перевантажування унарних та бінарних операторів. Функції друзі.
- Шаблон. Шаблонна функція. Виклик шаблонної функції. Шаблоні класи. Помилки, що викликають при розподілу об‘яви та реалізації шаблонного методу та класу по файлам (багатофайлова структура)
- STL. Призначення. Ітератори. Послідовні контейнери. Використання циклу range-for (С++11). Асоціативні контейнери. Контейнери-адаптери. Алгоритми, що не змінюють послідовність. Визначення кількості елементів за заданим критерієм. Пошук елементів. Прохід по всієї колекції засобами STL. Алгоритми, що змінюють послідовність. Сортування контейнеру. Функтори. Асоціативні контейнери типу Мапа. Об‘єднання контейнерів. Предикати. Лямбда вирази
- Бєлов Ю. А. Вступ до програмування мовою С++. Організація обчислень: навч. посіб. / Ю. А. Бєлов, Т. О. Карнаух, Ю. В. Коваль, А. Б. Ставровський. – К.: Видавничо-поліграфічнийцентр "Київський університет", 2012. – 175 с.
- Культин Н.Б. C/C++ в задачах и примерах. - СПб.: БХВ-Петербург, 2005. — 288 с : ил. — ISBN 5-94157-029-5.
- Марапулец Ю.В. Язык С++, Основы программирования, 2019
- Златопольский Д. 1400 задач по программированию, 2020
- Vladimir Khorikov Unit Testing: Principles, Practices, and Patterns. Manning Publications, 2019. — 288 p. — ISBN 978-1617296277.
- Бьерн Страуструп. Язык программирования С++: http://8361.ru/6sem/books/Straustrup-Yazyk_programmirovaniya_c.pdf
- Богатырев. Руководство по программированию (на языке Си): http://padaread.com/?book=126142
- A.Alexandrescu C++ Coding Standards. – 225p
- Лаптев В.В. С++. Экспресс-курс. – СПб.: БВХ-Петербург, 2004. – 512с.
- Б.В. Керниган, Д.М. Ричи Язык С. – 229с.
- Прата, Стивен. Язык программирования C. Лекции и упражнения, 5-е издание. : Пер. с англ. — М. : Издательский дом “Вильямс”, 2013. — 960 с
- Стенли Липпман, Жози Лажойле Язык программирования С++. Вводный курс. – 1186с.
- Шилдт, Герберт. Полный справочник по C++, 4-е издание. . Пер. с англ. — М. : Издательский дом “Вильямс”, 2006. — 800 с.
- Scott Meyers Effective STL. – 194p
- Эккель Б. Философия C++. Введение в стандартный C++. 2-е изд. — СПб.: Питер, 2004. — 572 с.:
- Эккель Б., Эллисон Ч. Философия C++. Практическое программирование. — СПб.: Питер, 2004. — 608 с.: ил.
- Саттер, Герб. Решение сложных задач на С++. Серия C++ In-Depth: Пер. с англ. — M. : Издательский дом “Вильямс”, 2008. — 400 с
- Venkat Subramaniam. Unit Testing C++ Code – CppUnit by Example . https://www.agiledeveloper.com/articles/UTCPP.pdf
- http://en.cppreference.com
- http://cppstudio.com/
- https://msdn.microsoft.com/ru-ru/library/60k1461a.aspx
- а також інформаційні ресурси, що наведені до кожної лабораторної роботи