Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Spisok_voprosov (1).docx
Скачиваний:
6
Добавлен:
22.09.2019
Размер:
3.9 Mб
Скачать
  1. Создание пользовательских библиотек.

Использование функций является одним из применений принципа модульности, но будет удобнее, если тематически связанные функции будут объеденены в модули или библиотеки функций. Стандартные функции с++ входят в стандартные библиотеки функций. Каждая такая библиотека соответствует определенной тематике.

Библиотека функций состоит как правило из 2х файлов

-заголовочный файл(*h,*hpp)

-файл реализации(*с,*сpp)

  1. Способы передачи параметров в функции.

2 способа:

1)по значению

2)по ссылке

Пример по значению

Оператор х=10 никак не изменяет значение переменной а из функции main, поскольку х-копия а. это передача по значению.

Пример по ссылке

При передаче параметров по ссылке программист сам определяет сколько таких параметров для каждой функции должно быть. Каждый такой параметр может передать значение в ыункцию и может возвратить значение из функции. Т.О. переменные переданные с помощью ссылок могут быть входными и выходными данными одновременно.

  1. Способы передачи значения из одной функции в другую.

3 способа:

1)return

2)ссылки

2)глобальные переменные

Других способов передачи данных между функциями нет, либо они являются модификацией указанных.

Пример

  1. Рекурсия (понятие, правила написания рекурсивных подпрограмм, прямая и обратная и косвенная рекурсии).

Рекурсия

Рекурсия — это такой способ организации вспомогательного алгоритма (подпрограммы), при котором эта подпрограмма (процедура или функция) в ходе выполнения ее операторов обращается сама к себе. Вообще, рекурсивным называется любой объект, который частично определяется через себя.

Например, приведенное ниже определение двоичного кода является рекурсивным:

<двоичный код> ::= <двоичная цифра> | <двоичный код><двоичная цифра>

<двоичная цифра> ::= 0 | 1

Здесь для описания понятия были использованы, так называемые, металингвистический формулы Бэкуса-Наура (язык БНФ); знак "::=" обозначает "по определению есть", знак "|" — "или".

Вообще, в рекурсивном определении должно присутствовать ограничение, граничное условие, при выходе на которое дальнейшая инициация рекурсивных обращений прекращается.

Приведём другие примеры рекурсивных определений.

Пример 1. Классический пример, без которого не обходятся ни в одном рассказе о рекурсии, — определение факториала. С одной стороны, факториал определяется так: n!=1*2*3*...*n. С другой стороны,

Граничным условием в данном случае является n<=1.

Пример 2. Определим функцию K(n), которая возвращает количество цифр в заданном натуральном числе n:

Задание. По аналогии определите функцию S(n), вычисляющую сумму цифр заданного натурального числа.

Пример 3. Функция C(m, n), где 0 <= m <= n, для вычисления биномиального коэффициента по следующей формуле является рекурсивной.

Ниже будут приведены программные реализации всех этих (и не только) примеров.

Обращение к рекурсивной подпрограмме ничем не отличается от вызова любой другой подпрограммы. При этом при каждом новом рекурсивном обращении в памяти создаётся новая копия подпрограммы со всеми локальными переменными. Такие копии будут порождаться до выхода на граничное условие. Очевидно, в случае отсутствия граничного условия, неограниченный рост числа таких копий приведёт к аварийному завершению программы за счёт переполнения стека.

Порождение все новых копий рекурсивной подпрограммы до выхода на граничное условие называется рекурсивным спуском. Максимальное количество копий рекурсивной подпрограммы, которое одновременно может находиться в памяти компьютера, называется глубиной рекурсии. Завершение работы рекурсивных подпрограмм, вплоть до самой первой, инициировавшей рекурсивные вызовы, называется рекурсивным подъёмом.

Выполнение действий в рекурсивной подпрограмме может быть организовано одним из вариантов:

{ { {

P; операторы; операторы;

операторы; P; P;

} } операторы;

}

рекурсивный подъём рекурсивный спуск и рекурсивный спуск,

и рекурсивный подъём

Здесь P — рекурсивная подпрограмма. Как видно из рисунка, действия могут выполняться либо на одном из этапов рекурсивного обращения, либо на обоих сразу. Способ организации действий диктуется логикой разрабатываемого алгоритма.

Реализуем приведённые выше рекурсивные определения в виде функций.

Пример 1.

double Factorial(int N)

{

double F;

if (N<=1) F=1.; else F=Factorial(N-1)*N;

return F;

}

Пример 2.

int K(int N)

{

int Kol;

if (N<10) Kol=1; else Kol=K(N/10)+1;

return Kol;

}

Пример 3.

int C(int m, int n)

{

int f;

if (m==0||m==n) f=1; else f=C(m, n-1)+C(m-1, n-1);

return f;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]