- •Загальні положення ...………………………………………………………….........3
- •Загальні положення
- •1 Організація введення і виведення даних та розв’язання задач з простою змінною
- •1.1 Мета роботи
- •1.2 Вказівки до організації самостійної роботи студентів
- •1.2.1 Використання операторів введення
- •#Define sp " "
- •Int main ( )
- •Int main ( )
- •Int main ( )
- •Void main ( )
- •For ( [ вир1 ]; [ вир2] ;[ вир3 ] ) оператор;,
- •Void main ( )
- •Void main ( )
- •1.5 Контрольні питання
- •1.6 Варіанти індивідуальних завдань
- •2 Розв’язання задач c використанням одновимірних і двовимірних масивів
- •2.1 Ціль роботи Прищепити студентам навички розв’язання задач з використанням одновимірних і двовимірних масивів, складних циклів і використання покажчиків.
- •2.2 Методичні рекомендації з організації самостійної роботи студентів
- •Void main( )
- •Void main ( )
- •Void main ( )
- •Void main ( )
- •2.3 Використання покажчиків
- •Наиведемо програму з використанням покажчиків:
- •Int main ( )
- •Void main ( void )
- •2.4 Використання масивів і покажчиків
- •Приклад 2.4 Обчислити середнє значення додатних елементів одновимірного масиву.
- •Int *pmas;
- •2.5 Масиви покажчиків
- •Void main( )
- •2.6 Контрольні питання
- •2.7. Варіанти індивідуальних завдань
- •3 Вирішування задач з використанням даних символьного типу
- •3.1 Ціль роботи Вивчення засобів опису символьних типів даних і використання структур для обробки даних.
- •3.2 Методичні рекомендації з організації самостійної
- •Роботи студентів
- •3.2.1 Організація символьного введення - виведення
- •Device . Get (char_var);
- •3.2.2 Рядки як символьні масиви
- •3.2.3 Введення-виведення символьних масивів
- •Void main (void)
- •3.2.4 Основні функції обробки символьних типів
- •Void main (void)
- •Void del (char *st, int k, int n);
- •Void del(char *st, int, int);
- •Void main()
- •Void del(char *st,int k,int n)
- •[ Проміжки ] [знак числа] [ цифри].
- •Void main( )
- •Void main()
- •Void main()
- •Void main(void)
- •3.2 Контрольні питання і завдання
- •3.4 Варіанти індивідуальних завдань
- •4 Вирішувння задач з використанням даних типу структура
- •4.1 Ціль роботи Освоєння заходів розробки і налагодження програм з використанням
- •4.2 Методичні рекомендації з організації самостійної
- •Void main(void)
- •Void qsort (void *base , n , width,
- •Int (*fcmp) ( const void *elem1, const void *elem2) .
- •4.3 Контрольні питання
- •4.4. Індивідуальні завдання
- •5 Використання функцій при розробці програм
- •5.1 Ціль роботи
- •5.2 Методичні вказівки з організації самостійної роботи студентів
- •Void fun ( int p)
- •Void main ( )
- •Int main ( )
- •5.2.1 Використання покажчиків на функцію
- •Void main ( )
- •5.2.2 Використання масивів - параметрів функцій
- •Vоid sort (int mas [ 30 ]); .
- •Void sort ( int mas [ ], int n ) ; .
- •Void fun1 (char st [15]);
- •Int main ( )
- •Void fun1 ( char st[15] )
- •Void fun2 ( int mat [ ] [10], int rows, int cols );
- •Int main ( )
- •5.2.4 Звертання до функції і передача результату
- •Int main ( )
- •5.2.5 Перевантаження функцій
- •Int main ( )
- •5.3 Контрольні питання
- •5.4 Варіанти індивідуальних завдань
- •6 Робота з файлами
- •6.1 Ціль роботи
- •6.2 Методичні вказівки по організації самостійної роботи
- •Int main ( )
- •Int main ( )
- •Void main ( )
- •Ifstream in ( ”file1") ;
- •In.Close();
- •Перелік посілань
- •Навчальне видання
- •61726 Харків, просп. Леніна, 14.
5.2.1 Використання покажчиків на функцію
Синтаксис мови С++ дозволяє використовувати покажчик на функцію. Ім'я будь-якої константи це покажчик – константа, дорівнює адресі початку входу у функцію, тобто адресі її першої машинної команди. Крім констант можна також описувати покажчики - змінні на функцію у вигляді:
type (*name) (список аргументів); ,
де type тип значення, що повертається функцією, ;
name ім'я змінної - покажчика на функцію.
Покажчики на функцію використовуються в наступних основних випадках :
при використанні їх як формальні аргументи в інших функціях;
для непрямого виклику інших (резидентних) функцій (програм), початок входу в який записується у відоме місце ОП.
Приклад 5.1 Обчислення суми і різниці двох чисел програмно реалізувати з використанням покажчика на функцію для доступу до інших функцій
//P5_1.CPP – використання покажчика на функцію для доступу
// до інших функцій difference( ) і sum( ).
#include < iostream >
using namespace std;
int difference ( int, int ); // Прототип функції
int sum ( int, int );
Void main ( )
{
int (*fun) (int, int );
int x = 20, y = 5, z ;
fun = difference ; // Присвоювання адреси одного покажчика - іншому
z = fun (x, y);
cout << "z = " << z << еndl;
fun = sum; // Присвоювання нової адреси покажчика
z = fun (x , y );
cout << "z = " << z << endl;
}
int difference (int a , int b) // Опис функції
{ return (a - b);
}
int sum ( int a, int b )
{ return (a + b);}
Як і звичайні змінні, покажчики на функції можна об'єднати в масиви, наприклад, якщо описати функції, тобто їхні прототипи у вигляді:
int god ( const void*, const void * ) ;
int chena ( const void*, const void *) ;
int nazv ( const void*, const void * ) ;
int avtor ( const void*, const void * ) ; ,
то можна описати функцію
int (*fcmp[4]) () {god, chena, nazv, avtor} ; .
У результаті вийшов масив функцій, доступ до елементів цього масиву звичайний, наприклад:
int i =0;
fcmp [i] ( pt1,pt2 ); // це виклик функції god ( pt1, pt2);
Варто звернути увагу, що замінивши індекс, можна викликати іншу функцію і т.д.
Крім повернення результату виконання функцій у вигляді даних за значенням, можливе також повернення за допомогою операцій разіменування "*" чи одержання адреси "&".
Операція разіменування "*" означає, що функція повертає адресу на об'єкт. Функції в такому випадку з'являються як покажчики на функцію, тобто в наступному вигляді:
type * fname (список формальних аргументів) .
Описані в такий спосіб функції повинні повертати покажчик на тип (адреса), наприклад:
сhar* dayweek (int data)
{
static char *weekday[ ] = {"Sunday", "Monday", "Tuesday",
"Weduesday", "Thursday", "Friday", "Saturday"}
return weekday [data % 7];
}
Тут функція dayweek одержує значення data, тобто число днів, що пройм
ли з якоїсь визначеної дати, і повертає день тижня у вигляді покажчика на char* оскільки weekday це масив покажчиків на char , що належить типу char*.
Під час оголошення функції як покажчика на функцію результат можна передавати шляхом одержання адреси, що позначається "&". Така функція буде мати наступну структуру:
type *funame (список формальних аргументів)
{
static type x;
// далі виникає тіло функції
return &x;
}
Оскільки значенням покажчика є адреса, то функція може повернути адресу об'єкта того ж типу, що і тип покажчика, що повертається. Якщо необхідно повернути результат функції за посиланням, то переважніше використовувати операцію одержання адреси "&", і функцію описувати у вигляді :
type& funame (список формальних аргументів) .