Функції, що не повертають значення
Функції типу void (ті, що не повертають значення), подібні до процедур Паскаля. Вони можуть розглядатися як деякий різновид команд, реалізований особливими програмними операторами. Оператор func(); виконує функцію void func() , тобто передасть керування функції, доки не виконаються усі її оператори. Коли функція поверне керування в основну програму, тобто завершить свою роботу, програма продовжить своє виконання з того місця, де розташовується наступний оператор за оператором func().
/*демонстраційна програма*/
#include
void func1(void);
void func2(void);
main()
{
func1();
func2();
return 0;
}
void func1(void)
{
/* тіло */
}
void func2(void)
{
/* тіло */
}
Звернемо увагу на те, що текст програми починається з оголошення прототипів функцій - схематичних записів, що повідомляють компілятору ім'я та форму кожної функції у програмі. Для чого використовуються прототипи? У великих програмах це правило примушує Вас планувати проекти функцій та реалізовувати їх таким чином, як вони були сплановані. Будь-яка невідповідність між прототипом (оголошенням) функції та її визначенням (заголовком) призведе до помилки компіляції. Кожна з оголошених функцій має бути визначена у програмі, тобто заповнена операторами, що її виконують. Спочатку йтиме заголовок функції, який повністю співпадає з оголошеним раніше прототипом функції, але без заключної крапки з комою. Фігурні дужки обмежують тіло функції. В середині функцій можливий виклик будь-яких інших функцій, але неможливо оголосити функцію в середині тіла іншої функції. Нагадаємо, що Паскаль дозволяє працювати із вкладеними процедурами та функціями.
Виклик функцій користувача. До функції користувача звертаються з розділу команд основної програми (функції main()) або з іншої функції. Виклик функцій можна виконати двояко: або командою виклику, або з виразів так:
<назва функції>(<список фактичних параметрів>)
Список фактичних параметрів може містити сталі, змінні, посилання, вказівники, вирази. Списки формальних і фактичних параметрів мають бути узгодженими за типами та кількістю елементів. Якщо у списку формальних параметрів є проініціалізовані змінні, то у списку фактичних параметрів ці змінні можуть бути відсутні, їм будуть надані значення за замовчуванням.
Приклад 4. Розглянемо сигнатуру з прикладу 3.
float perymetr (int k = 4, float r = 2.5);
До цієї функції можна звернутись одним із способів:
perymetr (7, 2.8); perymetr (8); perymetr ();
У першому випадку змінній k буде присвоєне значення 7, а змінній r- 2,8; у другому випадку k = 8, r — 2,5; втретьому k = 4, r = 2,5.
Зауваження. У списку фактичних параметрів не можна пропускати змінні з середини списку, тобто не можна функціюMyfunc() викликати так: Myfunc(1.65);, оскільки тут пропущено ініціалізацію першої змінної k.
Приклад програми на використання функції
Вираз |
Функція |
||||||||
a |
x |
y |
z |
|
|||||
2,11 |
1,00 |
0,93 |
1,00 |
|
|||||
|
|
|
|
|
|
#include <iostream.h>
#include <math.h>
const float a=2.11;
double p(double k)
{ double p1;
p1= sin(a*k)+cos(a*k)/(a*k);
return(p1);
}
int main()
{
double x,y,z,F;
cout << "x, y, z =" << endl;
cin >> x >> y >> z;
F=(sqrt(p(x))+pow(p(y),1.0/3))*exp(p(z));
cout << "F=" << F << endl;
system("PAUSE");
return 0;
}