МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів Контакти
Тлумачний словник |
|
|||||||
Використання функції як параметра значень
Іноді доводиться як формальні аргументи (параметрів) функції використати інші функції. Така ситуація виникає, якщо в деякій функції при звертанні до неї, треба викликати іншу функцію. Параметр - функція записується у вигляді прототипу, тобто вказується тип функції, її ім'я й у дужках перелік типів формальних аргументів, або типів і імен формальних аргументів. Приклад Скласти програму 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; } У заголовку функції завжди вказується тип її імені, а в самій підпрограмі цьому імені повинне бути привласнене значення, що повертається в головну програму замість звертання до функції.
Читайте також:
|
||||||||
|