Объектно-ориентированное программирование на C++. Андрианова А.А - 29 стр.

UptoLike

Объектно-ориентированное программирование на С++
{
// корень гарантировано существует,
// если на концах отрезка
// функция принимает значения различных знаков.
if(f(a) * f(b) > 0)
throw 1;
// обеспечиваем выполнение условия:
// a – левый конец отрезка, b – правый
if(a > b)
{
double t = a;
a = b;
b = t;
}
// цикл метода деления отрезка пополам
while(b - a > eps)
{
double c = (a + b) / 2;
if(f(c) == 0)
return c;
if(f(a)*f(c) < 0)
b = c;
else
a = c;
}
return (a + b) / 2;
}
Еще одним классическим примером использования указателей на
функции является функция сортировки некоторого массива объектов.
Сортировка, как правило, состоит из трех частей: сравнения,
определяющего упорядоченность пары объектов; перестановки,
меняющей местами пару объектов, и сортирующего алгоритма, который
осуществляет сравнения и перестановки до тех пор, пока все объекты не
будут упорядочены. Алгоритм сортировки не зависит от операций
сравнения, так что, передавая ему в качестве параметров различные
функции, его можно настроить на различные критерии сравнения.
Пусть существует список студентов, у которых известны фамилия,
имя, отчество (ФИО), номер группы и средний балл успеваемости.
Используя различные критерии, например, упорядочивание списка
студентов в лексикографическом порядке по ФИО, по среднему баллу
успеваемости, по группам и т. д., необходимо отсортировать этот список
студентов по убыванию или по возрастанию.
// структура, содержащая информацию о студенте
29
                           Объектно-ориентированное программирование на С++
     {
          // корень гарантировано существует,
          // если на концах отрезка
          // функция принимает значения различных знаков.
          if(f(a) * f(b) > 0)
               throw 1;
          // обеспечиваем выполнение условия:
          // a – левый конец отрезка, b – правый
          if(a > b)
          {
               double t = a;
               a = b;
               b = t;
          }
          // цикл метода деления отрезка пополам
          while(b - a > eps)
          {
               double c = (a + b) / 2;
               if(f(c) == 0)
                    return c;
               if(f(a)*f(c) < 0)
                    b = c;
               else
                    a = c;
          }
          return (a + b) / 2;
     }

    Еще одним классическим примером использования указателей на
функции является функция сортировки некоторого массива объектов.
    Сортировка, как правило, состоит из трех частей: сравнения,
определяющего упорядоченность пары объектов; перестановки,
меняющей местами пару объектов, и сортирующего алгоритма, который
осуществляет сравнения и перестановки до тех пор, пока все объекты не
будут упорядочены. Алгоритм сортировки не зависит от операций
сравнения, так что, передавая ему в качестве параметров различные
функции, его можно настроить на различные критерии сравнения.
    Пусть существует список студентов, у которых известны фамилия,
имя, отчество (ФИО), номер группы и средний балл успеваемости.
Используя различные критерии, например, упорядочивание списка
студентов в лексикографическом порядке по ФИО, по среднему баллу
успеваемости, по группам и т. д., необходимо отсортировать этот список
студентов по убыванию или по возрастанию.

     // структура, содержащая информацию о студенте
                                                                         29