mr1302

strukt

Feb 21st, 2021
750
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <vector>
  3. #include <utility>
  4. #include <random>
  5. #include <time.h>
  6.  
  7. using namespace std;
  8.  
  9. // изначальные алгоритмы, нумерация в массиве от 1
  10. /*void delFirstMetod(vector<int> & x, int & n, int key) {
  11.     int i = 1;
  12.     while (i <= n) {
  13.         if (x[i] == key) {
  14.             for (int j = i; j < n; ++j)
  15.                 x[j] = x[j + 1];
  16.             n = n - 1;
  17.         }
  18.         else
  19.             i++;
  20.     }
  21. }
  22.  
  23. void delFirstMetod(vector<int>& x, int & n, int key) {
  24.     int j = 1;
  25.     for (int i = 1; i <= n; ++i) {
  26.         x[j] = x[i];
  27.         if (x[i] != key)
  28.             j++;
  29.     }
  30.     n = j;
  31. }*/
  32.  
  33. // нумерция в массиве от 0
  34. pair<int, int> delFirstMetod(vector<int>& x, int& n, int key) {
  35.     int comparsionCount = 0, movingCount = 0;
  36.     int i = 0;
  37.     while (i < n) {
  38.         comparsionCount++;
  39.         if (x[i] == key) {
  40.             for (int j = i; j < n - 1; ++j) {
  41.                 x[j] = x[j + 1];
  42.                 movingCount++;
  43.             }
  44.             n = n - 1;
  45.         }
  46.         else
  47.             i++;
  48.     }
  49.  
  50.     return { comparsionCount, movingCount };
  51. }
  52.  
  53. pair<int, int> delOtherMetod(vector<int>& x, int& n, int key) {
  54.     int j = 0;
  55.     int comparsionCount = 0, movingCount = 0;
  56.     for (int i = 0; i < n; ++i) {
  57.         x[j] = x[i];
  58.         comparsionCount++, movingCount++;
  59.         if (x[i] != key)
  60.             j++;
  61.     }
  62.     n = j;
  63.     return { comparsionCount, movingCount };
  64. }
  65.  
  66. void arrayFill(vector<int> & a, int size, int mod) {
  67.     for (int i = 0; i < size; ++i) {
  68.         int n = 0;
  69.         if(mod != -1)
  70.             n = rand() % mod;
  71.         else
  72.             n = rand();
  73.         a.push_back(n);
  74.     }
  75. }
  76.  
  77. vector<int> arrayCreate(int size) {
  78.     vector<int> a;
  79.     arrayFill(a, size, -1);
  80.     return a;
  81. }
  82.  
  83. vector<int> arrayCreate(int size, int mod) {
  84.     vector<int> a;
  85.     arrayFill(a, size, mod);
  86.     return a;
  87. }
  88.  
  89. void arrayPrint(vector<int>& a, int size) {
  90.     for (int i = 0; i < size; ++i)
  91.         cout << a[i] << " ";
  92.     cout << '\n';
  93. }
  94.  
  95. int main() {
  96.     srand(time(0));
  97.     setlocale(LC_ALL, "Rus");
  98.     cout << "-------n = 10-------\n";
  99.     int n1 = 10;
  100.     int n2 = n1;
  101.     int mod = 100; // модуль случайных чисел
  102.     vector<int> a1 = arrayCreate(n1, mod);
  103.     vector<int> a2 = a1;
  104.     arrayPrint(a1, n1);
  105.     cout << "Введите элемент который вы хотите удалить:\n";
  106.     int keyFirst;
  107.     cin >> keyFirst;
  108.     pair<int, int> resultsFirst = delFirstMetod(a1, n1, keyFirst);
  109.     cout << "Массив без удаленного элемента:\n";
  110.     arrayPrint(a1, n1);
  111.     cout << "Количество сравнений в первом варианте алгоритма:\n";
  112.     cout << resultsFirst.first << '\n';
  113.     cout << "Количество перемещений в первом варианте алгоритма:\n";
  114.     cout << resultsFirst.second << '\n';
  115.     pair<int, int> resultsOther = delOtherMetod(a2, n2, keyFirst);
  116.     cout << "Количество сравнений во втором варианте алгоритма:\n";
  117.     cout << resultsOther.first << '\n';
  118.     cout << "Количество перемещений во втором варианте алгоритма:\n";
  119.     cout << resultsOther.second << '\n';
  120.     cout << "-------n = 100------\n";
  121.     n1 = 100;
  122.     n2 = n1;
  123.     a1 = arrayCreate(n1, mod);
  124.     a2 = a1;
  125.     arrayPrint(a1, n1);
  126.     cout << "Введите элемент который вы хотите удалить:\n";
  127.     cin >> keyFirst;
  128.     resultsFirst = delFirstMetod(a1, n1, keyFirst);
  129.     cout << "Массив без удаленного элемента:\n";
  130.     arrayPrint(a1, n1);
  131.     cout << "Количество сравнений в первом варианте алгоритма:\n";
  132.     cout << resultsFirst.first << '\n';
  133.     cout << "Количество перемещений в первом варианте алгоритма:\n";
  134.     cout << resultsFirst.second << '\n';
  135.     resultsOther = delOtherMetod(a2, n2, keyFirst);
  136.     cout << "Количество сравнений во втором варианте алгоритма:\n";
  137.     cout << resultsOther.first << '\n';
  138.     cout << "Количество перемещений во втором варианте алгоритма:\n";
  139.     cout << resultsOther.second << '\n';
  140. }
RAW Paste Data