Назад Зміст Вперед

Загальні поняття про функції та параметри

Що таке функція

Функція - це блок коду, який виконує певну задачу, має ім'я і може бути викликаний з інших частин програми за ім’ям.

Функції дозволяють структурувати і повторно використовувати той самий код, покращують його читаність.

Опис функції та виклик функції

Опис функції – це власне код цієї функції.

Виклик функції — це звернення до функції за ім’ям, при якому програма передає керування цієй функції для виконання її коду. Після завершення функції, керування передається назад, у програму, що викликала функцію, і оперативна пам'ять, яку займала функція, звільняється.

Якщо функція описана, але не викликана, вона не виконується.

Які бувають функції

Існують: головна функція, стандартні функції, функції, написані користувачем.

Головна функція

Ця функція називається main. З неї починається виконання програми. Із неї викликаються інші функції.

int main()  // Головна функція програми
{
    // Основний код програми буде розміщений тут
    
    return 0;  // Повертаємо 0 при успішному завершенні програми
}

Стандартні функції

Стандартні функції описані у стандартній бібліотеці або інших бібліотеках.

Для виклику стандартної функції потрібно за допомогою директиви #include підключити бібліотеку, в якій описана ця функція, а в тілі програми викликати цю функцію за ім'ям.

Наприклад, підключаємо бібліотеку

Функції користувача

У цьому випадку, опис та виклик функції знаходяться у тому ж файлі, що і головна програма.

Якщо потрібно викликати цю функцію в іншій програмі, то код функції потрібно копіювати.

Що вказується при описі функції:

  1. Заголовок:
  2. Тіло функції: блок коду, у фігурних дужках. Якщо функція повертає значення, то команда return має бути обов'язковою. Якщо функція void, то return не вказується

Наприклад,

int NumDiv(int n)  // Заголовок функції, n - вхідний параметр
{
    // Тіло функції
    if (n <= 0) return -1;  // Якщо число менше або дорівнює 0, повертаємо -1
    
    int k = 0;  // Лічильник дільників
    
    // Перебір всіх можливих дільників від 1 до n
    for (int i = 1; i <= n; i++)
    {
        if (n % i == 0)  // Якщо i є дільником n
        {
            k++;  // Збільшуємо лічильник
        }
    }
    return k;  // Повертаємо кількість знайдених дільників
}

Ця функція знаходить кількість дільників натурального числа n.

Де розміщуються описи функцій

Описи функцій користувача можуть бути розташовані в різних місцях. Ми будемо використовувати лише один вид розташування.

Перед main будемо описувати прототип функції (тільки заголовок, потім крапка з комой). При описі заголовка обов'язково вказувати типи параметрів, імена вказувати необов'язково.

Повний опис функції (весь код) будемо розташовувати після main.

Наприклад,

#include <iostream> // Підключення бібліотеки введення/виведення
using namespace std;

int NumDiv(int n); // Прототип функції

int main() // Головна функція програми
{
    int x = 23, k; // Ініціалізація змінних
    k = NumDiv(x); // Виклик функції для підрахунку дільників
    cout << k; // Виведення результату
    return 0; // Завершення програми
}

int NumDiv(int n) // Функція підрахунку дільників числа
{
    if (n <= 0) return -1; // Обробка некоректного вхідного значення
    int k = 0; // Лічильник дільників
    
    // Цикл для перевірки всіх можливих дільників
    for (int i = 1; i <= n; i++)
    {
        if (n % i == 0) // Якщо i є дільником n
        {
            k++; // Збільшуємо лічильник
        }
    }
    return k; // Повертаємо кількість дільників
}

Вхідні та вихідні дані для функцій

У тілі функції, як правило, немає операторів введення та виведення. Вхідні дані надходять через параметри, результат повертається в точку виклику функції (main або іншу функцію) командою return.

У попередньому прикладі вхідні дані це ціле число n, яке є параметром. Воно описано у заголовку і всередині функції не описується.

Функція повертає:

Тип змінної в return і тип значення, що повертається в заголовку функції повинні збігатися.

Імена змінних

Функція – це інша програма і в ній можуть використовуватись будь-які імена змінних.

Змінні в середині функції можуть мати такі ж імена, що і змінні в головній функції, і в інших функціях.

Змінні з однаковими іменами у різних функціях – це різні змінні.

Коли функція завершує свою роботу, змінні, описані в ній, перестають існувати.

Формальні та фактичні параметри

Формальні параметри — це параметри, які вказуються у заголовку функції під час її опису.

Фактичні параметри — це параметри, які вказуються під час виклику функції.

Імена формальних та фактичних параметрів можуть бути однаковими, а можуть бути різними. Типи формальних та фактичних параметрів обов'язково повинні збігатися.

При виклику функції формальні параметри замінюються фактичними. Це означає, що значення фактичного параметра присвоюється формальному параметру.

У нашому прикладі:

У описі функції int NumDiv(int n) формальний параметр n.

Під час виклику функції k=NumDiv(x) фактичний параметр x=23.

При цьому значення x=23 присвоюється змінній n і функція працює для n =23. Вона обчислює значення k, яке повертається до основної програми оператором return k. На цьому функція завершує свою роботу і управління передається в main.

Отримане значення k присвоюється в main теж змінної k. Ця змінна могла мати й інше ім'я. Потім результат виводиться на екран.

Такий спосіб передачі параметрів називається передачею параметрів за значенням.

Загалом, існують такі способи передачі параметрів:

  1. Передача за значенням: передається копія аргументу.
  2. Передача за посиланням: передається посилання на аргумент, дозволяючи змінювати його.
  3. Передача за вказівником: передається адреса аргументу, дозволяючи змінювати його через вказівник.

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

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

Принципи чистих функцій

Чиста функція:

Назад Зміст Вперед