Xom9ik

Lab_11/16 var (IIl semester)

Nov 19th, 2017
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.86 KB | None | 0 0
  1. //Lab_11.cpp
  2. #include <iostream>
  3. #include <ctime>
  4.  
  5. using namespace std;
  6. template <typename T>
  7. class Multiplicity
  8. {
  9. public:
  10.     Multiplicity(int s, T k = 0)
  11.     {
  12.         size = s;
  13.         data = new T[size];
  14.         for (int i = 0; i<size; i++)
  15.             data[i] = k;
  16.     }
  17.     //конструктор копирования
  18.     Multiplicity(const Multiplicity<T>&a)
  19.     {
  20.         size = a.size;
  21.         data = new int[size];
  22.         for (int i = 0; i<size; i++)
  23.             data[i] = a.data[i];
  24.     }
  25.     ~Multiplicity()
  26.     {
  27.         delete[]data;
  28.         data = 0;
  29.     }
  30.     //метод получения количества элементов множества
  31.     int len()
  32.     {
  33.         return size;
  34.     }
  35.     //оператор присваивания
  36.     Multiplicity<T> &operator=(const Multiplicity<T> &a)
  37.     {
  38.         if (this == &a)
  39.             return *this;
  40.         size = a.size;
  41.         if (data != 0)
  42.             delete[]data;
  43.         data = new int[size];
  44.         for (int i = 0; i<size; i++)
  45.             data[i] = a.data[i];
  46.         return *this;
  47.     }
  48.     //операция доступа по индексу
  49.     T &operator[](int index)
  50.     {
  51.         if (index < size)
  52.             return data[index];
  53.         else
  54.             cout << "Error" << endl;
  55.     }
  56.     //операция для разности множества
  57.     Multiplicity<T> operator-(const Multiplicity<T> &k)
  58.     {
  59.         Multiplicity<T> temp(size);
  60.         for (int i = 0; i < size; i++)
  61.         {
  62.             temp.data[i] = data[i] - k.data[i];
  63.         }
  64.         return temp;
  65.     }
  66.     //операция возвращающая длину множества
  67.     int operator()()
  68.     {
  69.         return len();
  70.     }
  71.     //перегруженные операции ввода-вывода
  72.     template <typename J>
  73.     friend ostream& operator<<(ostream& out, Multiplicity<J> &a)
  74.     {
  75.         for (int i = 0; i<a.len(); ++i)
  76.             out << a.data[i] << " ";
  77.         return out;
  78.     }
  79.     template <typename J>
  80.     friend istream& operator >> (istream& in, Multiplicity<J> &a)
  81.     {
  82.         for (int i = 0; i<a.len(); ++i)
  83.             in >> a.data[i];
  84.         return in;
  85.     }
  86.  
  87. private:
  88.     int size;
  89.     T *data;
  90. };
  91. template <class T1, class T2>
  92. class Pair
  93. {
  94. public:
  95.     Pair() {};
  96.     Pair(T1 f, T2 s)
  97.     {
  98.         first = f;
  99.         second = s;
  100.     }
  101.     T1 first;
  102.     T2 second;
  103.     ~Pair() { first = 0; second = 0; };
  104.     //перегруженные операции ввода-вывода
  105.     template <class J1, class J2>
  106.     friend ostream& operator << (ostream& out, Pair<J1, J2> &a)
  107.     {
  108.         out << a.first << ":" << a.second;
  109.         return out;
  110.     }
  111.     template <class J1, class J2>
  112.     friend istream& operator >> (istream& in, Pair<J1, J2> &a)
  113.     {
  114.         in >> a.first;
  115.         in >> a.second;
  116.         return in;
  117.     }
  118. };
  119. int main()
  120. {
  121.     setlocale(LC_ALL, "rus");
  122.     srand(time(NULL));
  123.     int size;
  124.     cout << "Введите размерность множеств A и B: ";
  125.     cin >> size;
  126.  
  127.     Multiplicity<int> A(size);
  128.     cout << "Множество A \n" << A << "\n";
  129.     cout << "Введите " << size << " чисел множества A\n";
  130.     cin >> A;
  131.     cout << "Введенное множество A: " << A << endl;
  132.     int index, value;
  133.     cout << "Введите индекс элемента для замены(0-" << size << "): ";
  134.     cin >> index;
  135.     cout << "Введите новое значение: ";
  136.     cin >> value;
  137.     A[index] = value;
  138.     cout << "Множество A после замены: " << A << endl;
  139.    
  140.     Multiplicity<int> B(size);
  141.     cout << "Введите " << size << " чисел множества B\n";
  142.     cin >> B;
  143.     cout << "Введенное множество B: " << B << endl;
  144.     cout << "Множество A после вычитания из него B: " << A << endl;
  145.     cout << A << "\n-\n" << B << "\n-----------------" << endl;
  146.     A = (A - B);
  147.     cout << A << endl;
  148.  
  149.     Multiplicity<int> C(A()+B());
  150.     for (int i = 0; i < A() + B(); i++)
  151.         C[i] = 0 + rand() % 20;
  152.     cout << C << "\n";
  153.     cout << "Размер множества C=" << C() << endl;
  154.  
  155.     cout << "\n->Ввод данных для Pair(int, double): ";
  156.     Pair<int, double> MyPair;
  157.     cin >> MyPair;
  158.     cout << MyPair;
  159.     cout << endl;
  160.     system("pause");
  161. }
Advertisement
Add Comment
Please, Sign In to add comment