ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Використання функції як параметра значень

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

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

 

Приклад 5.4Скласти програму c використанням функціїобчислення інтегралів методом трапецій (точність обчислення е =10-3 ).

 

// P5_4.CPP – обчислення інтеграла методом трапеції

//використання функції як параметра значення

#include <iostream .h>

#include <math.h>

const float e =1 e-3;

float fn1 (float x ) //підінтегральна функція 1-го інтеграла

{

return sgrt (1 +log (x));

}

float fn2 ( float x ) //підінтегральна функція 2-го інтеграла

{

return log (1 +pow (x,2)) / (1+pow (x,2));

}

float ft (int n, float a ,float b , float fun( float )) //функція методу трапецій

{

int i;

float s1 ,h, s=0;

do

{ s1 =s;

h = (b -a ) /n;

s = ( fun (a) +fun (b) ) / 2;

for ( i = 1; i <= n-1; i++)

s += fun ( a + i *h );

s *= h; n *= 2;

} while ( fabs ( s-s1 ) > e );

return s; }

Int main ( )

{

float y;

y = ft ( 20 , 2 , 2, 3.0, fn1 ) +ft ( 20, 0, 1.0, fn2 );

cout << "y=" << y << endl;

return 0;

}

Результат виконання програми :

y = 1.29012

Звертання до функції і передача результату

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

double sgr (double);

Main( )

{

cout << "Квадрат числа=" << sgr ( 10 ) << endl;

}

Double sqr (double p)

//Повернення за значенням

{

return p*p;

}

У результаті буде виведено:

Квадрат числа = 100.

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

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

Приклад 5.5 Обчислити функцію загального вигляду для заданого значення аргументу xз використанням функції, у яку коефіцієнти a, bі cможуть бути введені за замовчуванням.

// P5_5.CPP ¾ обчислення квадратної функції

//коефіцієнти квадратної залежності можуть

// вводитися у функцію"за замовчуванням"

#include < іоstrеаm.h >

float ur ( float x, float а=0., floatb b =0.,float c=0.);

Int main ( )

{

float а =1., b = 2., c = 3., x = 0.5, y;

cout << " Уведені всі аргументи " << endl;

y = ur ( x, a, b, c);

cout << " y = "<< y << endl;

cout << " Введені аргументи x, a, b " << endl;

y =ur ( x, a, b);

cout << " y = "<< y << endl;

cout << " Введений аргумент x " << endl;

y =ur ( x );

cout << " y = "<< y << endl;

}

// Функція обчислення квадратної функції

float ur ( float x, float a, float b, float c );

{

return a * x * x + b * x + c;

}

Результати виконання програми:

Уведено всі аргументи

y = 4.25

Уведені x, a і b

y = 1.25

Введено аргумент x

y = 0

Перевантаження функцій

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

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

Приклад 5.6. Зробити програмну реалізацію з використанням перевантаження функцій.

 

#include <iostream .h>

#include <string.h>

int funp (int x) //1.

{ return x*x; }

int funp (unsigned x) //2.

{ return -x*x; }

char funp (char x) //3.

{ return x+3; }

int funp (int x, char *y) //4.

{ return x*strlen ( y); }

int funp (int x , char y) //5.

{ return x*y; }

float funp (float r) //6.0

{ return r*r; }

Float funp (double r) // 7.

{ return r+r; }

Int main ( )

{

cout << funp(5) << endl ;// Буде 25

cout << funp ((unsigned)10) << endl ;// Буде 100

cout << funp ( 'а') << endl ; // Буде d

cout << funp (4,"abc") << endl ; // Буде 12

cout << funp ( 4 , 'а') << endl ; // Буде 388

cout << funp( 1.2)<< endl ; // Буде 1.44

cout << funp( (double) 4.5) << endl ;// Буде 9

return 0;

}

 

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

 

 

5.3 Контрольні питання

1. Що таке функція і яка її структура?

2. Що означає передача параметрів у функцію за значенням, за посиланням і за покажчиком?

3. Що таке локальні і глобальні змінні?

4. Як використовувати покажчики на функцію?

5. Які способи передачі і повернення результату обчислень функції?

6. Як використовувати одновимірні масиви як параметри функції?

7. Які особливості використання багатовимірних масивів як аргументи функції?

8. Чи можна обробляти у функції масиви змінної довжини?

9. Чи може функція передавати кілька результатів у місце виклику?

10. Що таке перевантаження функцій?

 

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти