8.1. Загальні відомості
Функція у термінах сучасних мов програмування є те, що у ту епоху, коли електронні обчислювальні машини вже були, але ніяких мов програмування ще не було, називалося підпрограмою. Розумілося це як деякий програмний код (частина програми), записаний таким чином, щоб було можливо програмувати звернення до нього з будь-якої точки програми. У формі підпрограм реалізовувались типові елементи програм, які мали "багаторазове" призначення. Широкого розповсюдження набула практика створення бібліотек стандартних підпрограм, їх застосування суттєво скорочувало загальний розмір програм, а сам процес програмування робило більш надійним.
У сучасних мовах програмування такий засіб набув подальшого розвитку. Значно змінилася як практика створення і використання підпрограм-функцій, так і засоби обміну інформацією між ними та навколишнім програмним середовищем.
У мові С/С++ функції є основними елементами тієї частини програми, що представляє алгоритми розв’язання проблеми, покладеної на неї. Образно кажучи, функції являють собою головні будівельні блоки, з яких будується виконуваний код будь-якої програми. Будь-яка програма містить у собі не менш однієї функції. Серед всіх функцій кожної програми особливе місце займає функція з фіксованим ім'ям main (головна функція). З виконання цієї функції починається робота будь-якої програми і після завершення роботи головної функції завершується й робота програми в цілому. На відміну від інших, функція main має свої особливості побудови й роботи, які будуть розглядатися трохи нижче.
Запис визначення функції складається з двох основних елементів: заголовка функції та її тіла. Заголовок представляє інтерфейсну частину функції, крім імені функції він містить інформацію про кількість параметрів і тип кожного з них. Крім того заголовок функції містить запис про тип значення, що вона повертає. Якщо нам відоме призначення функції, то знання її заголовка досить для того, щоб її можна було використовувати для програмування.
Тіло функції заключають у фігурні дужки і, таким чином воно є блоком. Звідси виходить, що тіло функції утворює свій простір імен. Всі оголошення, записані в середині функції, так само як і оголошення її параметрів у заголовку, є локальними. У більшості випадків оголошення функції має такий формат:
тип ім'я(список параметрів)
{ тіло функції
}
Після фігурної дужки, що завершує запис тіла функції, крапка з комою не ставиться.
У зв’язку з тим, що функція є досить автономний компонент програми, важливе значення мають наявні механізми обміну інформацією між функцією та зовнішнім кодом програми. Мовою С/С++ передбачено такі засоби обміну інформацією:
- глобальні об’єкти;
- вхідні та вихідні параметри функції;
- значення, що повертається.
Глобальні об’єкти
Глобальні об’єкти є найпростіший спосіб налагодження передавання вхідної та вихідної інформації. Але при застосування глобальних об’єктів треба враховувати такі обмеження:
1) доступ із функції до глобального об’єкту неможливий, якщо його ім’я екранується локальними оголошеннями функції;
2) якщо глобальний об’єкт є константним, його не можна застосувати для передавання вихідної інформації;
3) глобальні об’єкти рекомендується застосовувати тільки для передавання такої інформації, яка має дійсно глобальний характер (наприклад, константи або інформація, яка має загальне значення для програми в цілому). Для передавання поточної інформації краще застосовувати параметри функції.
У наступному прикладі програма розраховує і виводить на екран таблицю функції y = x lg(x) з кроком табуляції 0.5. Функція func(), яка виконує обчислення, не має параметрів та повертаємого значення, обмін інформацією з зовнішнім кодом виконується через глобальні змінні X,Y.
// Приклад 1
#include <syst.h>
double X,Y; // X,Y - глобальні змінні
void func() // функція працює з глобальними об’єктами
{ Y= X*lg(X);
}
Yandex.RTB R-A-252273-3- Запоріжжя знту 2008
- Глава 1
- 1.1. Історія та сучасність
- 1.2. Загальна структура програми. Два простих приклади
- Void main()
- Void main()
- Глава 2 Об’єкти та ідентифікатори
- 2.1. Об'єкти та їхні атрибути
- 2.2. Алфавіт мови та лексеми
- 2.3. Ідентифікатори
- Void main() // (рівень 0)
- 2.4. Вправи
- Глава 3
- 3.1. Поняття виразу. Вирази Lvalue та Rvalue
- 3.2. Операції. Пріоритети та асоціативність
- Void main()
- Void main()
- Void main()
- 3.3. Вправи
- Глава 4
- 4.1. Види операторів
- 4.2. Стандартні оператори
- If (лв) опер_1; [ else опер_2; ]
- Void main()
- If (лв1) опер_1;
- Void main()
- Void main()
- Void main()
- Void main()
- Void main()
- 4.3. Оголошення змінних та ініціалізація
- Int number(125);
- Int number(125);
- 4.4. Константи і константні об'єкти
- Void main()
- 4.5. Вправи
- Глава 5
- 5.1. Типи та їхні різновиди
- 5.2. Службове слово void
- Int a[small], a[large];
- 5.4. Перетворення типів
- 5.5. Вправи
- Void main()
- Глава 6 покажчики і посилання
- 6.1. Покажчики
- Void main()
- Void strcpy(char* s1, char* s2)
- Void* pv;
- 6.2. Посилання
- 6.3 Вправи
- Void main()
- Глава 7 масиви і динамічні об'єкти
- 7.1. Масиви
- Void main()
- 7.2. Рядки символів
- Int strlen(char* s);
- Int strcmp(char* s1, char* s2);
- Int len(char *s)
- 7.3. Динамічні об'єкти й масиви
- Void main()
- Void main()
- Void main()
- Void main()
- 7.4. Вправи
- Глава 8 функції та процедури
- 8.1. Загальні відомості
- Void main()
- Void c_mul(double a_re, double a_im,
- Void swap1(long *px, long *py)
- Void swap2(long &X, long &y)
- Void main()
- Int fun(int, float*, double&);
- Void fun(int n)
- Void main()
- Void swap(int& a, int& b)
- 8.2. Функція main
- Void або int main(int n, char** p, char** q);
- Void main(int n, char** p, char** q)
- 8.3. Функції зі змінною кількістю параметрів
- Void main()
- 8.4. Покажчики на функції
- Int (*pf[3])(float X, float y);
- Void main()
- 8.5. Функції з шаблонами
- Void swap(string& s1, string& s2)
- Void main()
- Inline t abs(t X)
- Void create(type* &a, int n)
- Void del(type* &a)
- 8.6. Вправи
- Глава 9 консольне вВедення / вИведення
- 9.1. Засоби бібліотеки с
- Void main()
- Void main()
- Void main()
- 9.2. Використання потоків
- Void main()
- Void main()
- 9.3. Вправи
- Глава 10 операції з файлами
- 10.1. Види файлів і режими роботи з ними
- 10.2. Бібліотека с
- Void fprint(file* f, &X)
- Void rewind(file* f);
- Void main()
- Void main(int n, char** f)
- Void main(int n, char** fnam)
- 10.3. Застосування потоків
- Ifstream fin;
- Void open(char* filename, int mode, int access);
- Ifstream fin("a.Dat");
- Void main()
- Ifstream fa("a.Dat");
- If (fa.Eof()) break;
- Void main(int n, char** fnam)
- Void main(int n, char** f)
- Ifstream fa(f[1]);
- Void main(int n, char** fnam)
- Void main()
- Ifstream in("example.Cpp");
- Void main()
- Ifstream in("name.Dat",ios::binary);
- Void main()
- Ifstream fa("a.Dat");
- Int descr(fstr& f)
- Void main()
- Ifstream ina(infa);
- Ifstream inb(infb);
- 10.4. Вправи
- Глава 11 компіляція програми. Директиви і макроси
- 11.1. Фази компіляції
- 11.2. Директиви режиму компіляції
- 11.3. Директиви препроцесора
- 11.4. Вправи
- Глава 12 змішане програмування. Використання ассемблерного коду
- 12.1. Засоби використання асемблера
- Void main()
- 12.2. Вправи
- Глава 13 програмна реалізація алгоритмів
- 13.1. Алгоритм Евкліда пошуку найбільшого загального дільника двох цілих чисел
- 13.2. Обчислення факторіала
- 13.3. Пошук простих чисел. Решето Ератосфена
- Void main()
- 13.4. Генерація підмножин
- Void main()
- 13.5. Сортування масивів
- Void main()
- Void main()
- Int flag;
- 13.6. Пошук у масиві
- Void main()
- Void main()
- 13.7. Операції з матрицями
- Void ObrMatr (double** a, double** b, unsigned n )
- Void Minv(double** a, double** b, unsigned n )
- Void Gauss(double** a, double* b, double* X, unsigned n)
- 13.8. Лінійна інтерполяція даних
- 13.9. Лінійна апроксимація
- Void linappr(int n, double* X, double* y, double& a0, double& a1)
- 13.10. Розв’язування нелінійних рівнянь
- Void Bisec(funx f, double a, double b, double eps, double& X)
- Void Bisec(funx f, double a, double b,
- Void main()
- 13.11. Пошук заданої послідовності символів у файлі
- Void push(char* s, int n, char X)
- Void main()
- 13.12. Вправи
- Глава 14 створення й використання бібліотечних модулів. Модуль syst.H
- 14.1. Створення бібліотечних модулів
- 14.2. Модуль syst.H
- 14.3. Системні функції та макрооперації
- Void runtimer();
- Void main()
- Void runstimer();
- Void main()
- Void swp(Type& a, Type& b);
- Void main()
- Int cmp(int nx, int ny, Type* X, Type* y);
- Void errhalt(bool ex, char* mes);
- Void errhalt(bool ex, char* mes, file* f);
- 14.4. Операції введення/виведення
- Void flushkey();
- Void main()
- Int getyes();
- Void main()
- Void main()
- Int weight(type X);
- Void main()
- Int hamdist(Type a, Type b)
- 14.6. Спеціальні класи. Клас Spline для інтерполяції даних сплайнами
- Void main()
- 14.7. Вправи
- Глава 15 графІчне виведення. Модуль rgraph.H
- 15.1. Модуль rgraph.H. Загальні відомості
- 15.2. Глобальні змінні й константи
- 15.3. Класи й покажчики на функції
- 15.4. Функції й процедури класів
- Void main()
- Void main()
- Void main()
- Void main()
- 15.7. Вправи
- Глава 16 Життєвий цикл програмного продукту. Питання стилю запису програм
- 16.1. Життєвий цикл програми
- Int n, alfa, col;
- Void draw();
- Void rotate(int delta);
- 16.3. Вправи
- Література