Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3_Функции.doc
Скачиваний:
5
Добавлен:
10.02.2015
Размер:
235.52 Кб
Скачать

Void func(void){ }

формально является примером функции. Только эта функция не выполняет никаких полезных действий. В качестве другого примера рассмотрим определение функции Max() для нахождения наибольшего из двух объектов типа double.

Пример 3.1. Вычисление максимального значения

double Max(double x1, double x2){

return (x1<x2)?x2:x1;

}

В качестве более сложного примера рассмотрим определение функции для вычисления квадратного корня из заданного числа x. Оказывается, что за конечное число арифметических операций можно вычислить значения только двух математических функций. Одна из них является многочленом с рациональными коэффициентами, а другая – дробью вида , называемой дробно-рациональной функцией. Отметим, что аргумент этих функций также должен быть рациональным числом. Значения других математических функций (например, sin(x), exp(x), ) за конечное число операций можно вычислить толь­ко с некоторой погрешностью .

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

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

Применим изложенный подход к вычислению функции , то есть квадратного корня из . Для этого можно воспользоваться числовой последовательностью , определяемой по формуле, которая носит имя древнегреческого механика и математика Герона Александрийского, жившего в первом веке н.э.:

.

Доказано, что она сходится к неизвестному , и что погрешность -ого приближения удовлетворяет неравенству

.

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

.

Поэтому принимается в качестве приближенного значения .

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

Пример 3.2. Функция вычисления квадратного корня

double MySqrt(double x, double Eps){

// Определение переменных

double xPre, xCur, Delta;

// Выбор начального приближения

xPre=x>1?0.3*x:2*x;

// Цикл

do{

// Вычисление очередного приближения

xCur=(xPre+x/xPre)*0.5;

// Оценка погрешности

Delta=xPre>xCur?xPre-xCur : xCur-xPre;

// Подготовка к повторению цикла

xPre=xCur;

}

// Принятие решения о повторении цикла

while(Delta>Eps);

return xCur;

}

Несмотря на большое число операций, присутствующих в языке Си, в нем отсутствуют операции ввода и вывода, вычисления элементарных математических функций и некоторые другие, в которых часто нуждаются программисты. Вместо них каждый программист может воспользоваться заранее написанными для этих целей функциями. Они хранятся на диске и называются стандартными. Например, для ввода и вывода данных основных типов можно воспользоваться функциями с именами scanf и printf. Для вычисления синуса и косинуса используют стандартные функции с именами sin и cos. Отметим, что количество стандартных функций языка Си перевалило за три сотни.