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

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

Многие алгоритмы не зависят от типов данных, с которыми они работают (классический пример – сортировка). Естественно желание параметризовать алгоритм таким образом, чтобы его можно было использовать для различных типов данных.

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

Формат простейшей функции – шаблона:

template <class Тype>

тип имя_функции (type param1, type param2)

{

// тело функции

}

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

template <class A, class B, int i> void f(){. . .}

Например, функция сортировки методом Шелла в виде шаблона может выглядеть так:

// Пример родовой функции или шаблона сортировки методом Шелла

#include <iostream.h>

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

const int n=10;

// Это шаблон функции сортировки методом Шелла

template <class T> void chelsort(T arr[],int col)

// сортировка методом Шелла

{int h[] = {9,5,3,1};

for(int i=0,deapazon=h[0]; i<4; deapazon=h[++i])

{ for(int i=deapazon; i < col; i++)

for(int j=i-deapazon;j>=0&&arr[j]>arr[j+deapazon];

j-=deapazon)

{ T temp = arr[j];

arr[j] = arr[j+deapazon];

arr[j+deapazon] = temp;

}

}

}

int main(void)

{ int arr[n], i,col=n;

float arr1[n];

randomize();

// формирование массива целых чисел

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

arr[i]= rand() % 100;

chelsort(arr,col);

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

cout<<arr[i]<<'\n';

// формирование массива вещественных чисел

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

arr1[i]= rand()/ 100.;

chelsort(arr1,col);

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

cout<<arr1[i]<<'\n';

getchar();

return 0;

}

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

Контрольные вопросы

1. Основные правила составления функций.

2. Объяснить назначение оператора return.

3. Какие типы функций поддерживаются языком C++?

4. Место расположения функции по отношению к основной программе.

5. Какие типы формальных и фактических параметров поддерживаются языком C++?

3. Перечень лабораторных работ

Лабораторные работы проводятся на ПК с использованием средств TurboС V3.0 или BuilderC++ V5.0 (или V6.0).

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

Тематика лабораторных работ охватывает основные моменты разработки оптимальных алгоритмов решения поставленных задач и программирования средствами языка С++, помогает студентам освоить приемы работы с массивами, структурами, функциями, файлами и строками. Тематика лабораторных работ указана в таблице 4.

Таблица 4.

п/п

раздела

дисциплины

Наименование лабораторных работ

Кол-во часов

1

1-7

Вычисление суммы бесконечного ряда с заданной точностью

4

2

8

Решение задач с использованием массивов

5

3

10

Решение задач с использованием структур

6

4

11

Решение задач с использованием функций

2

Для успешного выполнения лабораторных работ разработаны методические указания, которые можно взять в библиотеке факультета АИТ. В указаниях даются теоретические сведения по рассматриваемой теме и примеры программ для данного класса задач. Все программы снабжены комментариями и подробными объяснениями. Для выполнения лабораторных работ разработаны тридцать вариантов индивидуальных заданий. Вариант задания выдается преподавателем в начале семестра или перед выполнением каждой лабораторной работы.

Для закрепления изученного материала и самопроверки студентами полученных знаний в каждой лабораторной работе дается перечень контрольных вопросов.

Общие требования к отчетам по лабораторным работам таков: отчет должен содержать:

- титульный лист,

- название лабораторной работы,

- цель и задание,

- текст программы (или несколько текстов программ), снабженный комментариями,

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

Дополнительные требования к отчету по каждой лабораторной работе и варианты индивидуальных заданий приведены в методических указаниях по выполнению лабораторных работ по данному курсу.