Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота №4.doc
Скачиваний:
1
Добавлен:
26.08.2019
Размер:
123.9 Кб
Скачать

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

Функції і масиви в С++

1. Мета роботи:

  1. Отримання практичних навичок при роботі одновимірними і двовимірними масивами.

  2. Отримання практичних навичок при роботі з функціями

  3. Отримання практичних навичок при передачі масивів у функції.

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

Функція – це іменована послідовність описів і операторів, що виконує закінчену дію, наприклад, формування масиву, виведення масиву і т.д.

Будь-яка функція повинна бути оголошена і визначена.

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

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

тип ім’я_функції([список_формальних_параметрів])

{ тіло_функції}

  • Тіло_функції – це блок або складовий оператор. Усередині функції не можна визначити іншу функцію.

В тілі функції повинен бути оператор, який повертає набуте значення функції в точку виклику. Він може мати 2 форми:

  1. return вираз;

  2. return;

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

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

  • Список формальних параметрів – це ті величини, які вимагається передати у функцію. Елементи списку розділяються комами. Для кожного параметра вказується тип і ім'я. В оголошенні імена можна не вказувати.

Для того, щоб виконувалися оператори, записані в тілі функції, функцію необхідно викликати. При виклику вказуються: ім'я функції і фактичні параметри. Фактичні параметри замінюють формальні параметри при виконанні операторів тіла функції. Фактичні і формальні параметри повинні співпадати по кількості і типу.

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

2.1. Параметри функції

Основним способом обміну інформацією між функцією, що викликається і тією, що викликає, є механізм параметрів. Існує два способи передачі параметрів у функцію: за адресою і за значенням.

  • При передачі за значенням виконуються наступні дії:

  • обчислюються значення виразів, що стоять на місці фактичних параметрів;

  • в стеку виділяється пам'ять під формальні параметри функції;

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

void Change(int а,int b)//передача за значенням

{

int r=a;

a=b;

b=r;

}

int main()

{

int x=1,y=5;

Change(x,y);

cout<<”x=”<<x<<” y=”<<y; //виведеться: x=1 y=5

return 1;

}

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

void Change(int *a,int *b)//передача за адресою

{

int r=*a;

*a=*b;

*b=r;

}

int main()

{

int x=1,y=5;

Change(&x,&y);

cout<<”x=”<<x<<” y=”<<y; //виведеться: x=5 y=1

return 1;

}

Для передачі за адресою також можуть використовуватися посилання. Посилання – це синонім імені об'єкту, вказаного при ініціалізації посилання.

Формат оголошення посилання

тип & ім'я =ім’я_об’єкта;

Посилання не займає додаткового простору в пам'яті, воно є просто іншим ім'ям об'єкту.

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

void Change(int &a,int &b)

{

int r=a;

a=b;

b=r;

}

int main()

{

int x=1,y=5;

Change(x,y);

cout<<”x=”<<x<<” y=”<<y; //виведеться: x=5 y=1

return 1;

}

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