ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В 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
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
Схожі підручники
- Індивідуальна робота з курсу «Інвестування»
- ВИГОТОВЛЕННЯ НЕМЕТАЛЕВИХ МІНЕРАЛЬНИХ ВИРОБІВ БУДІВЕЛЬНОГО ПРИЗНАЧЕННЯ ТА ТЕХНОЛОГІЇ БУДІВНИЦТВА
- Регіональна економіка (методичка, самостiйна робота, ідивiдуальна, тести ...)
- Соціальна психологія (частина 2)
- Продажи и управление продажами Учеб. пособие для вузов (часть 3) (онлайн)
- ТЕХНОЛОГІЇ ХІМІЧНИХ ВИРОБНИЦТВ ТА НАФТОПЕРЕРОБЛЕННЯ
