NIKOLAY_TETUS

arrayRemove

Apr 19th, 2022
1,019
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.63 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. void vvod(int **arr,int n, int m)
  6. {
  7.     srand(time(NULL));
  8.  
  9.     int i,j;
  10.     for (i=0;i<n;i++)
  11.     {
  12.         for (j=0;j<m;j++)
  13.             {
  14.                 arr[i][j]=rand()%101-50;
  15.             }
  16.     }
  17. }//
  18.  
  19. void vivod (int **arr, int n, int m)
  20. {
  21.     int i,j;
  22.     for (i=0;i<n;i++)
  23.     {
  24.         for (j=0;j<m;j++)
  25.             {
  26.                 printf("%4d ", arr[i][j]);
  27.             }
  28.          printf("\n");
  29.     }
  30. }
  31.  
  32. void move_column_to_end(int **arr, int n, int m, int columnNumber)
  33. {
  34.     //Check input args
  35.     if (m <= columnNumber)
  36.         return;
  37.    
  38.     //Copy column to buffer array
  39.     int *bufArray = malloc(m * sizeof(int));
  40.     for (int i = 0; i < n; i++)
  41.         bufArray[i] = arr[i][columnNumber];
  42.    
  43.     //Moving columns to reduce empty space
  44.     for (int j = columnNumber + 1; j < m; j ++)
  45.         for (int i = 0; i < n; i++)
  46.             arr[i][j - 1] = arr[i][j];
  47.    
  48.    
  49.     for (int i = 0; i < n; i++)
  50.         arr[i][m - 1] = bufArray[i];
  51.         //printf("BUF %i\n", bufArray[i]);
  52. }
  53.  
  54. size_t remove_negative_numbers(int **arr, int n, int m, int numbersAmount)
  55. {
  56.     int count = 0;  //Negative numbers
  57.     int negativeNumbersInIteration = 0;
  58.    
  59.     for (int j = 0; j < m - count; j++)
  60.     {
  61.         negativeNumbersInIteration = 0;
  62.        
  63.         //printf()
  64.         for (int i = 0; i < n; i++)
  65.             if (arr[i][j] < 0)
  66.             {
  67.                 negativeNumbersInIteration++;
  68.                 //printf("Negative number: %i, i: %i, j: %i\n", arr[i][j], i, j);
  69.             }
  70.        
  71.         if (negativeNumbersInIteration >= numbersAmount)
  72.         {
  73.             //printf("Column: %i, negative numbers: %i\n", j, negativeNumbersInIteration);
  74.             move_column_to_end(arr, n, m, j);
  75.             count++;
  76.             j--;
  77.         }
  78.         //printf("-Column ended-\n");
  79.     }
  80.    
  81.     return count;
  82. }
  83.  
  84. int main()
  85. {
  86.     //Array initialization
  87.     int arrVer=7, arrHor=7;
  88.         int **arr = (int **)malloc(arrVer * sizeof(int *));
  89.  
  90.     for(int i = 0; i < arrVer; i++)
  91.         arr[i] = (int *)malloc(arrHor * sizeof(int));;
  92.  
  93.    
  94.     vvod(arr,arrVer,arrHor);
  95.     vivod(arr,arrVer,arrHor);
  96.     printf("=====\n");
  97.    
  98.     size_t strToRemove = remove_negative_numbers(arr, arrVer, arrHor, 3);
  99.     //move_column_to_end (arr, arrVer,arrHor)
  100.     for (int i = 0; i < arrVer; i++)
  101.         arr[i] = realloc(arr[i], arrHor - strToRemove);    
  102.     vivod(arr, arrVer, arrHor - strToRemove);
  103.    
  104.    
  105.     //Memory free
  106.     for(int i = 0; i < arrVer; i++)
  107.         free(arr[i]);
  108.  
  109.     free(arr);//
  110. }
Advertisement
Add Comment
Please, Sign In to add comment