Xom9ik

Lab_8/4 var (IIl semester)

Dec 2nd, 2017
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.51 KB | None | 0 0
  1. //Lab_8_4var
  2. #include "stdafx.h"
  3. #include <iostream>
  4. #include <ctime>
  5.  
  6. using namespace std;
  7. //4.    Задан массив из k чисел. Отсортировать элементы массива по возрастанию.
  8.  
  9. template <typename T> class Element {
  10. public:
  11.     T elem;
  12.     Element() {}
  13.     Element(T e)
  14.     {
  15.         elem = e;
  16.     }
  17.     template <typename T> T operator *(T &e)
  18.     {
  19.         return elem * e.elem;
  20.     }
  21.     template <typename T> T operator +=(T &e)
  22.     {
  23.         return elem += e.elem;
  24.     }
  25.     operator T()
  26.     {
  27.         return elem;
  28.     }
  29.     Element(const Element &base)
  30.     {
  31.         elem = base.elem;
  32.     }
  33. };
  34. //явное инстанцирование шаблона функции
  35. template int* SortDefaultType(int*, int);
  36. int* SortDefaultType(int* arrayA, int size)
  37. {
  38.     for (int i = 0; i < size; i++)
  39.         for (int j = size - 1; j > i; j--)
  40.             if (arrayA[j] < arrayA[j - 1])
  41.                 swap(arrayA[j], arrayA[j - 1]);
  42.     return arrayA;
  43. }
  44. template double* SortDefaultType(double*, int);
  45. double* SortDefaultType(double* arrayA, double size)
  46. {
  47.     for (int i = 0; i < size; i++)
  48.         for (int j = size - 1; j > i; j--)
  49.             if (arrayA[j] < arrayA[j - 1])
  50.                 swap(arrayA[j], arrayA[j - 1]);
  51.     return arrayA;
  52. }
  53. template float* SortDefaultType(float*, int);
  54. float* SortDefaultType(float* arrayA, int size)
  55. {
  56.     for (int i = 0; i < size; i++)
  57.         for (int j = size - 1; j > i; j--)
  58.             if (arrayA[j] < arrayA[j - 1])
  59.                 swap(arrayA[j], arrayA[j - 1]);
  60.     return arrayA;
  61. }
  62. template <typename T> T* SortDefaultType(T* arrayA, int size); //шаблон функции для стандартных типов данных (int, float, double)
  63. template <typename T> T* SortDefaultType(T* arrayA, int size)
  64. {
  65.     for (int i = 0; i < size; i++)
  66.         for (int j = size - 1; j > i; j--)
  67.             if (arrayA[j] < arrayA[j - 1])
  68.                 swap(arrayA[j], arrayA[j - 1]);
  69.     return arrayA;
  70. }
  71.  
  72. template <class T> T* SortAbstractType(T arrayA[], int size); //шаблон функции для абстрактного типа данных
  73. template <class T> T* SortAbstractType(T arrayA[], int size)
  74. {
  75.     for (int i = 0; i < size; i++)
  76.         for (int j = size - 1; j > i; j--)
  77.             if (arrayA[j] < arrayA[j - 1])
  78.                 swap(arrayA[j], arrayA[j - 1]);
  79.     return arrayA;
  80. }
  81.  
  82. int main()
  83. {
  84.     int size = 0;
  85.     srand(time(NULL));
  86.     cout << "Enter size array: ";
  87.     cin >> size;
  88.     cout << "template <typename T>" << endl;
  89.     float *arrayA = new float[size];
  90.     cout << "Array A: " << endl;
  91.     for (int i = 0; i < size; i++)
  92.     {
  93.         arrayA[i] = (rand() % 100) / 2.3;
  94.         cout << arrayA[i] << " ";
  95.     }
  96.     cout << "\nSortDefaultType A: " << endl;
  97.     SortDefaultType(arrayA, size);
  98.     for (int i = 0; i < size; i++)
  99.         cout << arrayA[i] << " ";
  100.     cout << "\ntemplate <class T>" << endl;
  101.     Element<double> *AbstractArrayA = new Element<double>[size];
  102.     cout << "\nArray A(AbstractType) double: " << endl;
  103.     for (int i = 0; i < size; i++)
  104.     {
  105.         AbstractArrayA[i].elem = (rand() % 100) / 3.14;
  106.         cout << AbstractArrayA[i].elem << " ";
  107.     }
  108.     cout << "\nSortAbstractType A: " << endl;
  109.     SortAbstractType(AbstractArrayA, size);
  110.     for (int i = 0; i < size; i++)
  111.         cout << AbstractArrayA[i].elem << " ";
  112.     Element<int> *AbstractArrayAInt = new Element<int>[size];
  113.     cout << "\nArray A(AbstractType) int: " << endl;
  114.     for (int i = 0; i < size; i++)
  115.     {
  116.         AbstractArrayAInt[i].elem = (rand() % 100);
  117.         cout << AbstractArrayAInt[i].elem << " ";
  118.     }
  119.     cout << "\nSortAbstractType A: " << endl;
  120.     SortAbstractType(AbstractArrayAInt, size);
  121.     for (int i = 0; i < size; i++)
  122.         cout << AbstractArrayAInt[i].elem << " ";
  123.     cout << endl;
  124.     system("pause");
  125. }
Advertisement
Add Comment
Please, Sign In to add comment