
- •1. Оголошення функцій користувача
- •2. Опис функції користувача
- •3. Виклик функцій користувача
- •Самостійна робота. Звернення до даних за допомогою посилань
- •Практична робота №1. Функції користувача
- •Методичні вказівки
- •Лабораторна робота №6. Функції користувача
- •Теоретичні відомості
- •Семінарське заняття №2. Організація програм
- •Лекція 8. Рекурсивні функцій. Перевантаження функцій
- •1. Рекурсивні функції
- •2. Перевантаження функцій.
- •Самостійна робота Функція main(). Розбір параметрів рядка.
- •Лекція 9. Вбудовані функції. Шаблони функцій
- •1. Шаблони функцій.
- •2. Вбудовані функції.
- •Самостійна робота. Класи пам’яті
- •Державний вищий навчальний заклад «Чернівецький політехнічний коледж» «Основи програмування та алгоритмічні мови»
- •Структура заняття:
- •Оголошення функцій користувача______________________________
- •Виклик функцій користувача___________________________________
- •Державний вищий навчальний заклад «Чернівецький політехнічний коледж» «Основи програмування та алгоритмічні мови»
- •Структура заняття
- •Оголошення функцій користувача_____________________________________________
- •Виклик функцій користувача_________________________________________________
- •Державний вищий навчальний заклад «Чернівецький політехнічний коледж» «Основи програмування та алгоритмічні мови»
- •Забезпечення заняття:
- •Зміст і хід заняття:
- •Оголошення функцій користувача ______________________________
- •Виклик функцій користувача___________________________________
- •Державний вищий навчальний заклад «Чернівецький політехнічний коледж» Основи програмування та алгоритмічні мови
- •Структура семінарського заняття Питання, що виносяться на семінар
- •Структура заняття:
- •Державний вищий навчальний заклад «Чернівецький політехнічний коледж» «Основи програмування та алгоритмічні мови»
- •Структура самостійної роботи
- •Питання і задачі для самостійної роботи
- •Державний вищий навчальний заклад «Чернівецький політехнічний коледж» «Основи програмування та алгоритмічні мови»
- •Структура заняття:
- •Державний вищий навчальний заклад «Чернівецький політехнічний коледж» «Основи програмування та алгоритмічні мови»
- •Структура самостійної роботи
- •Питання і задачі для самостійної роботи
Лекція 8. Рекурсивні функцій. Перевантаження функцій
1. Рекурсивні функції
Рекурсією називається алгоритмічна конструкція, де підпрограма викликає сама себе. Рекурсія дає змогу записувати циклічний алгоритм, не застосовуючи команд циклу. Типовий приклад використання рекурсії — обчислення факторіала числа. Нагадаємо, що факторіал числа - це добуток цілих чисел від одиниці до певного заданого числа. Отже, п!=п*(п - 1) *(п - 2) *... *1. Рекурсивна властивість факторіала: п!=п*(п-1 )!
Приклад Скласти функцію для обчислення п! використовуючи рекурсію, можна так:
long factorial (int n)
{
long fact;
if (n > 1) fact = n * faciorial(n -1);
else fact = 1;
return fact;
}
Зауваження. Оскільки навіть для невеликих чисел значення факторіала є досить великим, то у цьому прикладі для функції factorial задано тип long. Це дає змогу обчислити факторіали чисел від 1 до 16. Для визначення факторіалів чисел більших від 16 необхідно використати алгоритми „довгої арифметики".
Приклад. Рекурсивна функція обчислення суми цілих чисел від а до b має вигляд
int Suma (int a, int b)
{
іnt S;
if (a == b) S = a;
else S = b + Suma(a, b-1);
return S;
}
Зауваження Застосовуючи рекурсію, потрібно правильно складати стоп-умови, які забезпечують закінчення циклічних обчислень.
2. Перевантаження функцій.
У мові C++ допускається використовувати одне і те саме ім'я функції для різних наборів аргументів. Це називається перевантаженням функцій, або поліморфізмом. Перевантаження використовують, коли необхідно викликати функцію з аргументами різних типів, або коли функція залежить від різної кількості аргументів. У таких випадках необхідно кожну функцію оголосити й описати окремо. Під час її виклику компілятор автоматично проаналізує сигнатури та виконає код відповідної функції.
Приклад. Використовуючи перевантаження функції, скласти програму для упорядкування трьох уведених даних або символьного, або цілого типу.
#include <iostream.h>
void Sort(int n1, int n2, int n3);
void Sort(char n1, char n2, char n3);
void main()
{
int i1, i2, iЗ, k;
char c1, c2, c3;
cout << "Уведіть 1 для впорядкування символів, 2 - для чисел\n”;
сіп >> к;
if (k==1)
{
cout << "Уведіть три символи";
сіn >> с1 >> с2 >> сЗ;
Sort(c1,c2, сЗ);
}
if (k == 2)
{
cout << "Уведіть три числа";
сіп >> i1 >> i2 >> iЗ;
Sort(i1,i2, iЗ);
}
}
void Sort(int n1, int n2, int пЗ)
{ int c;
if (n1 > п2) {с = п1; п1 = п2; п2 = с;}
if (п2 > пЗ) {с = п2; п2 = пЗ; пЗ = с;}
if (п1 > п2) {с = п1; п1 = п2; п2 = с;}
cout << n1 << "\t" << n2 << "\t" << nЗ;
void Sort(char n1, char n2, char пЗ)
{ 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;
Зауваження. Для функцій, які відрізняються типом значення, яке вони повертають, і мають однаковий набір аргументів, перевантаження у мові C++ не визначено, тобто їм надавати однакові імена не можна.