Advertisement
Guest User

Untitled

a guest
May 22nd, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.25 KB | None | 0 0
  1. // Lab3
  2. // V2
  3.  
  4. #include <stdio.h>
  5. #include <conio.h>
  6. #include <math.h>
  7. #include <malloc.h>
  8.  
  9. int task1(int n, int **A);
  10. void task2(int n, int **A);
  11.  
  12. int main()
  13. {
  14.     int n, i, j;
  15.  
  16.     printf("Array size: ");
  17.     scanf("%d", &n);
  18.  
  19.     int **A = (int **)malloc(n * sizeof(int *));
  20.     for (i = 0; i < n; i++)
  21.     {
  22.         A[i] = (int *)malloc(n * sizeof(int));
  23.     }
  24.  
  25.     for (i = 0; i < n; i++)
  26.     {
  27.         for (j = 0; j < n; j++)
  28.         {
  29.             printf("\nA[%d][%d]= ", i, j);
  30.             scanf("%d", &A[i][j]);
  31.         }
  32.     }
  33.  
  34.     printf("\n=== Source array ====\n");
  35.     for (i = 0; i < n; i++)
  36.     {
  37.         for (j = 0; j < n; j++)
  38.         {
  39.             printf("%6d", A[i][j]);
  40.         }
  41.         printf("\n");
  42.     }
  43.  
  44.     printf("\n=== Task 1 ====\n");
  45.     int count;
  46.     count = task1(n, A);
  47.     printf("Count columns = %d\n", count);
  48.  
  49.  
  50.     printf("\n=== Task 2 ====\n");
  51.     task2(n, A);
  52.     for (i = 0; i < n; i++)
  53.     {
  54.         for (j = 0; j < n; j++)
  55.         {
  56.             printf("%6d", A[i][j]);
  57.         }
  58.         printf("\n");
  59.     }
  60.  
  61.     getch();
  62.     for (i = 0; i < n; i++)
  63.     {
  64.         free(A[i]);
  65.     }
  66.     free(A);
  67.     return 0;
  68. }
  69.  
  70. int task1(int n, int **A)
  71. {
  72.     int i, j, countColumns = 0, countZeros;
  73.  
  74.     for (i = 0; i < n; i++)
  75.     {
  76.         countZeros = 0;
  77.         for (j = 0; j < n; j++)
  78.         {
  79.             if (A[j][i] == 0)
  80.             {
  81.                 ++countZeros;
  82.             }
  83.         }
  84.         if (countZeros == 0)
  85.         {
  86.             ++countColumns;
  87.         }
  88.     }
  89.  
  90.     return countColumns;
  91. }
  92.  
  93. void task2(int n, int **A)
  94. {
  95.     int i, j, k, f1, f2;
  96.  
  97.     int *S = (int *)malloc(n * sizeof(int));
  98.  
  99.     int **B = (int **)malloc(n * sizeof(int *));
  100.  
  101.     for (i = 0; i < n; i++)
  102.     {
  103.         B[i] = (int *)malloc(n * sizeof(int));
  104.     }
  105.  
  106.     for (i = 0; i < n; i++)
  107.     {
  108.         for (j = 0; j < n; j++)
  109.         {
  110.             B[i][j] = A[i][j];
  111.         }
  112.     }
  113.  
  114.     for (i = 0; i < n; i++)
  115.     {
  116.         f1 = f2 = 0;
  117.         for (j = 0; j < n - 1; j++)
  118.         {
  119.             if (A[j][i] <= A[j + 1][i]) ++f1;
  120.             if (A[j][i] >= A[j + 1][i]) ++f2;
  121.         }
  122.         if (f1 != n - 1 && f2 != n - 1)
  123.         {
  124.             // линейный выбор с подсчетом
  125.             int t;
  126.  
  127.             for (j = 0; j < n; j++)
  128.             {
  129.                 S[j] = 0;
  130.             }
  131.  
  132.             for (j = 0; j < n - 1; j++)
  133.             {
  134.                 t = 0;
  135.                 for (k = j + 1; k < n; k++)
  136.                 {
  137.                     if (A[j][i] < A[k][i]) ++S[k];
  138.                     else ++t;
  139.                 }
  140.                 S[j] += t;
  141.             }
  142.             for (j = 0; j < n; j++)
  143.             {
  144.                 A[S[j]][i] = B[j][i];
  145.             }
  146.         }
  147.     }
  148.  
  149.  
  150.     for (i = 0; i < n; i++)
  151.     {
  152.         free(B[i]);
  153.     }
  154.     free(B);
  155.     free(S);
  156. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement