Цель работы: изучить использование шаблонов функция в С++.
Задание:
Выполнить задание А) из 2-й лабораторной работы, оформив каждый пункт задания в виде шаблона функции. Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается. Привести примеры программ, использующих эти шаблоны для типов int, float, double.
Теоретические сведения:
Заголовок шаблона функции:
1 2 3 4 |
template <class список шаблонов> заголовок функции { //Тело функции } |
Пример:
1 2 3 4 5 6 7 8 |
//Следующая функция обменяет две переменные любого типа содержимым: template <class type> void swap (Type & arg1, Type & arg2) { Type temp; temp=arg1; arg1=arg2; arg2=temp; } |
Текст программы:
Файл «LAB2A.CPP»:
1 2 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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
#include <stdio.h> #include <stdlib.h> const MAX=10; float a[MAX]={0, -324, 45.3215,4.01,0,0,-4.001,0,100.78,45 } ,sum; int n,min; int cz=0; template <class T>void PrintMatrix(T a[MAX]); template <class T>int CalculateCountZero(T a[MAX]); template <class T>void CalculateAmountAfterMin(T a[MAX]); template <class T> void Regularize(T a[MAX]); void main() { randomize(); PrintMatrix(a); printf("\n"); min=0; //Вычисляем количество элементов, равных 0. min=CalculateCountZero(a); //Вычисляем сумму элементов, расположенных после минимального. CalculateAmountAfterMin(a); //Упорядочение элементов по возрастанию модулей. Regularize(a); PrintMatrix(a); } template <class T>void PrintMatrix(T a[MAX]) { printf("\n"); for (n=0;n<MAX;n++) { printf("a[%i]= %f\n",n,a[n]); } } template <class T>int CalculateCountZero(T a[MAX]) { int min=0; for (n=0;n<MAX; n++) { if (a[n]==0) cz++; if (a[n]<a[min]) min=n; //Заодно вычисляем позицию минимального элемента } printf("Количество элементов, равных нулю: %i\n",cz); return min; } template <class T>void CalculateAmountAfterMin(T a[MAX]) { for (n=min+1;n<MAX;n++) sum+=a[n]; printf("Сумма элементов, расположенных после минимального: %f\n",sum); } template <class T> void Regularize(T a[MAX]) { for (n=0;n<MAX;n++) { for (int m=n; m<MAX;m++) { if (abs(a[m])<abs(a[n])) { float buf; buf=a[n]; a[n]=a[m]; a[m]=buf; } } } } |
Вывод: были изучены шаблоны функций.