Главная->Інформатика та програмування->Содержание->Расстановка с использованием указателей

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 10) онлайн

Расстановка с использованием указателей

Первая программа похожа на программу REFORDER из главы 6 «Объекты и клас- сы» за исключением того, что здесь вместо ссылок используются указатели. Она упорядочивает два числа, которые передаются как аргументы, меняя их местами, если второе меньше первого. Вот листинг программы PTRORDER:

// ptrorder.cpp

// сортировка двух аргументов по указателю

#include <iostream>

using namespace std;

 

int main ( )

{

  void order ( int*, int* );     // прототип функции

 

  int n1 = 99, n2 = 11;

  int n3 = 22, n4 = 88;

 

  order ( &n1, &n2 );

  order ( &n3, &n4 );

 

  cout << "n1 = " << n1 << endl; // выводим переменные

  cout << "n2 = " << n2 << endl; // на экран

  cout << "n3 = " << n3 << endl;

  cout << "n4 = " << n4 << endl;

 

  return 0;

}

///////////////////////////////////////////////////////////

void order ( int* numb1, int* numb2 ) // сортировка двух чисел

 

{

  if ( *numb1 > *numb2 )              // если первое число больше, то меняем их местами

  {

    int temp = *numb1;

    *numb1 = *numb2;

    *numb2 = temp;

  }

}

 

Функция order() работает так же, как и в программе REFORDER, за исключением того, что здесь передаются адреса сортируемых чисел и доступ к числам проис- ходит через указатели. Так, *numb1 получает значение переменной n1 в функ- ции main() и является первым аргументом, a *numb2 получает значение перемен- ной n2.

Приведем результат работы программы PTRORDER:

n1 = 11 n2 = 99

nЗ = 22 n4 = 88

Мы будем использовать функцию order() из программы PTRORDER в нашей следующей программе, PTRSORT, которая сортирует массив целых чисел.

// ptrsort.cpp

// сортировка массива с использованием указателей

#include <iostream>

using namespace std;

 

int main ( )

{

  void bsort ( int*, int ); // прототип функции

  const int N = 10;         // размер массива

  int arr [ N ] = { 37, 84, 62, 91, 11, 65, 57, 28, 19, 49 }; // массив для сортировки

 

  bsort ( arr, N );

 

  for ( int j = 0; j < N; j++ )

    cout << arr [ j ] << " ";

  cout << endl;

 

  return 0;

}

///////////////////////////////////////////////////////////

void bsort ( int* ptr, int n )

{

  void order ( int*, int* );          // прототип функции

  int j, k;                           // индексы в нашем массиве

 

  for( j = 0; j < n - 1; j++ )                // внешний цикл

    for ( k = j + 1; k < n; k++ ) // внутренний цикл

      order ( ptr + j, ptr + k );     // сортируем элементы

}

///////////////////////////////////////////////////////////

void order ( int* numb1, int* numb2 ) // сортировка двух чисел

{

 

if ( *numb1 > *numb2 )              // если первое число

                                      // больше, то меняем их местами

  {

    int temp = *numb1;

    *numb1 = *numb2;

    *numb2 = temp;

  }

}

Массив arr целых чисел инициализирован в функции main() неотсортирован- ными значениями. Адрес массива и номера его элементов передаются в функ- цию bsort(). Она сортирует массив и выводит результат:

11 19 28 37 49 57 62 65 84 91

 

16