Advertisement
frustration

DONE. 12 вариант. двумерный массив. динамический. функции

May 31st, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.37 KB | None | 0 0
  1. /*вариант 12
  2. Найти номер первой  из строк, содержащих хотя бы один положительный элемент.
  3. Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями.
  4. */
  5.  
  6. #include <iomanip>
  7. #include <iostream>
  8. #include <time.h>
  9. #include <conio.h>
  10. #include <cmath>
  11. #include <memory>
  12. #include <stdio.h>
  13.  
  14. using namespace std;
  15.  
  16.  
  17.  
  18. void input(int N, int M, int **arr){
  19.  
  20.     for (int i = 0; i < N; i++) {
  21.         for (int j = 0; j < M; j++) {
  22.             scanf_s("%d", &arr[i][j]);
  23.  
  24.         }
  25.     }
  26. }
  27.  
  28. void output(int N, int M, int **arr){
  29.     for (int i = 0; i < N; ++i) {
  30.         for (int j = 0; j < M; ++j)
  31.             printf_s("%3d", arr[i][j]);
  32.         printf_s("\n");
  33.     }
  34. }
  35.  
  36. void numer_line(int N, int M, int **arr){
  37.     int ipos = 0, cnt = 0;
  38.     for (int i = 0; i < N; ++i) {
  39.         for (int j = 0; j < M; ++j)
  40.             if (arr[i][j] > 0){
  41.                 ipos = i;
  42.                 cnt++;
  43.                 break;
  44.             }
  45.         if (cnt == 1) {
  46.             cout << "number of line with positive item " << ipos + 1 << endl;
  47.             break;
  48.         }
  49.     }
  50.     if (cnt == 0)
  51.         cout << "matrix hasn't these lines" << endl;
  52. }
  53.  
  54. void condensation(int N, int M, int **arr){
  55.     int i, j, m = 0, n = 0;
  56.  
  57.     for (j = 0; j < M; ++j) {
  58.         for (i = 0; (i < N) && (arr[i][j] == 0); ++i);
  59.         if (i == N)
  60.             break;
  61.     }
  62.  
  63.     for (m = j; j < M; ++j) {
  64.         i = 0;
  65.         while ((i < N) && (arr[i][j] == 0))
  66.             ++i;
  67.         if (i < N) {
  68.             for (i = 0; i < N; ++i)
  69.                 arr[i][m] = arr[i][j];
  70.             ++m;
  71.         }
  72.     }
  73.  
  74.     for (i = 0; i < N; ++i) {
  75.         for (j = 0; (j < M) && (arr[i][j] == 0); ++j)
  76.             ;
  77.         if (j == M)
  78.             break;
  79.     }
  80.  
  81.     for (n = i; i < N; ++i) {
  82.         j = 0;
  83.         while ((j < M) && (arr[i][j] == 0))
  84.             ++j;
  85.  
  86.         if (j < M) {
  87.             for (j = 0; j < M; ++j)
  88.                 arr[n][j] = arr[i][j];
  89.             ++n;
  90.         }
  91.     }
  92.  
  93.     cout << endl << "compacted array: " << endl;
  94.     for (i = 0; i < n; ++i) {
  95.         for (j = 0; j < m; ++j)
  96.             cout << setw(3) << arr[i][j] << ' ';
  97.         cout << endl;
  98.     }
  99.  
  100. }
  101.  
  102. int main() {
  103.     int N, M;
  104.     cout << "size matrix:" << endl;
  105.     cin >> N >> M;
  106.  
  107.  
  108.     int** arr = new int *[N];
  109.     for (int i = 0; i < N; i++)
  110.         arr[i] = new int[M];
  111.    
  112.     cout << "enter elements:"<<endl;
  113.     input(N, M, arr);
  114.     cout << "\n";
  115.     cout << endl << "original array " << N << "x" << M << ":" << endl;
  116.     output(N, M, arr);
  117.     cout << "\n";
  118.     numer_line(N, M, arr);
  119.     condensation(N, M, arr);
  120.     _getch();
  121.  
  122.     return 0;
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement