Лекция: Unsigned int C(unsigned int n, unsigned int m)

{

if (m > n / 2)

m = n — m;

if (m == 0)

Return 1;

Else

return C(n, m — 1) * (n — m + 1) / m ;

}

 

Этот вариант функции позволяет точно вычислять значения биномиальных коэффициентов при n < 31. Диапазон решения расширен почти в два раза.

Передача функций в качестве параметров

Имя любой функции представляет собой указатель, то есть адрес памяти, определяющий, где находится функция, и задающий точку входа в функцию. Убедиться в этом можно выведя на экран значение имени функции. Например:

 

cout << C << endl; // C –это функция из предыдущего параграфа

 

На экране будет отображен в шестнадцатеричном формате адрес точки входа в функцию С, вычисляющую значения биномиальных коэффициентов.

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

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

Рассмотрим пример:

 

Double add (double a, double b)

{

return a + b;

}

Double mul (double a, double b)

{

return a * b;

}

typedef double (*f_Ptr) (double, double);

Double oper (f_Ptr F, double a, double b)

{

Return F (a, b);

}

еще рефераты
Еще работы по информатике