Содержание
- 2. Понятие о подпрограммах При решении задач довольно часто встречается ситуация, когда приходится многократно повторять одни и
- 3. Определение подпрограммы Подпрограмма – это именованная группа операторов, оформленная специальным образом, которая может вызываться по имени.
- 4. Процедуры и функции Различают два вида подпрограмм: процедуры; функции. Функции в момент выхода возвращают значение определённого
- 5. Функции в C++ В языке C++ нет понятия процедур, есть только функции. Однако, если функция возвращает
- 6. Формальные и фактические параметры Формальные параметры, описанные в заголовке функции, играют роль дополнительных локальных переменных. Значения
- 7. Пример определения и вызова функции Задача: написать функцию, возвращающую максимальное из трёх чисел. Числа передаются в
- 8. Выход из функции Выход из функции может быть выполнен двумя способами: выполнением специального оператора return [выражение]
- 9. Способы передачи параметров Различают две реализации передачи параметров в функцию: по значению; по адресу При передаче
- 10. Схема организации передачи параметров Головная программа Вызываемая функция Параметр Головная программа Вызываемая функция Параметр Передача параметров
- 11. Схема организации передачи параметров (продолжение) Передача выходных параметров (не поддерживается в C++) Передача константных параметров по
- 12. Особенности передачи параметров в C и C++ В языках C и C++ параметры передаются только по
- 13. Пример неправильной работы с параметрами Задача: написать функцию, меняющую местами значения своих параметров. void Swap (int
- 14. Решение проблемы модификации параметров в C Если нам необходимо изменить значение переданных в функцию данных, в
- 15. Ссылочные типы C++ Ссылочный тип появился в языке C++ и используется главным образом при работе с
- 16. Примеры работы со ссылочным типом int c = 100; int &p = c; // p и
- 17. Использование ссылочного типа для передачи параметров Ссылочный тип может использоваться как в описании формальных параметров, так
- 18. Пример использования ссылки в качестве параметра Задача: написать функцию, меняющую местами значения своих параметров. void Swap
- 19. Пример использования ссылки при выходе int& my_inc(int &z) { z++; return z; } … int a
- 20. Константные ссылки Если требуется запретить изменение параметров во время выполнения функции и выдавать соответствующие сообщения на
- 21. Пример константной ссылки void my_func(const long double &z) { cout return; } void my_func(const long double
- 22. Побочный эффект подпрограмм Подпрограммы имеют полный доступ к глобальным переменным, включая возможность их изменения. Изменение программных
- 23. Использование побочного эффекта void ReadData() { … // чтение данных и инициализация глобальных переменных } Теперь
- 24. Рекурсия Под рекурсией понимается вызов подпрограммы из тела этой же подпрограммы. Подобные соотношения достаточно часто встречаются
- 25. Примеры рекурсивных подпрограмм int Fact(int n) { if (n == 0) return 1; else return n
- 26. Примеры рекурсивных подпрограмм (продолжение) Задача: ввести последовательность чисел, оканчивающуюся нулем и вывести их в обратном порядке.
- 27. Формы рекурсивных подпрограмм Выполнение каких-то действий до рекурсивного вызова ( на рекурсивном спуске) Выполнение каких-то действий
- 28. Глубина и текущий уровень рекурсии Максимальное число рекурсивных вызовов функции без возвратов, которое происходит во время
- 29. Зацикливание рекурсивных функций Рекурсивный вызов должен быть внутри какого-то условия, которое обязательно должно быть ложным! Зацикливание
- 30. Пример зацикливающейся рекурсивной функции void Pech(){ cout } После компиляции выдаётся сообщение warning C4717: 'Pech' :
- 31. Задача о ханойских башнях Даны три стержня A, B, C. На стержне A находятся n дисков
- 32. Алгоритм решения задачи о ханойских башнях Если n=1 то 1. Переместить этот единственный диск с A
- 33. Неэффективность рекурсии Если рекурсивная программа содержит несколько рекурсивных вызовов с разной глубиной, то она будет работать
- 34. Неэффективность рекурсии (продолжение) Первый вариант программы int sochet1(int n, int k) { int i, t, s;
- 35. Неэффективность рекурсии (продолжение) Второй вариант программы int sochet2(int n, int k) { if ((k==0)||(k==n)) return 1;
- 36. Результаты вычислений для n=30, k=20
- 37. Перегрузка функций Часто удобно для функций, выполняющих один и тот же алгоритм для данных разных типов,
- 38. Пример перегрузки функций int Min(int a, int b ) { return a } Эта функция неприменима
- 39. Пример перегрузки функций (продолжение) Для отдельных типов реализация перегруженной функции может быть совершенно другой: const char*
- 40. Пример перегрузки функций (окончание) Если компилятор не может подобрать подходящую функцию, выдаётся ошибка компиляции: int a
- 41. Указатели на функции Указатели на функции хранят адреса точек входа в функции. Операция разыменования, применённая к
- 42. Пример использования указателей на функции int max(int a, int b) { return (a>b ? a :
- 43. Callback - функции Указатели на функции могут быть переданы в качестве параметров в другие функции, что
- 44. Пример использования callback-функций int max(int a, int b) { return (a>b ? a : b); }
- 45. Функция main Функция main – та функция, с запуска которой начинает работу консольное приложение, написанное на
- 46. Выход из функции main Если в функции main отсутствует оператор return, то перед выходом из неё
- 47. Передача параметров в функцию main Наличие параметров позволяет передать в запускаемую программу данные командной строки: пользователь
- 49. Скачать презентацию