Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота 13-14.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
93.7 Кб
Скачать

Лабораторна робота № 13

Огляд мови С++. Функції

Мета роботи: зрозуміти, як можна конструювати програми за модульним принципом з невеликих фрагментів, які називаються функціями; навчитися створювати нові функції і використовувати їх при складанні простих програм.

Теоретичні відомості

Функції С++

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

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

Функції є істотною частиною будь-якої мови програмування, і С++ – не виключення. Функція найпростішого типу не приймає ніяких аргументів і повертає значення типу void (це означає, що насправді вона нічого не повертає). Інші функції можуть приймати один чи більш аргументів і повертати деяке значення. Імена функцій утворяться за тими ж правилами, що й імена змінних. Структура функції показана на рис. 13.1.

Рис. 13.1. Структура функції

Аргумент (parameter) це передана функції величина, що використовується для зміни роботи функції чи вказівки об'єкта, над яким виконуються дії.

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

Прототип (prototype) це оголошення функції, чи її попереднє визначення.

Пример 1.

#include <iostream.h>

#include <conio.h>

#pragma hdrstop

int multiply(int, int) ; //прототип функції multiply()

void showResult(int) ; //прототип функції showResult()

int main(int argc, char** argv)

{

int x, y, result;

cout << endl << "Enter the first value: ";

cin >> x;

cout << "Enter the second value: ";

cin >> y;

result = multiply(x, y) ; //виклик функції multiply()

showResult(result) ; //виклик функції showResult()

cout << endl << endl << "Press any key to continue...";

getch () ;

return 0;

}

/*визначення функції multiply()*/

int multiply(int x, int y)

{

return x * y;

}

/*визначення функції showResult()*/

void showResult(int res)

{

cout << "The result is: " << res << endl;

}

Ця програма запитує в користувача два числа (використовуючи стандартний вхідний потік, cin, викликає функцію multiply() для перемножування цих чисел і потім викликає функцію showResult() для виводу результату. Зверніть увагу на прототипи функцій multiply() і showResult() перед початком основної програми. У прототипах зазначений тільки тип значення, що повертається, ім'я функції і типи аргументів. Це мінімальні вимоги до оголошень функцій.

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

Функція multiply() може бути викликана декількома способами. Ви можете передати змінні, чи константи навіть результати виклику іншої функції:

result = multiply(2, 5); // передача констант

result = multiply(x, y); // передача змінних

showResult(multiply(x, y)); // значення, що повертається, використовується

//як аргумент іншої функції

multiply(x, y); // значення, що повертається, ігнорується

Зверніть увагу на приклад, у якому значення, що повертається функцією, не використовується. В даному випадку не має великого сенсу викликати функцію multiply() і потім ігнорувати результат, але такі виклики часто застосовуються при програмуванні на С++. Існує багато функцій, що виконують визначені дії і потім повертають код завершення операції. Значення, що іноді повертається, не має відносини до вашої програми, і ви цілком можете його ігнорувати. Якщо ви ніяк не використовуєте значення, що повертається, воно просто відкидається без усяких наслідків. Наприклад, ми ігноруємо результат виконання функції getch() (яка повертає ASCII-код натиснутої клавіші) у наших програмах-прикладах.

Правила роботи з функціями

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

  • Функція може повертати значення, але це не є обов'язковим.

  • Якщо для значення, що повертається, зазначений тип void, функція не повертає ніякого значення. Функція, що повертає void, може не містити оператора return, але при бажанні його можна залишити.

  • Якщо в оголошенні функції зазначено, що вона повертає значення, у тілі функції повинний міститися оператор return, що повертає це значення.

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

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

Синтаксис:

Формат оголошення (прототипу) функції:

ret_type function_name(argtype_l arg_l, argtype_2 arg_2, ..., ar-gtype_n arg_n) ;

Оголошення ідентифікує функцію, що буде використана в програмі. У ньому вказується тип значення, що повертається функцією (ret_type), ім'я функції (function_name), визначаються порядок (arg_l, arg_2, ..., arg_n) і типи (argtype_l, argtype_2, ..., argtype_n) аргументів, очікуваних функцією.

Формат визначення функції:

ret_type function_name(argtype_l arg_l, argtype_2 arg_2, ..., argtype n arg n)

{

statements;

}

Визначення функції містить блок коду (statements), що складає функцію. У визначенні також указуються: тип значення, що повертається, (ret_type), ім'я функції (function_name), що ідентифікує функцію, параметри функції (arg_l, arg_2, ..., arg_n) і їхні типи (argtype_l, argtype_2, ..., argtype_n).

Функція main()

Програма на С++ повинна мати функцію main(), що служить крапкою входу в програму. Ви бачили це у всіх попередніх прикладах. Однак не в усіх С++ програмах використовується традиційна функція main(). Для Windows-програм, написаних на С++, крапкою входу частіше є функція з назвою WinMain().

main() є такою же функцією, як і будь-яка інша. Це означає, що вона має ту ж базову структуру. Ви вже бачили, що для консольних додатків C++Builder за замовчуванням створює функцію main() з наступним прототипом:

int main(int argc, char** argv);

У такій формі main() приймає два аргументи і повертає ціле число. Як ви довідалися раніше, аргументи передаються функції при її виклику. Але функцію main() ви ніколи не викликаєте безпосередньо — це відбувається автоматично при запуску програми. Так як же функція main() одержує свої аргументи? Ось відповідь: з командного рядка. Проілюструемо сказане.

Припустимо, що у вас є консольний додаток, що запускається з запрошення DOS наступним командним рядком:

grep WM_KILLFOCUS -d -i

У цьому випадку ви запускаєте програму за назвою grep з аргументами WM_KILLFOCUS, -d і -i. Далі показано, як вони переводяться в argc і argv усередині функції main(). Насамперед, ціла змінна argc буде містити число параметрів, переданих у командному рядку. Це число завжди не менше 1, тому що ім'я програми також вважається параметром. Змінна argv є масивом покажчиків на рядки. Цей масив буде містити кожний з параметрів, переданих у командному рядку. У даному прикладі змінні одержать наступні значення:

argc містить 4

argv[0] містить з:\bc5\bin\grep.com

argv[l] містить WM_KILLFOCUS

argv[2] містить -d

argv[3] містить -i