You are on page 1of 7

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

Тема: Використання функцій користувача.

Мета: навчитись складати й реалізовувати алгоритми та програми мовою С++, які


використовуюсь функції, створені користувачем.

Теоретична частина

Функція — це іменована логічно завершена сукупність оголошень і операторів,


призначених для виконання певної задачі
Програма мовою С++ містить одну або декілька функцій, кожна з яких повинна бути
оголошена та визначена до її першого використання. Оголошення функції (прототип, заголовок)
задає ім'я функції, тип значення, що повертає функція (якщо воно є), а також імена та типи
аргументів, які можуть передаватися як у функцію, так і з неї. Визначення функції — це задання
способу виконання операцій.
Слід нагадати, що серед функцій програми повинна бути одна з ім'ям main (головна
функція), яка може знаходитися в будь-якому місці програми. Ця функція виконується завжди
першою і закінчується останньою.
Усі функції мають однакову структуру визначення у вигляді:

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


{ // тіло функції
опис даних;
оператори;
[return] [вираз] ;
}

Змінні, що описані у тілі функції, називаються локальними або автоматичними. Вони


існують тільки під час роботи функції, а після реалізації функції система видаляє локальні змінні і
звільняє пам'ять. Тобто між викликами функції вміст локальних змінних знищується, тому
ініціювання локальних змінних треба робити щоразу під час виклику функції.
На початку програми можна не описувати всю функцію, а записати тільки прототип. Запис
прототипу може містити тільки перелік типів формальних параметрів без імен, а наприкінці
прототипу завжди ставиться символ ";», тоді як у описі (визначенні) функції цей символ після
заголовка не присутній.
Функція завжди має бути визначена або оголошена до її виклику. При оголошенні,
визначенні та виклику тієї самої функції типи та послідовність параметрів повинні співпа-
дати. На імена параметрів обмежень на відповідність не існує, оскільки функцію можна
викликати з різними аргументами, а в прототипах імена ігноруються компілятором (вони
необхідні тільки для покращення читання програми). Тип значення, що повертає функція, та типи
параметрів спільно визначають тип функції.
У найпростішому випадку при виклику функції слід вказати її ім'я, за яким у круглих
дужках через кому - перелічити імена аргументів, що передаються. Виклик функції може здійс-
нюватися у будь-якому місці програми, де за синтаксисом дозволяється вираз того типу, що
формує функція. Якщо тип значення, що повертає функція не void, вона може входити до складу
виразів або, у поодинокому випадку, розташовуватись у правій частині оператора присвоювання.
У мові С++ визначено декілька способів передачі параметрів і повернення результату
обчислень функцій, серед них найбільш широке використання набули:
 виклик функції з передачею параметрів за допомогою формальних аргументів-значень;
 виклик функції з передачею адрес за допомогою параметрів-покажчиків;
 виклик функцій з використанням посилань, коли доступ до переданих параметрів
забезпечується за допомогою альтернативного імені (синоніма);
 виклик функцій з передачею даних за допомогою глобальних змінних;
 виклик функцій з застосуванням параметрів, що задані за замовчуванням, при цьому можна
використовувати або всі аргументи, або їх частину.
Виклик функції з передачею значень полягає у тому, що у функцію передаються не самі
аргументи, а їх копії. Ці копії можна змінювати всередині функції, і це ніяк не позначиться на
значеннях аргументів, що за межами функції залишаться без зміни, наприклад:

void fun(int р) //----------- функція fun()


{
++p;
cout << " p = " << p << endl;
}

void main() //----------- головна функція


{
int x = 10;
fun(x); //----------- виклик функції
cout << "x = " << x << endl;
}

При цьому способі для звертання до функції достатньо написати її ім'я, а в дужках —
значення або перелік фактичних аргументів. Фактичні аргументи повинні бути записані в тій же
послідовності, що і формальні, і мати відповідний тип (крім аргументів за замовчуванням і
перевантажених функцій).
Якщо формальними аргументами функції є параметри-значення і в ній не
використовуються глобальні змінні, функція може передати у викликаючу її програму лише одне
значення, що записується в операторі return. Це значення передається в місце виклику функції.
Достроковий вихід з функції можна також організувати з використанням оператора return.
В останніх версіях мови С++ з'явилася можливість передавати дані за замовчуванням. У
цьому випадку при написанні функції всім аргументам або декільком з них присвоюються
початкові значення і задовольняються такі вимоги: коли якому-небудь аргументу присвоєно
значення за замовчуванням, то всі аргументи, що розташовані за ним (тобто записані праворуч),
повинні мати значення за замовчуванням. Таким чином, список параметрів поділяється на дві
частини: параметри, що не мають значення за замовчуванням, і параметри, що мають такі
значення.
У випадку виклику функції для параметрів, що не мають значень за замовчуванням,
обов'язково повинен бути фактичний аргумент, а для параметрів, що мають значення за
замовчуванням, фактичні аргументи можна опускати, коли ці значення не треба змінювати.
Якщо деякий параметр має значення за замовчуванням та для нього відсутній фактичний
аргумент, то і для всіх наступних (тобто записаних пізніше) параметрів фактичні аргументи
повинні бути відсутні, тобто їхні значення передаються до функції за замовчуванням, наприклад:

void functl(float х, int у, int z = 80)


{
cout << "x = " << x << " у = " << у << "z = " << z << endl;
}

void funct2(float x, int у = 25, int z = 100)


{
cout << "x = " << x << "y = " << у << "z = " << z << endl;
}

void funct3(float x = 3.5, mt у = 40, int z = 200)


{
cout << "x = " << x << "y = " << у << "z = " << z << endl;
}
void main()
{
functl(5.1, 10); //за замовчуванням передається один аргумент — z
funct2(10.2); //за замовчуванням передається два аргументи — у, z
funct3(); // за замовчуванням передаються всі аргументи
}

На екрані буде виведено:


х = 5.1  у = 10 z = 80
х = 10.2 у = 25 z = 100
х = 3.5 у = 40 z = 200

З цієї ілюстраційної програми видно, що аргумент за замовчуванням — це той аргумент,


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

Масиви як параметри функцій

Аргументами (параметрами) функцій можуть бути не тільки змінні, але й масиви. У


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

void sort(int mas[30]);

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

void sort(int mas[], int n);

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

Масиви у функції можуть передаватися також за допомогою покажчиків. У цьому випадку


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

void sort(int* mas, int n);

Приклад написання програм

Приклад 1. У масивах m1(10), m2(15), m3(12) визначити мінімальний елемент та його


індекс.

#include <iostream.h>
#include <conio.h>
using namespace std;

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

//-----функція введення елементів масиву vvod()


void vvod(float mas[], int n)
{
for (int і = 0; і < n; i++)
{
cout << "Введіть" << і << " елемент ";
сіn >> mas[і];
}
cout << endl;
}
//----функція визначення мінім. елемента — fmin()
float fmin(float mas[], int n)
{
ind = 0; float min = mas[0];
for (int і = 1; і < n; i++)
if (mas[i] < min)
{
min = mas[i]; ind = i;
}
return min;
}
//--------головна функція
void main()
{
float ml[5], m2[6], m3[7];
cout << "*****Введіть масив m1\n";
vvod(ml, 5);//виклик функції vvod()— введення масива m1[]
//виклик функції fmin()
cout << "min1 = " << fmin(m1, 5);
cout << " ind = " << ind << endl;
cout << "*****Введіть масив m2\n";
vvod(m2, 6);//введення масиву m2[]
cout << "min2 = " << fmin(m2, 6) << endl;
cout << " ind = " << ind << endl;
cout << "*****Введіть масив m3\n";
vvod(m3, 7);//ввод массива т3[]
cout << "min3=" << fmin(m3, 7) << endl;
cout << "ind=" << ind << endl;
}

Приклад 2. За допомогою функції, яка знаходить мінімальний та максимальний елементи


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

#include <iostream >


const int n = 30;

//----функція визначення max та min


void minmax(int* x, int k, int* min, int& max)
/*мінімальний елемент визначено як параметр-покажчик,а максимальний — як параметр-
посилання*/
{
/* для привласнення значення за адресою min, покажчик розіменовується:*min */
*min = x[0];
max = x[0];

for (int і = 1; і < k; i++)


if (x[i] < *min)
* min = x[i];
else
if (x[i] > max) max = x[i];
}

//------головна функція
void main()
{
int a[n], i, kol, smin = 0, smax = 0, minel, maxel;
for (int k = 1; k <= 3; k++)
{
cout << "Vvedite kolicestvo elementov " << k << " massiva " << endl;
cin >> kol;

cout << "Vvedite massiv" << endl;


for (і = 0; і < kol; i++)
cin >> a[i];
minmax(a, kol, &minel, maxel);//--виклик функції minmax()

/*для збігу типу фактичних та формальних параметрів, &minel передається


як адреса, a maxel— як значення*/

smin += minel;
smax += maxel;
}
cout << "smin=" << smin << "\nsmax = " << smax;
cin >> i;
}

Порядок роботи.
1. Пройти інструктаж з техніки безпеки.
2. Включити комп’ютер.
3. Завантажити середу розробки MS Visual C++
4. Скласти та відладити програму за вказаним варіантом.
5. Зберегти результат роботи;
6. Оформити звіт з лабораторної роботи.
Варіанти завдань.
Дано 2 масиви з 20 цілих чисел. У першому записана кількість м'ячів, забитих футбольною
командою в грі, в другому – кількість пропущених м'ячів в цій же грі. Для введення результатів
ігор (заповнення масивів), визначення результатів гри (створення 3-го масиву) та виведення
результуючої таблиці на екран реалізувати відповідні функції користувача.

Варіант 1
Створити третій масив в якому зберігатиметься число очків набраних командою за кожну
гру (за виграш дається 3 очки, за нічию – 1, за програш - 0).
Результат роботи програми повинен бути представлений у вигляді:
1 гра: 2-0 | 3 очки
2 гра: 1-1 | 1 очко
...
20 гра: 0-1 | 0 очок
-----------------------------------------------
Всього набрано очків командою: 22

Варіант 2
Створити третій символьний масив в якому зберігатиметься буква-ознака закінчення матчу
(виграш – «В», нічия – «Н», поразка – «П»). Визначити кількість перемог, кількість нічиїх і
кількість поразок даної команди. Для кожної проведеної гри надрукувати словесний результат:
«виграш», «нічия» або «поразка».
Результат роботи програми повинен бути представлений у вигляді:
1 гра: 2-0 | виграш
2 гра: 1-1 | нічия
...
20 гра: 0-1 | поразка
-----------------------------------------
Загальна кількість перемог: 15
Загальна кількість нічиїх: 3
Загальна кількість поразок: 2

Варіант 3
Створити третій масив в якому зберігатиметься різниця забитих і пропущених м'ячів за гру
(забито-пропущено). Визначити в скількох іграх різниця забитих і пропущених м'ячів була
більшою або рівною 3.
Результат роботи програми повинен бути представлений у вигляді:
1 гра: 2-0 | різниця м'ячів: 2 | перемога 1-ї команди
2 гра: 1-1 | різниця м'ячів: 0| нічия
...
20 гра: 0-1 | різниця м'ячів: -1| перемога 2-ї команди
-----------------------------------------------------------------------------
Різниця забитих і пропущених м'ячів >=3 була в 5 іграх.
Додаткові завдання.

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

Контрольні питання
1. Що таке функції? В чому сенс їх використання?
2. Як оформляються функції в мові C++?
3. Чи досить додати функцію в текст програми, щоб вона «спрацювала»?
4. Що таке параметри? Навіщо вони використовуються?
5. Які змінні називаються локальними? Де вони оголошуються?
6. Як оформляються функції, мають кілька параметрів?
7. Що таке змінні параметри? Навіщо вони використовуються?
8. Як у заголовку функції відрізнити змінюваний параметр від незмінного?
9. Як по тексту програми визначити значення, яке повертає функція?
10. Які функції називаються логічними? Навіщо вони потрібні?
11. Обов'язково логічна функція повинна повертати значення типу bool?

Рекомендована література

1. https://metanit.com/cpp/tutorial/3.1.php
2. https://metanit.com/cpp/tutorial/3.2.php
3. https://metanit.com/cpp/tutorial/3.3.php
4. https://metanit.com/cpp/tutorial/3.5.php
5. https://metanit.com/cpp/tutorial/3.7.php
6. https://metanit.com/cpp/tutorial/3.8.php
7. https://metanit.com/cpp/tutorial/3.9.php
8. https://www.youtube.com/watch?v=HFH65-sNQmI
9. https://www.youtube.com/watch?v=0QvNhSN_ivs
10. https://www.youtube.com/watch?v=CkHIsx5vcDA
11. https://www.youtube.com/watch?v=a8L1nu4EByI
12. https://www.youtube.com/watch?v=Y0g3cIkCKtw

Перевірка знань

https://forms.gle/5huy4pQSzKYFFVoWA

You might also like