Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



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

 

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

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

Приклад Скласти програму c використанням функції обчислення інтегралів метoдом трапецій (точність обчислення е =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; }

main ( )

{

float y;

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

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

}

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

y = 1.29012

 

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

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

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

 

double sgr (double);

main( )

{

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

}

double sqr (double p)

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

{

return p*p;

}

 

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

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

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

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

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

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

виклик функції з передачею параметрів за допомогою формальних аргументів - значень;

виклик функції з передачею адрес за допомогою параметрів - покажчиків;

виклик функцій з використанням посилань, коли доступ до переданих параметрів забезпечується за допомогою альтернативного імені (синоніма);

виклик функцій з передачею даних за допомогою глобальних змінних, наприклад:

#include < iostream.h >

int a, b, c;

sum ( )

main ( )

{

cin >> a >> b;

sum ();

cout << c << endl;

}

sum( )

{ c = a + b ; }

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

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

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

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

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

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

#include < iostreа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

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

Список формальних аргументів називають сигнатурою функції.

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

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

#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.

{ return r*r; }

float funp (double r) // 7.

{ return r+r; }

 

main ( )

{

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

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

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

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

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

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

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

return 0;

}

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

 


Читайте також:

  1. А. Розрахунки з використанням дистанційного банкінгу.
  2. Адвокатура в Україні: основні завдання і функції
  3. Алгоритм знаходження ДДНФ (ДКНФ) для даної булевої функції
  4. Але відмінні від значення функції в точці або значення не існує, то точка називається точкою усувного розриву функції .
  5. Альтернативна вартість та її використання у проектному аналізі
  6. Аналіз використання капіталу.
  7. Аналіз використання матеріальних ресурсів
  8. Аналіз використання матеріальних ресурсів.
  9. Аналіз використання обладнання.
  10. Аналіз використання прибутку та резервів його зростання
  11. Аналіз використання робочого часу на підприємстві
  12. Аналіз використання фонду робочого часу.




Переглядів: 1194

<== попередня сторінка | наступна сторінка ==>
Лекція № 9 | Лекція 10

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.006 сек.