2. Основні поняття
• Стандартні функції описані у бібліотеках.
• Функція користувача – це поіменована група
команд, яка оголошена у файлі заголовків
(або в основній програмі) та описана у модулі
( в основній програмі). До функції можна
звертатися (викликати) з будь-якого місця
програми необхідну кількість разів. Зазвичай
функції описують на початку програми, але
можна порушувати таку закономірність.
Тоді рекомендується оголошувати функції
3. Опис функцій користувача
Загальний вигляд:
Тип_значення назва_функції (список_формальних параметрів)
{
тіло_функцій;
return значення;
}
Назву функцій надає користувач за правилом створення
ідентифікаторів
Тип функцій – це тип змінної, яку функція повертає в основну
програму.
Увага! Якщо тип функцій не зазначати, за замовчуванням це
буде цілий тип. Функцію, яка не повертає у програму
жодного результату оголошують з типом void.
4. Приклади опису функцій
float Suma(int kil, float cina) //заголовок
{
float s=kil*cina;
return s; //значення, яке повертає функція
}
//---------------------------------------------
void dilennya (float v, float n)
{
cout<<“n dilennya=“<<v/n;
}
5. Приклади виклику функцій
Нехай заголовок функції
float perimeter (int k=4, float r=2.5)
До цієї функції можна звернутися одним із способів:
perimeter (7, 2.8); k=7, r=2.8
perimeter (8); k=8, r=2.5
perimeter (); k=4, r=2.5
Увага! Але у списку фактичних параметрів не можна
пропускати змінні з початку та середини списку, тобто не
можна викликати функцію так : perimeter (1.65);, оскільки
тут пропущено ініціалізацію першої змінної k
6. Приклади використання функцій
Написати функцію, що отримує
натуральне число, міняє порядок
цифр у цьому числі на протилежний
і повертає отриманий результат
#include<iostream>
using namespace std;
int Mir(int a)
{ int rez=0;
while(a>0)
{ rez=rez*10 +a%10;
a/=10;}
return rez; }
int main()
{int num;
cout<<“chislo: “;
cin>>num;
int rez=Mir(num);
cout<<”dzerkalo=”<<rez<<endl;
return 0;}
Написати функцію, що отримує ціле число, і якщо
число дорівнює 1, то повертає симвло “р”,
якщо -1 – символ “п”, в іншому випадку
виводить повідомлення про помилку й
повертає символ “0”
#include<iostream>
using namespace std;
char Test(int a)
{ switch (a)
{ case 1: return ‘p’;
case -1: return ‘n’;
default: cout<<“error!”;
return ‘0’;}
}
int main()
{int num;
cout<<“chislo: “; cin>>num;
cout<<”rezultat=”<<Test(num)<<endl;
retutn 0;}
7. Приклади використання функцій
Продовження
У наступній програмі використовується глобальна
змінна з ім'ям num. Кожна функція в програмі,
описана нижче від місця оголошення глобальної
змінної, може використати або змінити її значення
#include<iostream>
int num=1;
using namespace std;
void one (void)
{ cout<<“num u one=“<<num<<endl;
num++;}
void two (void)
{ cout<<“num u two=“<<num<<endl;
num++;}
int main()
{cout<<“num u main= “<<num<<endl;
num++;
one();
two();
return 0;}
Клацнути
Звертання до глобальної змінної, що має
однакове ім'я з локальною
#include<iostream>
int num=1;
using namespace std;
void show_num (int num)
{ cout<<“local num=“<<num<<endl;
cout<<“global num=“<<::num<<endl;}
int main()
{
int val=2;
show_num(val);
return 0;}
num u main= 1
num u one= 2
Num u two= 3
local num=2
global num=1
8. Завдання
1. Скласти програму для обчислення факторіала числа.
Знайдіть факторіали 4, 7, 10.
2. Запишіть функцію для обчислення добутку цілих чисел з
діапазону від а до в. знайдіть добуток чисел, діапазон
увести з клавіатури.
3. Обчислити суму перших п цілих додатних чисел.
4. Перевірте, чи є уведено число паліндромом. Наприклад,
12321, 2442 - паліндроми
9. Випадкові числа
Заголовковий файл <cstdlib> містить функцію
random(x), яка повертає випадкове ціле число в
діапазоні від 0 до х. Перед першим звертанням до
функції random(x) рекомендується викликати
функцію randomize(). Якщо цього не зробити, то
при кожному запуску програми будемо мати
однакову послідовність випадкових чисел.
10. Прототипи функцій
Загальний вигляд:
Тип_значення назва (типи параметрів через кому);
Наприклад:
…
float sred( float, float); //прототип функції (оголошення)
int main () //головна функція
{… float z=sred(x, y); …} // виклик функції
float sred( float a, float b) // функція, оголошена прототипом
{float c=(a+b)/2; return c;}
11. Перевантаження функцій
Приклад
Використовуючи перевантаження функцій, скласти
програму для упорядкування трьох уведених даних
або символьного, або цілого типу.
………………………….
void sort(int n1, int n2, int n3);
void sort(char n1, char n2, char n3);
int main()
{int i1, i2, i3,k;
char c1, c2, c3;
cout<<“uvedit 1 dlya simvoliv, 2
– dlya chiseln”; cin>>k;
if (k==1)
{ cout<<“3 simvoli: “;
cin>>c1>>c2>>c3;
sort( c1, c2, c3); }
if (k==2)
{ cout<<“3 chisla: “;
cin>>i1>>i2>>i3;
sort( i1, i2, i3);}
return 0;}
//--------------------------------
--------------
void sort(int n1, int n2, int n3)
{int c;
if (n1>n2) {c=n1; n1=n2; n2=c;}
if (n2>n3) {c=n2; n2=n3; n3=c;}
if (n1>n2) {c=n1; n1=n2; n2=c;}
cout<<n1<<“t”<<n2<<“t”<<n3;}
//--------------------------------
--------------
void sort(char n1, char n2, char
n3)
{char c;
if (n1>n2) {c=n1; n1=n2; n2=c;}
if (n2>n3) {c=n2; n2=n3; n3=c;}
if (n1>n2) {c=n1; n1=n2; n2=c;}
cout<<n1<<‘t’<<n2<<‘t’<<n3;}
12. Шаблони функцій
Приклад використання
Використовуючи шаблони функцій, скласти програму для
упорядкування трьох уведених даних або символьного,
або цілого типу.
///…………………………………………………………………………………….
// оголошення шаблона функції
template <class myType>
void sort(myType n1, myType n2,
myType n3);
int main()
{
int i1, i2, i3,k;
char c1, c2, c3;
cout<<“uvedit 1 dlya
simvoliv, 2 – dlya chiseln”;
cin>>k;
if (k==1)
{ cout<<“3 simvoli: “;
cin>>c1>>c2>>c3;
sort( c1, c2, c3); } //
виклик функції
if (k==2)
{ cout<<“3 chisla: “;
cin>>i1>>i2>>i3;
sort( i1, i2, i3);} // виклик функції
return 0;
}
//----------------------------------------------
// опис шаблона функцій
template <class myType>
void sort(myType n1, myType n2, myType n3);
{
myType c;
if (n1>n2) {c=n1; n1=n2; n2=c;}
if (n2>n3) {c=n2; n2=n3; n3=c;}
if (n1>n2) {c=n1; n1=n2; n2=c;}
cout<<n1<<“t”<<n2<<“t|<<n3;
}
Увага! У стандарті ISO/ANSI замість ключового слова
class прийнято и typename
13. Вбудовані функції
Приклад використання
…………………………………
// оголошення вбудованої
функції
inline float dob( int a);
int main()
{
int n=10; float D=1;
for (int k=1; k<=n; k++)
D*=dob(k);
cout<<“D= “<<D;
return 0;
}
//-------------------------------------
float dob(int a)
{
float d;
d=(5*a+2)/(a-15);
return d;
}
Результат виконання 28380.5
Запитання: Чи прискорює роботу
наведеної програми
використання вбудованої
функції?
14. Завдання
1. Використовуючи перевантаження функцій, складіть
програму для обчислення суми п'яти введених даних.
Дані можуть бути цілого або дійсного типу.
2. Напишіть програму для визначення об'єму циліндра, де
функція отримує, як параметри, радіус і висоту циліндра
(v=2πrh, π=3.141592)
3. Написати функцію, що повертає більше з двох цілих
чисел. Використовуючи цю функцію, написати програму
для знаходження більшого з трьох чисел