Слайд 2
Функції
Функція — це іменована логічно завершена сукупність оголошень
і операторів, призначених для виконання певної задачі
Кожна
програма у своєму складі повинна мати головну функцію main(). Саме функція main() забезпечує створення точки входу в об’єктний модуль.
Крім функції main(), в програму може входити будь-яка кількість функцій. Кожна функція по відношенню до іншої є зовнішньою. Для того, щоб функція була доступна, необхідно, щоб до її виклику про неї було відомо компілятору.
Слайд 3
Функція користувача
Функція користувача - це поіменована група команд,
яка оголошена у файлі заголовків (або в основній програмі)
та описана у модулі (в основній програмі). До функції можна звертатись (викликати) з будь-якого місця програми необхідну кількість разів.
Оголошення функції (прототип, заголовок) задає ім'я функції, тип значення, що повертає функція (якщо воно є), а також імена та типи аргументів, які можуть передаватися як у функцію, так і з неї.
Визначення функції — це задання способу виконання операцій.
Слайд 4
Компоненти
Із поняттям функції у мові С++ пов’язано
три наступних компоненти:
опис функції;
прототип;
виклик функції.
Слайд 5
Опис функції
Опис функції складається з двох частин: заголовка
і тіла. Опис функції має наступну форму запису:
/* заголовок
функції*/
[тип_ результату] <ім’я>([список_параметрів]) {
// тіло функції
опис даних;
оператори;
[return] [вираз]; // якщо не void
}
Слайд 6
Тип результату
Тип результату — будь-який базовий або раніше
описаний тип значення (за винятком масиву і функції), що
повертається функцією (необов'язковий параметр). У випадку відсутності специфікатора типу передбачається, що функція повертає ціле значення (int). Якщо функція не повертає ніякого значення, то на місці типу записується специфікатор void. Якщо результат повертається функцією, то в тілі функції є необхідним оператор return вираз;, де вираз формує значення, що співпадає з типом результату
Слайд 7
Список параметрів
Список параметрів - визначає кількість, тип і
порядок проходження переданих у функцію вхідних аргументів, які розділяються
комою («,»). У випадку, коли параметри відсутні, дужки залишаються порожніми або містять ключове слово (void). Формальні параметри функції локалізовані в ній і недоступні для будь-яких інших функцій.
Список параметрів має такий вигляд:
([const] тип 1 [параметр 1], [const] тип 2 [параметр 2])
У списку формальних аргументів для кожного параметра треба вказати його тип (не можна групувати параметри одного типу, вказавши їх тип один раз).
Слайд 8
Тіло функції
Тіло функції може складатися з описів змінних і операторів. Змінні,
що використовуються при виконанні функції, можуть бути глобальні і локальні. Змінні, що описані
(визначені) за межами функції, називають глобальними. За допомогою глобальних параметрів можна передавати дані у функцію, не включаючи ці змінні до складу формальних параметрів. У тілі функції їх можна змінювати і потім отримані значення передавати в інші функції.
Змінні, що описані у тілі функції, називаються локальними або автоматичними. Вони існують тільки під час роботи функції, а після реалізації функції система видаляє локальні змінні і звільняє пам'ять. Тобто між викликами функції вміст локальних змінних знищується, тому ініціювання локальних змінних треба робити щоразу під час виклику функції. За необхідності збереження цих значень, їх треба описати як статичні за допомогою службового слова static
Слайд 9
Прототип
Прототип функції може вказуватися до виклику функції
замість опису функції для того, щоб компілятор міг виконати
перевірку відповідності типів аргументів і параметрів. Прототип функції за формою такий же, як і заголовок функції, наприкінці його ставиться «;». Параметри функції в прототипі можуть мати імена, але компілятору вони не потрібні.
Компілятор використовує прототип функції для порівняння типів аргументів з типами параметрів. Мова С++ не передбачає автоматичного перетворення типів у випадках, коли аргументи не співпадають за типами з відповідними їм параметрами, тобто мова С++ забезпечує строгий контроль типів.
При наявності прототипу функції, які викликаються, не зобов'язані розміщатися в одному файлі з функцією, що їх викликає.
Слайд 10
Виклик функції
Виклик функції може бути оформлений у
вигляді оператора, якщо у функції відсутнє значення, що повертається,
або у вигляді виразу, якщо існує значення, що повертається.
У першому випадку оператор має наступний формат:
ім'я_функції(список_аргументів);
Наприклад f(x);
В другому випадку вираз записується у такий спосіб: h=f(x);
Значення обчисленого виразу є значенням функції, що повертається. Значення, що повертається, передається в місце виклику функції і є результатом її роботи.
Число і типи формальних аргументів повинні співпадати з числом і типом фактичних параметрів функції. При виклику функції фактичні параметри підставляються замість формальних аргументів.
Слайд 11
Області дії змінних
При оголошенні змінних у програмі
велике значення має те місце, де вона оголошена. Від
того, де оголошена змінна, залежить можливість її використання.
У С++ можливі три місця оголошення змінних
Слайд 12
1. Глобальна змінна
По-перше, поза будь-яких функцій, у тому
числі і main(). Така змінна називається глобальною і може
використовуватися в будь-якому місці програми від місця оголошення і до кінця програми.
Слайд 13
2. Локальна змінна
По-друге, змінна може бути оголошена усередині
блоку, у тому числі й усередині тіла функції. Оголошена
в такий спосіб змінна називається локальною і може використовуватися лише усередині блоку. Така змінна поза блоком, у якому вона оголошена, невідома.
Слайд 14
3. Змінна параметр функції
По-третє, змінна може бути оголошена
як параметр функції. Крім спеціального призначення, а саме для
передачі даних у функцію, параметр можна розглядати як локальну змінну для тіла функції.
Слайд 15
Приклад 1. Скласти програму для обчислення суми k
чисел.
void sum(int);// прототип функції
int s = 0;// глобальна змінна
void
main() {
setlocale(LC_CTYPE, "ukr");
int i, b, k;// локальні змінні
cout << "\nВведіть число доданків";
cin >> k;
for (i = 0; i cout << "\nВведіть новий доданок ";
cin >> b;
sum(b);// звернення до функції
}
cout << "\ns=" << s;
system("pause");
}
void sum(int c){
s = s + c;
}
Слайд 16
Приклад
У цій програмі змінна s є глобальною, вона
доступна із обох функцій програми — main() і sum(),
а змінні i, b, k та с — локальні, доступні тільки у тих функціях, де вони оголошені.
Якщо глобальна і локальна змінні мають одне і теж ім’я, тоді вважається, що оголошені дві різні змінні зі своїми областями використання. При цьому локальна змінна буде видима у тій функції, де вона оголошена, а глобальна у всій програмі за виключенням функції, у якій оголошена локальна змінна.
Слайд 17
Приклад 2. Скласти програму, яка звертається до функції
обрахунку максимуму з двох чисел, функція має знаходитись в
окремому файлі
int max(int, int);/* прототип функції */
void main(){
setlocale(LC_CTYPE, "ukr");
int x, y, z;
cout << "\n почергово введіть x та у \n";
cin >> x; cin >> y; z = max(x, y); cout << "z=" << z;
system("pause");
}
Слайд 18
Файл max.cpp в проекті
#include "stdafx.h"
int max(int a,
int b) {
int c; /* робоча змінна */
if (a
>= b)c = a;
else c = b;
return c;
}
Слайд 19
Передача параметрів
У мові С++ визначено декілька способів передачі
параметрів і повернення результату обчислень функцій, серед них найбільш
широке використання набули:
виклик функції з передачею параметрів за допомогою формальних аргументів-значень;
виклик функції з передачею адрес за допомогою параметрів-показників;
виклик функцій з використанням посилань, коли доступ до переданих параметрів забезпечується за допомогою альтернативного імені (синоніма);
виклик функцій з передачею даних за допомогою глобальних змінних;
виклик функцій з застосуванням параметрів, що задані за замовчуванням, при цьому можна використовувати або всі аргументи, або їх частину.
Слайд 20
Вказівники і функції
Виклик функції з використанням показників забезпечує
передачу до функції не значень параметрів, а їх адреси,
тому можливо міняти значення цих змінних усередині функції і передавати за її межі (в інші функції)
int func(int *b) { // створюємо вказівник, а не просту змінну
*b = *b + 1;
return *b; // використовуєм вказівник у ф-ції
}
void main(){
setlocale(LC_CTYPE, "ukr");
int a = 19;
cout << "a = " << a << endl;
cout << "func = " << func(&a) << endl; // Передаємо АДРЕСУ змінної а
cout << "a = " << a << endl;
system("pause");
}
Слайд 21
Посилання і функції
Виклик функції з використанням параметра-посилання здійснює
передачу до функції не самої змінної, а тільки посилання
на неї. У цьому випадку забезпечується доступ до переданого параметра за допомогою визначення його альтернативного імені. Тоді всі дії, що відбуваються над посиланням, є діями над самою змінною.
int func(int &b) {
b++;
return b;
}
void main() {
setlocale(LC_CTYPE, "ukr");
int a = 19;
cout << "a = " << a << endl;
cout << "func = " << func(a) << endl;
cout << "a = " << a << endl;
system("pause");
}
Слайд 22
Глобальні змінні і функції
int a, b, с; //
глобальні параметри
void sum(); //----------- прототип функції
void main(){
setlocale(LC_CTYPE, "ukr");
cin
>> a >> b;
sum(); //----------- виклик sum()
cout << с << endl;
system("pause");
}
void sum() {//----------- функція sum()
с = a + b;
}
Слайд 23
Параметри за замовчуванням
void functl(float x, int y, int
z = 80){
cout
<< " у = " << y << "z = " << z << endl;
}
void funct2(float x, int y = 25, int z = 100){
cout << "x = " << x << "y = " << y << "z = " << z << endl;
}
void funct3(float x = 3.5, int y = 40, int z = 200){
cout << "x = " << x << "y = " << y << "z = " << x << endl;
}
void main(){
setlocale(LC_CTYPE, "ukr");
functl(5.1, 10); //за замовчуванням передається один аргумент — z
funct2(10.2); //за замовчуванням передаються два аргументи — у, z
funct3(); // за замовчуванням передаються всі аргументи
system("pause");
}
Слайд 24
Масив, як параметр функції
void printMas(int b[], int len);
void
main(){
setlocale(LC_CTYPE, "ukr");
const short int size = 10;
int a[size];
for
(int i = 0; i a[i] = rand()%100;
}
printMas(a, size);
system("pause");
}
void printMas(int b[], int len) {
for (int i = 0; i cout << b[i] << "\t";
}
}