Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab-03.DOC
Скачиваний:
7
Добавлен:
14.02.2016
Размер:
304.13 Кб
Скачать

Області дії змінних

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

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

По-друге, змінна може бути оголошена всередині блоку, у тому числі й всередині тіла функції. Оголошена в такий спосіб змінна називається локальною і може використовуватися лише всередині блоку. Така змінна поза блоком, в якому вона оголошена, недоступна.

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

Приклад. Скласти програму для обчислення суми k чисел.

#include <iostream.h>

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

int s = 0;// глобальна змінна

void main()

{

int i, b, k;// локальні змінні

cout << "\nВведіть кількість доданків";

cin >> k;

for(i = 0; i < k; i++)

{

cout << "\nВведіть новий доданок";

cin >> b;

sum(b);// виклик функції

}

cout << "\ns = "<< s;

}

void sum(int c)

{

s = s + c;

}

У цій програмі змінна s є глобальною, вона доступна з обох функцій програми — main() та sum(), а змінні i, b, k та с — локальні, доступні тільки у тих функціях, де вони оголошені.

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

Передача аргументів за замовчуванням

Значення формальних параметрів можуть бути задані за замовчуванням. Зазвичай це константа, яка часто зустрічається при виклику функції. При цьому при описанні функції перелік параметрів за замовчуванням повинен міститися в кінці списку формальних змінних функції. Розглянемо наступні приклади [0]:

void foo(int i, int j = 7); // коректно

void foo(int i = 3, int j); // некоректно

void foo(int i, int j = 7, int k = 8); // коректно

void foo(int i = 1, int j = 7, int k = 8); // коректно

void foo(int i, int j = 7, int k); // некоректно

Вбудовані та перевантажені функції

Зазвичай вибір назви функції спрямований відобразити її основне призначення. Перевантаження використовує одну й ту саму назву для декількох операторів або функцій. Вибір варіанту залежить від типу аргументів оператора або функції. Наприклад:

int max(int, int);

double max(double, double);

Вбудовування функції в С++ забезпечується ключовим словом inline. Воно розташовується перед оголошенням функції, коли необхідно, щоб код в тілі функції вбудовувався в місце виклику функції [0].

inline double cube (double x)

{

return (x*x*x);

}

Обмеження компілятора не дозволяє вбудовувати складні функції.

Рекурсивні функції

В інженерній практиці доводиться часто реалізовувати рекурсивні алгоритми. Така необхідність виникає при роботі з динамічними структурами даних, такими як стеки, дерева, черги, тощо. Для реалізації рекурсивних алгоритмів у С++ передбачена можливість створення рекурсивних функцій. Рекурсивна функція являє собою функцію, у тілі якої здійснюється виклик цієї ж функції.

Нехай необхідно створити програму для обчислення факторіала додатного числа.

#include <iostream.h>

int fact(int n);

int main()

{

int m;

cout << "\nВведіть ціле число:";

cin >> m;

cout << "\n Факторіал числа " << m << "дорівнює " << fact(m);

return 0;

}

int fact(int n)

{

int a;

if (n<0) return 0;

if (n==0) return 1;

a =n * fact(n-1); // виклик цієї ж функції

// для n-1

return a;

}

Для від’ємного аргументу факторіала не існує, тому функція в цьому випадку повертає нульове значення. Оскільки факторіал нуля дорівнює 1 за означенням, то в тілі функції передбачений і цей варіант. У випадку коли аргумент функції fact() відмінний від 0 та 1, викликаємо функцію fact() із зменшеним на одиницю значенням параметра і множимо результат на значення поточного параметра. Таким чином, в результаті вбудованих викликів функцій отримаємо наступний результат:

n * (n-l) * (n-2) * ... * 2 * 1 * 1

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]