|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Щоб створити вбудовану функцію, потрібно до її оголошення додати ключове слово inlineВбудовані функції. Приклад використання #include<iostream.h> inline float dob(int a); int main() int n=10; float D=1; for (int k=1; k<=n; k++) D*=dob(k); cout<<“D= “<<D; getch ();return 0; } //------------------------------------- Float dob(int a) { float d; d=(5*a+2)/(a-15); return d; } Результат виконання 28380.5 Покажчик на функцію Кожна функція характеризується типом значення, що повертається, ім'ям і списком типів її параметрів. Якщо ім'я функції використовувати без подальших дужок і параметрів, то воно виступатиме як покажчик на цю функцію, і його значенням буде адреса розміщення функції в пам'яті. Це значення можна буде присвоїти іншому покажчику. Тоді цей новий покажчик можна буде використовувати для виклику функції. Покажчик на функцію визначається таким чином: тип_функції(*ім’я_вказівника)(специфікація параметрів) У визначенні покажчика кількість і тип параметрів повинні співпадати з відповідними типами у визначенні функції, на яку ставиться покажчик. Виклик функції за допомогою покажчика має вигляд: (*ім’я_вказівника)(список фактичних параметрів);
#include <iostream> using namespace std; int f1(char* S) { cout<<S<<"\n"; return 1; }
void main() { char s[20]="\nfunction1"; int(*ptr1)(char*); //покажчик на функцію ptr1=f1; //покажчику надається адреса функції f1 cout<<((*ptr1)(s)); //виклик функції f1 за допомогою покажчика } Покажчики на функції зручно використовувати в тих випадках, коли функцію треба передати в іншу функцію як параметр.
#include <iostream> #include <math.h> using namespace std; typedef float(*fptr)(float);//тип-вказівник на функцію-рівняння
/*розв’язок рівняння методом половинного ділення, рівняння передається за допомогою покажчика на функцію */ float root(fptr f, float а, float b, float e) { float x; do { x=(a+b)/2; //знаходимо середину відрізка if ((*f)(а)*f(x)<0) //вибираємо відрізок b=x; else a=x; } while((*f)(x)>e && fabs(а-b) >e); return x; }
//функція, для якої шукаємо корінь float testf(float x) { return x*x-1; }
void main() { /*у функцію root передається покажчик на функцію, координати відрізка і точність */ float res=root(testf,0,2,0.0001); cout<<”\nX=”<<res; }
Передача масивів у функції Одномірні масиви
Масиви можуть бути параметрами функцій, і функції як результат можуть повертати вказівник на масив. Розглянемо ці можливості. При використанні масивів як параметрів функції виникає необхідність визначення в тілі функції кількості елементів масиву, що є аргументом при звертанні до функції. При роботі з рядками— масивами типу char[], проблема розв'язується просто, оскільки останній елемент рядка має значення '\0'. Тому при обробці масиву-аргументу кожен його елемент аналізується на наявність символу кінця рядка. Приклад 1. Рядок як параметр функції. Потрібно скласти програму, що містить функцію, яка підраховує кількість елементів у рядку. Можливий варіант програми має вид: //Масиви у функціях #include <iostream.h>; int dl(char[]);//прототип функції dl void main() { char p[]="кафедра"; cout << "\n Довжина рядка дорівнює:" << dl(p); } int dl(char c[]) { int i; for(i=0;;i++) if (c[i]=='\0') break; return i; } У результаті виконання програми на екран буде видане повідомлення: Довжина рядка дорівнює: 7. Якщо масив-параметр функції не є символьним рядком, то необхідно або використовувати масиви з заздалегідь відомим числом елементів, або передавати розмір масиву за допомогою додаткового параметра. Наступні два приклади ілюструють ці можливості. Приклад 2. Одномірний масив як параметр функції. Нехай потрібно скласти програму, у якій функція обчислює суму елементів масиву, що складає з 5 елементів. Можливий варіант програми має вид: // Одномірний масив як параметр #include <iostream.h> int sum(float x[5]) { float s=0; for(int i=0;i<5;i++) s=s+x[i]; return s; } void main() { float z[5], y; for(int i=0;i<5;i++) { cout<<"\n Введіть черговий елемент масиву:"; cin >> z[i]; } y=sum(z); cout<<"\n Сума елементів масиву:”<< y; } У результаті виконання програми на екран буде виведене значення суми елементів масиву z. У приведеному прикладі заздалегідь відоме число елементів — 5, тому у функції всього один параметр — масив x. Оскільки у функції існує значення, що повертається, то виклик функції може бути тільки виразом чи частиною виразу. У програмі оператор присвоювання y=sum(z); містить такий вираз у правій частині. Тут аргументом функції є масив z. Приклад 3. Одномірний масив з довільною кількістю елементів як параметр функції. Нехай потрібно скласти програму зі звертанням до функції, яка повертає максимальний елемент одномірного масиву з довільною кількістю елементів. // Пошук максимального елемента #include <iostream.h> float max(int n,float a[]) { float m=a[0]; for(int i=1;i<n;i++) if (m<a[i]) m=a[i]; return m; } void main() { float z[6]; for(int i=0;i<6;i++) { cout<<"\n Введіть черговий елемент масиву:"; cin >> z[i]; } cout <<"\n Максимальний елемент масиву:"<< max(6,z); } У результаті виконання програми на екран монітора буде видане повідомлення зі значенням максимального елемента масиву z, який у даному прикладі складається із шести елементів. Ім'я масиву являє собою константний вказівник на адресу нульового елемента масиву. Тому у будь-якого масиві, використовуваного як параметр функції, можна здійснювати зміну його елементів при виконанні тіла функції. Приклад 4. Масиви з довільною кількістю елементів як параметри функції. Нехай потрібно скласти програму з функцією, що формує як результат масив, кожен елемент якого є максимальним з відповідних значень елементів двох інших масивів-параметрів. Можливий варіант програми має вид: //Вказівники на масив як параметри #include <iostream.h>; void maxl(int,int*,int*,int*); // прототип функції void main() { int a[] = {0,1,2,3,4}; int b[]={5,6,0,7,1}; int d[5]; maxl(5,a,b,d); cout << "\n"; for (int i=0;i<5;i++) cout << "\t" << d[i]; } void maxl(int n,int *x,int *y,int *z) { for (int i=0;i<n;i++) z[i]=x[i]>y[i]? x[i]:y[i]; } У результаті виконання програми на екран монітора будуть видані елементи результуючого масиву d: 5 6 2 7 4.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.008 сек.) |