Результаты работы программы

Результаты работы программы

Результаты работы программы

Количество объектов Vstring: 0

Количество объектов Vstring: 1

Количество объектов Vstring: 2

Значение объекта v: 12345

Количество объектов Vstring: 2

Количество объектов Vstring: 3

Количество объектов Vstring: 2

Количество объектов Vstring: 3

Количество объектов Vstring: 2

Количество объектов Vstring: 3

Шаблоны функций

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

template <class T> // Ключевое слово и параметр

const T& Max(const T& a, const T& b)

{

return a>b? a:b;

}

void main()

{

int i = 1, j = 2;

float r = 1.1, s = 1.2;

int k = Max(i, j);

float t = Max(r, s);

}

Пример. Параметризованная функция бинарного поиска в отсортированном массиве.

#include <iostream.h>

#include <conio.h>

template <class Type>

int binsearch(Type* x, int count, Type key)

{

int low, high, mid; // Левый, правый и средний элементы

low = 0; high = count - 1;

while (low <= high)

{

mid = (low+high)/2; // Вычисление середины массива

if(key < x[mid]) high = mid - 1; // Если нужный элемент

// находится слева от середины

else if(key > x[mid]) low = mid + 1; // Если справа

else return mid; // Нашли

}

return -1; // Не нашли

}

void main()

{

clrscr(); // Очистка экрана

int nums[] = {1, 2, 3, 5, 7, 11, 13, 17}; // Массив, в котором ищем

cout << "5 находится на " << binsearch(nums, 8, 5)

cout << " месте в массиве.";

getch(); // Ожидание нажатия клавиши

}

5 находится на 3 месте в массиве.

Пример. Приведём параметризованную подпрограмму (функцию) сортировки методом пузырьков и применим ее для упорядочения массива, состоящего из целых чисел, записанных в неупакованном BCD – формате. Ниже следует подпрограмма (функция) сортировки и программа тестирования.

#include <iostream.h>

#include <conio.h>

template <class Type>

void bubble (Type *x, int n) // Сортировка методом пузырьков

{

int i, j;

Type t;

for(i = 1; i < n; i++)

for(j = n-1; j >= i; --j)

{

if(x[j-1] > x[j])

{

t = x[j-1]; x[j-1] = x[j]; x[j] = t;

}

}

}

void main()

{

clrscr(); // Очистка экрана

int i;

int nums[] = {10, 12, 11, 3, 5, 12, 10}; // Исходный массив

cout << "Исходный массив: ";

for(i = 0; i < 7; i++) cout << nums[i] << " ";

cout << '\n';

bubble (nums, 7); // Сортировка

cout << "Отсортированный массив: ";

for(i = 0; i < 7; i++) cout << nums[i] << " ";

getch(); // Ожидание нажатия клавиши

}

Исходный массив: 10 12 11 3 5 12 10

Отсортированный массив: 3 5 10 10 11 12 12

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

#include <iostream.h>

#include <string.h>

#include <conio.h>

template <class Type>

void bubble (Type *x, int n) // Сортировка методом пузырьков

{

int i, j;

Type t;

for(i = 1; i < n; i++)

for(j = n-1; j >= i; --j)

{

if(x[j-1] > x[j])

{

t = x[j-1]; x[j-1] = x[j]; x[j] = t;

}

}

}

// Класс BCD чисел

class Bcd

{

// Недоступные элементы класса

static int n; // Максимальный размер BCD чисел

char *a; // Массив под BCD число

public:

// Общедоступные элементы класса

// Перегрузка оператора =

void operator = (char *b);

// Перегрузка оператора >

int operator > (Bcd x);

void show(); // Вывод BCD числа на экран

};

// Перегрузка оператора =

void Bcd::operator = (char *b)

{

int i;

a = new char[n]; // Выделение памяти под BCD число

for(i = 0; i < n; i++)

a[i] = '0'; // Инициализация его нулями

i = strlen(b); // Определение длины присваиваемого числа

int k = i - 1; // Запоминаем её

// Копирование знака числа

if(b[0] == '+' || b[0] == '-')

{

i--;

a[n - 1] = b[0];

}

else a[n - 1] = '+';

// Копирование самого числа

for(int j = 0; j < i; j++) a[j] = b[k - j];

}

// Перегрузка оператора >

int Bcd::operator > (Bcd x)

{

int i = 0;

// Если первое число положительное,

// а второе - отрицательное, то первое больше

if(this->a[n-1] == '+' && x.a[n-1] == '-') return 1;

// Если первое число отрицательное,

// а второе - положительное, то первое меньше

if(this->a[n-1] == '-' && x.a[n-1] == '+') return 0;

// Сравнение по отдельным цифрам

for(i = 1; i < n; i++)

{

if(this->a[n - 1 - i] > x.a[n - 1 - i])

{

if(x.a[n - 1] == '+') return 1;

else return 0;

}

else if(this->a[n - 1 - i] < x.a[n - 1 - i])

{

if(x.a[n - 1] == '+') return 0;

else return 1;

}

}

return 0;

}

// Вывод BCD числа на экран

void Bcd::show()

{

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

char *str;

str = new char[n+1]; // Выделение под неё памяти

str[0] = a[n-1]; // Копирование знака

str[n] = '\0'; // Постановка конечного нуля

// Копирование цифр

int i;

for(i=n-2; i>=0; i--) str[n-i-1] = a[i];

// Вывод строки на экран

cout << str;

delete str; // Освобождение памяти

}

Теперь вызываем параметризованную функцию для сортировки массива Bcd:

int Bcd::n = 15; // Максимальная длина BCD числа

void main()

{

clrscr(); // Очистка экрана

Bcd x[10]; // Создание массива bcd чисел

// Инициализация BCD чисел

x[0] = "1234"; x[1] = "924"; x[2] = "-92"; x[3] = "0";

x[4] = "-1"; x[5] = "10"; x[6] = "12"; x[7] = "1";

x[8] = "-2"; x[9] = "12345";

// Вывод неотсортированного массива

cout << "Неотсортированные BCD числа:\n";

for(int i = 0; i < 10; i++)

{

x[i].show();

cout << '\n';

}

bubble(x, 10); // Сортировка методом пузырьков

// Вывод отсортированного массива

cout << "Отсортированные BCD числа:\n";

for(i = 0; i < 10; i++)

{

x[i].show();

cout << '\n';

}

getch(); // Ожидание нажатия клавиши

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: