- •Лабораторна робота №5 Функції Структури, об’єднання та типи означені програмістом
- •Теоретичні відомості
- •Синтаксис функцій
- •Прототипи функцій
- •Локальні змінні в функціях
- •Inline (підставні) функції
- •Void-функції
- •Рекурсивні функції
- •Перевантаження функцій
- •Виклик функцій
- •Передача параметрів та повернення результату
- •Структури, об’єднання, бітові поля
- •Структури
- •Доступ до компонентів структур:
- •Присвоювання структур
- •Вказівники на структури
- •Масиви і структури в структурах
- •Бітові поля
- •Об’єднання
- •Завдання
- •Функції
- •Структури, об’єднання та типи означені програмістом
Лабораторна робота №5
Лабораторна робота №5 Функції Структури, об’єднання та типи означені програмістом
Мета роботи: — вивчення логічної організації програми і використання функцій у С/C++;
— навчитися працювати зі складними типами даних при створенні програм на С/С++.
Теоретичні відомості
Процес розробки програмного забезпечення припускає поділ складної задачі на набір простіших задач і завдань. У C++ підтримуються функції як логічні одиниці (блоки тексту програми), які служать для виконання конкретного завдання. В термінології ООП функції – це методи, за допомогою яких об’єкти опрацьовують повідомлення.
Важливим аспектом розробки програмного забезпечення є функціональна декомпозиція.
Синтаксис функцій
В C++ функції мають такий синтаксис:
тип_результату ім’я_функції(список_параметрів)
{
//декларації
//оператори
return вираз;
}
Кожна функція має тип_результату, який вона повертає. Цей тип записується перед її назвою (іменем_функції). Список_параметрів іде за назвою функції і записується в круглих дужках. Функція повертає величину, використовуючи оператор return , який звичайно записують в кінці. Функція може мати більше одного оператора return.
Список параметрів може бути порожнім (void), або містити один чи більше параметрів, які відповідають аргументам даної функції при фактичному її виклику. Параметри в списку розділяються комою, кожен з них має такий синтаксис:
тип_параметра [&]ім’я_параметра
Необхідно дотримуватись таких правил відносно параметрів функції:
Кожен параметр має мати власний тип_параметра. Не можна використовувати один і той же тип_параметра, щоб оголосити декілька параметрів (як при оголошенні змінних).
Якщо функція не має параметрів, в круглих дужках після імені функції нічого не міститься.
Аргумент для параметра передається копіюванням, інакше говорять “за значенням”, якщо ви не вставляєте оператор звертання за адресою ( & ) після типу параметра. Коли параметр передає копію аргументу, то функція може змінювати тільки цю копію аргументу, яку ми безпосередньо використовуємо в межах функції. Початкове ж значення аргументу залишиться незміненим. Якщо ми використовуємо оператор &, то аргумент передається “через посилання”, оголошуючи параметр посиланням на аргумент. В цьому випадку параметр стає спеціальним псевдонімом аргументу. Будь-які зміни, які функція вносить в параметр, так само вносяться і в аргумент.
Параметри-посилання отримують аргументи, які є іменами змінних. Не можна використовувати вираз чи константу як аргумент, який відповідає параметру-посиланню, так як вираз не має адреси.
Параметри-копії приймають аргументи, які є константами, змінними або виразами. Тип аргументу повинен відповідати типу параметру або бути узгодженим з ним. Можна використовувати перетворення типів, щоб повідомити компілятору, як привести тип аргументу до відповідного типу параметра.
Наступні приклади показують різницю між параметрами-посиланнями і параметрами-копіями.
Нехай необхідно описати функцію, в яку передаються дві змінні цілого типу (в вигляді параметрів), і у функції ці змінні обмінюються своїми значеннями. Після виконання функції, змінні мають обмінятися значеннями.
Варіант №1:
void swap (int a, int b)
{ int temp;
temp = a;
a = b;
b = temp; }
//основна програма – main:
void main()
{ int a = 10, b = 20;
swap(a,b);}
Ця програма буде виконуватись з логічною помилкою. Після виконання функції нічого не зміниться: а = 10, b = 20.
Варіант №2:
void swap (int& a, int& b)
{ int temp;
temp = a;
a = b;
b = temp; }
//основна програма – main:
void main()
{ int a = 10, b = 20;
swap(a,b);}
Після завершення цієї програми: а = 20, b = 10.