Вступ#

Цикл лабораторних робіт із кредитного модуля «Програмування-2. С» присвячено мові програмування С в її базовому варіанті, викладеному в класичній роботі [1].

Для виконання циклу придатні будь-яке операційне середовище і будь-яка система програмування С, оскільки властивості мови, які тут вивчаються, є її ядром та присутні в усіх її реалізаціях. Методичні вказівки до виконання лабораторних робіт розроблено для виконання конкретного кола завдань і, за можливістю, уникають повторення матеріалу, висвітлюваного в лекціях, навчальній та довідковій літературі.

Ураховано те, що студенти, які навчаються в другому семестрі, уже знайомі з технологією програмування мовами високого рівня. Тому в цьому виданні опущено детальний огляд роботи з типами даних мови програмування С, арифметичних операцій, порядку виконання операцій тощо. Ці теми детально викладають у відповідному курсі лекцій. Виділяти окремо години лабораторних занять на виконання елементарних робіт недоцільно.

У циклі, присвяченому вивченню базової мови С, потрібно виконати 8 лабораторних робіт:

  • базові типи даних, уведення-виведення, бітові операції, операції зсуву;

  • одномірні й двовимірні масиви;

  • опрацювання символьних даних;

  • указівники, функції, рекурсія;

  • типи даних, визначені користувачем;

  • динамічні масиви;

  • однозв’язні списки;

  • робота з бінарними й текстовими файлами.

Загальні вказівки#

Опис кожної лабораторної роботи починається з підрозділів «Мета роботи» й «Теми для попереднього опрацювання». Зазначені в цих підрозділах теми, як і матеріали методичних вказівок до виконання відповідної лабораторної роботи, обов’язково повинно бути вивчено до початку роботи. Завдання до виконання кожної роботи складається з загальної частини, яку сформульовано в підрозділі «Узагальнене формулювання завдання» кожного розділу, та уточнення варіанту, який наведено в підрозділі «Варіанти завдань» кожного розділу.

Студент повинен заздалегідь ознайомитися зі своїм завданням і, якщо у нього виникають будь-які питання, поставити їх викладачеві до початку виконання роботи.

Виконання завдання#

Розроблення алгоритму#

Виконання кожної лабораторної роботи починається з розроблення алгоритму розв’язання відповідної задачі. На цьому етапі повинно бути детально проаналізовано умови завдання й розроблено алгоритм роботи програми. Алгоритм повинно бути подано в графічному вигляді. Хоча подання схеми алгоритму не є обов’язковим елементом проектування програми (для програм із лінійним алгоритмом можна обійтися без неї), схема є зручним інструментом для осмислення завдання й оптимізації розв’язку задачі. Графічне подання алгоритму не звільняє від потреби його текстового опису, у якому повинно бути обґрунтовано ключові алгоритмічні рішення. Під час розроблення алгоритму варто приділяти увагу його спрощенню, мінімізації обсягу обчислень, видаленню зайвих операцій і т.п.

Написання тексту програми#

Написання тексту програми починається з визначення змінних, потрібних для функціювання алгоритму. Велику частину змінних можна визначити ще на етапі проектування схеми алгоритму.

Для кожної змінної потрібно визначити її тип і ретельно перевірити, чи задовольняє діапазон значень обраного типу значенням, яких реально може набувати змінна. Для масивів і символьних рядків варто переконатися, що їхня розмірність відповідає можливим розмірам агрегацій даних.

Потрібно ухвалити рішення, чи є сенс призначати змінним програми початкові значення, і, якщо так, визначити відповідні константи.

Якщо схему алгоритму зроблено досить ретельно, написання кодової частини програми зводиться до запису кожного елемента схеми оператором мови програмування. При цьому потрібно уникати вживання оператора goto. Якщо в складі оператора зустрічається звернення до функції, потрібно перевірити, чи відповідають параметри та їхні типи, а також значення, що повертається, специфікаціям функції. Одночасно потрібно переконатися, що в програму включено (за допомогою команди #include) файл-заголовок з описом відповідної функції.

Під час написання операторів виведення результатів потрібно звернути особливу увагу на те, щоб результати було видано в наочній формі, придатній для аналізу. Якщо розмір результатів більший за розмір екрану, у програму потрібно включити зупинку (наприклад, за допомогою функції очікування натискання клавіші getch()) після виведення кожної порції результатів.

Під час написання операторів уведення обов’язково перед уведенням на екран потрібно виводити відповідне запрошення.

У програмі має бути передбачено можливість повторного випробування без потреби її перезапуску.

Ніколи не потрібно лінуватися писати коментарі до програми. Добре написані коментарі полегшують роботу як програміста, так і того, хто читатиме написану програму.

Підготовлений текст програми потрібно набрати в текстовому редакторі системи програмування та зберегти у відповідному файлі.

Відлагодження програми#

Відлагодження програми починається з усунення з неї синтаксичних помилок, тобто таких, які може визначити компілятор. Перед виконанням програми її треба скомпілювати (compile) і скомпонувати (link). Якщо програму відразу запускають на виконання (run), то компіляція й компоновка відбуваються автоматично.

Варто звернути увагу на те, що компілятор С, крім повідомлень про помилки, може видавати попередження. Попередження видають до таких конструкцій програми, які з погляду синтаксису є формально правильними, але компілятор «підозрює» в них семантичну помилку. Досить часто попередження компілятора дійсно відображають помилки програміста. Програма з помилками не може компонуватись і виконуватись, а з попередженнями — може. Якщо програму запускають на виконання відразу (без виконання компіляції окремим кроком), попередження компілятора не буде видно, тобто існує ризик виконати програму з помилками, які можна було виявити заздалегідь. Тому рекомендується завжди виконувати компіляцію окремим кроком і не переходити до наступного кроку, поки програміст не переконається в тому, що попереджень компілятора немає або його «підозри» безпідставні.

Відлагодження програмного коду можна вести методом «чорного ящика» або методом «білого ящика». Підхід «чорного ящика» розглядає програму як «ящик» із непрозорими стінками, і відлагоджувач нічого не знає про те, що всередині. Він тільки задає програмі вхідні дані та перевіряє, чи правильні її вихідні дані. Ідеальний тест методом «чорного ящика» повинен перевірити програму на всіх теоретично можливих комбінаціях вхідних даних, але це здебільшого технічно неможливо, тому для тестування потрібно підібрати деякі «критичні» комбінації вхідних даних, на яких помилки можливі якнайбільше. Коли помилку виявлено, підхід «чорного ящика» не дає можливості її локалізувати, тобто виявити, у якому точно місці програми вона знаходиться. Отже, підхід «чорного ящика» більше придатний не для відлагодження, а для зовнішнього тестування програми.

Для відлагодження, яке проводить автор програми, ліпше застосувати підхід «білого ящика», за якого відлагоджувач досконально знає внутрішню структуру програми й веде відлагодження за таким планом, який дає змогу перевірити функціональність програми на всіх гілках її алгоритму й на всіх граничних значеннях її змінних.

Сучасні системи програмування надають можливість відлагодження програми в покроковому режимі — виконання програми з зупинкою після кожного оператора або в заданих точках програми, із можливістю перевіряти поточні значення змінних. Проте не варто занадто захоплюватися цією можливістю: у низці випадків «старий добрий» метод виведення проміжних результатів є й швидшим, й інформативнішим.

План відлагодження потрібно готувати заздалегідь. Відлагодження планують поетапно, особливо для складних алгоритмів. Перевіряти все відразу не варто: на кожному етапі потрібно перевіряти що-небудь одне. До наступного етапу варто переходити тільки тоді, коли програміст упевнений, що на поточному етапі все працює коректно.

Іноді відлагодження вимагає внесення змін у програму: оголошення додаткових змінних, розкладання складних виразів на простіші, додавання операторів виведення і т.п. Після відлагодження ці зміни потрібно видалити. Після їх видалення потрібно не забути переконатися, що воно не внесло в програму нових помилок.

Текст програми обов’язково потрібно зберігати на власному зовнішньому носії. Лабораторний практикум побудовано таким чином, що програми — результати виконання перших робіт — можуть стати корисними під час виконання наступних робіт.

Доповнення#

До кожної лабораторної роботи потрібно зробити «заставку», яка містить номер роботи, тему, ПІБ студента, групу та меню для роботи. Рекомендації з організації елементарних заставки й меню наведено в додатку А.

Вимоги до оформлення звіту#

Звіт із лабораторної роботи повинен складатися з наступних розділів:

  • титульний аркуш;

  • зміст;

  • мета роботи;

  • постановка задачі;

  • основна частина;

  • висновки;

  • перелік посилань;

  • додатки.

Зразок титульного аркуша наведено в додатку Б. Готуючи його, потрібно правильно вказати номер лабораторної роботи, ПІБ студента тощо.

Зміст обов’язково має бути створено в автоматичному режимі, а не «вручну», містити номери сторінок розділів і підрозділів, їхні назви. Розділи «Постановка задачі» та «Основна частина» нумерують, починаючи з 1, решту розділів не нумерують. Рисунки й таблиці мають наскрізну нумерацію в межах кожного розділу з лідуючим номером розділу і наступної за ним крапкою, після якої вказується порядковий номер рисунка чи таблиці в межах розділу.

«Мета роботи» містить формулювання індивідуального завдання. У розділі «Постановка задачі» потрібно вказати, які завдання (функції) повинна виконувати програма.

Розділ «Основна частина» включає опис алгоритму програми (за потреби — схему алгоритму у вигляді UML-діаграми діяльності), опис змінних і структур даних, які застосовують у програмі, опис ключових програмних рішень, прийнятих під час реалізації алгоритму в тексті програми.

У розділі «Висновки» перераховують основні пункти виконаної роботи, трудовитрати. Роблять висновок про рівень працездатності програми, сферу її застосування, шляхи можливих модифікацій, розширення функціональних можливостей тощо.

У «Додатку А» розміщують текст програми, «Додатку Б» — зразок результату роботи програми.

Текстову частину звітів із лабораторних робіт повинно бути виконано відповідно до вимог ДСТУ 3008:2015 «Інформація та документація. Звіти у сфері науки і техніки. Структура та правила оформлювання».

Рекомендації з вибору літератури для вивчення мови програмування С#

Існує велика кількість підручників і довідників з мови C. У даному курсі увага акцентується на книжці [1], оскільки це — першоджерело, книжка, написана безпосередніми авторами мови. Під час користування довідковою літературою рекомендується мати на увазі наступне:

  • не варто звертатися до підручників, у яких роблять спробу одночасно викласти і базову мову C, і мову C++. На наш погляд, це — дві різні мови, і вивчати їх потрібно послідовно;

  • перевага надається раннім виданням перед сучасними «виданнями в строкатих обкладинках»: на жаль, останні приділяють більше уваги питанням, що та як потрібно зробити, аніж питанням, чому зробити потрібно саме те, що пропонується.