Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab5.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
78.85 Кб
Скачать

Лабораторная работа № 5 Параметризованные функции. Сортировка Параметризованные функции

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

template <class Ttype> тип_функции имя_функции(список параметров)

{

... // Тело функции

}

Здесь параметр Ttype обозначает тип данных, используемых функцией. Это имя может использоваться в пределах действия определения функции. При создании конкретной версии этой функции компилятор автоматически заменит этот параметр конкретным типом данных. Конкретная версия функции называется порожденной, а процесс создания порожденной функции – конкретизацией.

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

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

Пример. Параметризованная функция обмена двух переменных.

template <class Stype> void Swap(Stype &f,Stype &g); // Прототип

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

if(rbInt->Checked)

{

int x,y;

x=StrToInt(Edit1->Text);

y=StrToInt(Edit2->Text);

Swap(x,y); // Вызов функции обмена для двух целых чисел

Edit1->Text=IntToStr(x);

Edit2->Text=IntToStr(y);

}

if(rbDbl->Checked)

{

double x,y;

x=StrToFloat(Edit1->Text);

y=StrToFloat(Edit2->Text);

Swap(x,y); // Вызов функции обмена для двух чисел типа double

Edit1->Text=FloatToStr(x);

Edit2->Text=FloatToStr(y);

}

}

//---------------------------------------------------------------------------

Параметризованная функция обмена двух переменных

template <class Stype> void Swap(Stype &f,Stype &g)

{

Stype temp; // Вместо Stype будет подставлен реальный тип данных

temp=f;

f=g;

g=temp;

}

В ид окна программы представлен на рис. 1.

Рис.1. Окно программы примера 1.

Сортировка

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

Существуют две основных категории алгоритмов сортировки: алгоритмы для сортировки массивов и алгоритмы для сортировки.

Все методы сортировки можно отнести к одному из следующих классов:

  • Перестановка

  • Отбор

  • Вставка

При выборе метода сортировки следует учитывать следующие критерии:

  1. Средняя скорость сортировки. Скорость сортировки зависит от количества сравнений и перестановок.

  2. Скорость в наилучшем и наихудшем случае. Этот критерий важен, если есть основания ожидать частого повторения одной из этих ситуаций. Наилучший случай – массив отсортирован в нужном порядке. Наихудший – массив отсортирован в противоположном порядке.

  3. Естественность поведения алгоритма. Если массив уже упорядочен, алгоритм должен выполнять наименьшее число операций, если упорядочен в обратном порядке, то число операций наибольшее.

  4. Выполняется ли сортировка элементов с одинаковыми ключами. Этот критерий важен, если сортируются записи в списке или базе данных по некоторому ключу и необходимо, чтобы не выполнялась сортировка по другим полям, т.е. чтобы не выполнялась перестановка элементов с одинаковыми ключами.

!

При преобразовании сортируемой строки из AnsiString в символьную строку char* необходимо завершать строку char* символом ‘\0’(окончание строки), иначе возможны ошибки – пропуск символов или лишние символы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]