SHARE
TWEET

Untitled

a guest Dec 7th, 2019 95 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.     setlocale(LC_ALL, "Russian");
  8.     int n, m, i, j;
  9.     double** a;
  10.     cout << "Введите количество строк" << endl;
  11.     cin >> n;
  12.     cout << "Введите количество столбцов" << endl;
  13.     cin >> m;
  14.  
  15.     a = new double* [n];
  16.  
  17.     for (i = 0; i < n; i++)
  18.         a[i] = new double[m];
  19.  
  20.     // ввод массива вручную
  21.     for (i = 0; i < n; i++)
  22.         for (j = 0; j < m; j++)
  23.         {
  24.             cout << "Введите элемент " << i << " " << j << endl;
  25.             cin >> a[i][j];
  26.         }
  27.     cout << "Матрица:" << endl;
  28.     // вывод массива на экран
  29.     for (i = 0; i < n; i++)
  30.     {
  31.         for (j = 0; j < m; j++)
  32.             cout << a[i][j] << "  ";
  33.         cout << endl; //тут обрываем строку
  34.     }
  35.  
  36.     int counter = 0, index_h = -1, index_w = -1;
  37.  
  38.  
  39.     for (i = 0; i < n; i++) {//поиск первого нуля и счет кол-ва нулей
  40.         for (j = 0; j < m; j++) {
  41.             if (a[i][j] == 0) {
  42.                 if (index_h == -1 && index_w == -1) {
  43.                     index_h = i;
  44.                     index_w = j;
  45.                 }
  46.                 counter++;
  47.             }
  48.         }
  49.     }
  50.     cout << "Индекс первого нуля:" << index_h << "  " << index_w << endl;
  51.     cout << "Количество нулей в матрице: " << counter << endl;
  52.  
  53.  
  54.  
  55.  
  56.     int  size, max_i = index_h, min_j = index_w, k = 0;//проходим по диагонали квадрата для транспонирования
  57.         for (i = index_h, j = index_w; i < n && j >= 0; (i++, j--)) {
  58.             min_j = j;                                      //min_j = индекс столбца элемента массива находящийся в начале диагонали, в конце которой стоит 0
  59.             max_i = i;                                      //max_i = индекс строки того же элемента
  60.         }
  61.    
  62.         if (index_h == index_w) { size = index_h; }
  63.             else { size = max_i - index_h; }
  64.  
  65.  
  66.         double** a_buffer;
  67.         a_buffer = new double* [size+1];
  68.                                             //создаем буферный массив
  69.         for (i = 0; i < size+1; i++)
  70.             a_buffer[i] = new double[size+1];
  71.  
  72.     for (i = 0; i <= size; i++) {//заполняем буферную матрицу нулями, чтобы в пустые ячейки не залетал "мусор"
  73.         for (j = 0; j <= size; j++) {
  74.             if (i > n) { break; };
  75.             a_buffer[i][j] = 0;
  76.         }
  77.     }
  78.        
  79.    
  80.     cout << "Вырезанный квадрат для транспонирования: " << endl;
  81.  
  82.     for (i = 0; i <= size; i++) {//Вырезаем квадрат для транспонирования
  83.         for (j = 0; j <= size; j++) {
  84.             if (i > n) { break; };
  85.             a_buffer[i][j] = a[i+index_h][j+min_j];
  86.  
  87.             cout << a_buffer[i][j] << "  ";
  88.         }
  89.         cout << endl;
  90.     }
  91.    
  92.     cout << "Транспонированный квадрат: " << endl;
  93.  
  94.     for (i = 0; i <=size; i++) {//Транспонируем его и возвращаем в исходную матрицу
  95.         for (j = 0; j <=size; j++) {
  96.             a[i + index_h][j + min_j] = a_buffer[j][i];
  97.             cout << a_buffer[j][i] << "  ";
  98.         }
  99.         cout << endl;
  100.     }
  101.    
  102.     for (int i = 0; i <size+1; i++)//Удаляем буферную матрицу, освобождаем память
  103.     {
  104.         delete[] a_buffer[i];
  105.     }
  106.     delete[] a_buffer;
  107.  
  108.  
  109.     cout << "Матрица после транспонирования: " << endl;
  110.  
  111.     for (i = 0; i < n; i++)//выводим результат
  112.     {
  113.         for (j = 0; j < m; j++)
  114.             cout << a[i][j] << "  ";
  115.         cout << endl; //тут обрываем строку
  116.     }
  117.    
  118.     if (counter > n) {
  119.         cout << "Матрица после замены нулей на их количество: " << endl;
  120.         for (i = 0; i < n; i++) {
  121.             for (j = 0; j < m; j++) {
  122.                 if (a[i][j] == 0) { a[i][j] = counter; }
  123.                 cout << a[i][j] << "  ";
  124.             }
  125.             cout << endl; //тут обрываем строку
  126.         }
  127.     }
  128.  
  129.  
  130.     //Удаляем массив - освобождаем память
  131.     for (int i = 0; i < n; i++)
  132.     {
  133.         delete[] a[i];
  134.     }
  135.     delete[] a;
  136.  
  137.     system("pause");
  138.  
  139.  
  140.     return 0;
  141. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top