Advertisement
cyberjab

Untitled

Jan 4th, 2023
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.30 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <string>
  6. #include <vector>
  7. #include <set>
  8. #include <ctime>
  9.  
  10. using namespace std;
  11.  
  12. vector <double> function(double start, double end, double step) { //создает массив значений функции и выводит функцию на экран
  13.     vector <double> sp;
  14.     double y;
  15.     cout << "         X            Y" << endl;
  16.     for (double x = start; x <= end; x += step) {
  17.         y = 3 * cos(5 * x) + 2 * sin(x);
  18.         sp.push_back(y);
  19.         cout << setw(12) << x << "  " << setw(12) << y << endl;
  20.     }
  21.     return sp;
  22. }
  23.  
  24. int max_el_position(vector <double> a, int n) { //находит позицию максимального элемента
  25.     int ans = 0;
  26.     int max_el = -100;
  27.     for (int i = 0; i < n; i++) {
  28.         if (a[i] >= max_el) {
  29.             ans = i;
  30.             max_el = a[i];
  31.         }
  32.     }
  33.     return ans;
  34. }
  35.  
  36. int min_el_position(vector <double> a, int n) { //находит позицию минимального элемента
  37.     int ans = 0;
  38.     int min_el = 100;
  39.     for (int i = 0; i < n; i++) {
  40.         if (a[i] <= min_el) {
  41.             ans = i;
  42.             min_el = a[i];
  43.         }
  44.     }
  45.     return ans;
  46. }
  47.  
  48. vector <double> make_C(vector <double> a, int n) { //создает массив C
  49.     vector <double> c;
  50.     for (int i = 0; i <= n; i++) {
  51.         c.push_back(a[i]);
  52.     }
  53.     return c;
  54. }
  55.  
  56. vector <double> make_D(vector <double> a, int n) { //создает массив D
  57.     vector <double> d;
  58.     for (int i = 0; i <= n; i++) {
  59.         if (a[i] < 0) {
  60.             d.push_back(a[i]);
  61.         }
  62.     }
  63.     return d;
  64. }
  65.  
  66. void print_list(vector <double> a, int n) { // выводит массив на экран
  67.     for (int i = 0; i < n; i++) {
  68.         cout << setw(9) << a[i] << " ";
  69.     }
  70.     cout << endl;
  71. }
  72.  
  73. vector <double> swap_el(vector <double> a, int i, int j) { // своя функция swap
  74.     double t1 = a[i], t2 = a[j];
  75.     a[i] = t2;
  76.     a[j] = t1;
  77.     return a;
  78. }
  79.  
  80. vector <double> shuffle(vector <double> a, int n) { // изменяет массив C по условию задачи
  81.     for (int i = 0; i < n / 2; i++) {
  82.         a = swap_el(a, i, n - i - 1);
  83.     }
  84.     return a;
  85. }
  86.  
  87. vector <double> sort_vector(vector <double> a, int n) { // изменяет массив D по условию задачи
  88.     for (int i = 0; i < n - 1; i++) {
  89.         for (int j = i + 1; j < n; j++) {
  90.             if (a[j] > a[i]) {
  91.                 a = swap_el(a, i, j);
  92.             }
  93.         }
  94.     }
  95.     return a;
  96. }
  97.  
  98. vector <vector <double>> make_K(vector <double> c, vector <double> d, int n) { // создает матрицу K
  99.     vector <vector <double>> k;
  100.     double el;
  101.     for (int i = 0; i < n; i++) {
  102.         vector <double> a;
  103.         for (int j = 0; j < n; j++) {
  104.             if (i == j) {
  105.                 a.push_back(1);
  106.             }
  107.             else {
  108.                 el = c[i] * d[j] - c[j] * d[i];
  109.                 a.push_back(el);
  110.             }
  111.         }
  112.         k.push_back(a);
  113.     }
  114.     return k;
  115. }
  116.  
  117. int count_negative(vector <vector <double>> a, int n) { // считает количество отрицательных элементов в матрице
  118.     int cnt = 0;
  119.     for (int i = 0; i < n; i++) {
  120.         for (int j = 0; j < n; j++) {
  121.             if (a[i][j] < 0) {
  122.                 cnt++;
  123.             }
  124.         }
  125.     }
  126.     return cnt;
  127. }
  128.  
  129. void print_matrix(vector <vector <double>> a, int n) { // выводит матрицу на экран
  130.     for (int i = 0; i < n; i++) {
  131.         print_list(a[i], n);
  132.     }
  133. }
  134.  
  135. vector <vector <double>> transpose_matrix(vector <vector <double>> k, int n) { // транспонирует матрицу
  136.     for (int i = 0; i < n; i++) {
  137.         for (int j = i; j < n; j++) {
  138.             double t1 = k[i][j], t2 = k[j][i];
  139.             k[i][j] = t2;
  140.             k[j][i] = t1;
  141.         }
  142.     }
  143.     return k;
  144. }
  145.  
  146. int main() {
  147.     const double PI = 3.141;
  148.     setlocale(LC_ALL, "RUS");
  149.     vector <double> A = function(-PI, PI, PI / 10);
  150.     int min_el_pos = min_el_position(A, A.size());
  151.     int max_el_pos = max_el_position(A, A.size());
  152.     vector <double> C = make_C(A, min_el_pos);
  153.     vector <double> D = make_D(A, max_el_pos);
  154.     cout << "Массив C:" << endl;
  155.     print_list(C, C.size());
  156.     cout << "Массив C после изменений:" << endl;
  157.     C = shuffle(C, C.size());
  158.     print_list(C, C.size());
  159.     cout << "Массив D:" << endl;
  160.     print_list(D, D.size());
  161.     cout << "Массив D после изменений:" << endl;
  162.     D = sort_vector(D, D.size());
  163.     print_list(D, D.size());
  164.     int n;
  165.     if (D.size() >= C.size()) {
  166.         n = C.size();
  167.     }
  168.     else {
  169.         n = D.size();
  170.     }
  171.     vector <vector <double>> K = make_K(C, D, n);
  172.     cout << "Матрица K:" << endl;
  173.     print_matrix(K, K.size());
  174.     int cnt_neg = count_negative(K, K.size());
  175.     if (cnt_neg * 3 > n * n) {
  176.         cout << "Матрица K после изменений:" << endl;
  177.         K = transpose_matrix(K, K.size());
  178.         print_matrix(K, K.size());
  179.     }
  180.     cout << "Количество отрицательных элементов матрицы K: " << cnt_neg << endl;
  181. }  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement