Advertisement
Guest User

Untitled

a guest
Dec 15th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.00 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. /**
  6.  
  7. Динамическая матрица.
  8. Задача 7.
  9. Удалить строку с максимальным количеством отрицательных элементов. Если есть несколько - удалить первую из них.
  10.  
  11. **/
  12. //Создание матрицы случайных чисел
  13. void  randomMatrix(int** matrix, int rowLength, int columnLength);
  14. //Вывод матрицы
  15. void printMatrix(int** matrix, int rowLength, int columnLength);
  16. //Счётчик количества отрицательных чисел в данной строке
  17. int negativeNumbersCounter(int* row, int rowLength);
  18. //Нахождение максимальной строки (возвращается её индекс)
  19. int maxNegativeNumbersRow(int** matrix, int rowLength, int columnLength);
  20. //Удаляем строку
  21. void deleteRow(int** matrix, int columnLength, int indexOfRow);
  22.  
  23.  
  24. int main()
  25. {
  26.     srand(time(NULL));
  27.     int** matrix;
  28.     int rowLength, columnLength, maxNegativeRow;
  29.  
  30.     printf("Enter length of column: "); //Длина столбца определяет количество строк в матрице
  31.     scanf("%d", &columnLength);
  32.     matrix = new int*[columnLength];
  33.     printf("Enter length of row: ");
  34.     scanf("%d", &rowLength);
  35.     for(int i = 0; i < columnLength; i++) matrix[i] = new int[rowLength];
  36.     //Инициализируем и выводим матрицу
  37.     randomMatrix(matrix, rowLength, columnLength);
  38.     printMatrix(matrix, rowLength, columnLength);
  39.  
  40.     maxNegativeRow = maxNegativeNumbersRow(matrix, rowLength, columnLength);
  41.  
  42.     printf("\nIndex of row with max number of negative numbers is %d, now we delete this row\n", maxNegativeRow);
  43.     deleteRow(matrix, columnLength, maxNegativeRow);
  44.     columnLength--;
  45.     //Выводим матрицу во второй раз с удалённой строкой
  46.     printMatrix(matrix, rowLength, columnLength);
  47.     //Возвращаем память
  48.     for(int i = 0; i < rowLength; i++) delete [] matrix[i];
  49.     delete [] matrix;
  50.     return 0;
  51. }
  52.  
  53. void randomMatrix(int** matrix, int rowLength, int columnLength)
  54. {
  55.     for(int i = 0; i < columnLength; i++)
  56.     {
  57.         for(int j = 0; j < rowLength; j++) matrix[i][j] = (rand() - RAND_MAX/2)%10;
  58.     }
  59. }
  60.  
  61. void printMatrix(int** matrix, int rowLength, int columnLength)
  62. {
  63.     for(int i = 0; i < columnLength; i++)
  64.     {
  65.         printf("\n");
  66.         for(int j = 0; j < rowLength; j++)
  67.         {
  68.             if(matrix[i][j] >= 0) printf("[ "); //Выравниваем табличку для более понятного вида
  69.             else printf("[");
  70.             printf("%d]", matrix[i][j]);
  71.         }
  72.     }
  73.     printf("\n");
  74. }
  75.  
  76. int negativeNumbersCount(int* row, int rowLength)
  77. {
  78.     int negativeNumbersCounter = 0;
  79.     for(int i = 0; i < rowLength; i++)
  80.     {
  81.         if(row[i] < 0) negativeNumbersCounter++;
  82.     }
  83.     return negativeNumbersCounter;
  84. }
  85.  
  86. int maxNegativeNumbersRow(int** matrix, int rowLength, int columnLength)
  87. {
  88.     //Переменные для хранения индекса нужной строки и количества отрицательных элементов в ней
  89.     int maxNegativeRow = 0, maxNegativeNumbers = negativeNumbersCount(matrix[0], rowLength);
  90.     int currentNegativeNumbers; //Счётчик для текущец итерации цикла
  91.     for(int i = 1; i < columnLength; i++)
  92.     {
  93.         currentNegativeNumbers = negativeNumbersCount(matrix[i], rowLength);
  94.         if(currentNegativeNumbers > maxNegativeNumbers) maxNegativeNumbers = currentNegativeNumbers, maxNegativeRow = i;
  95.     }
  96.     return maxNegativeRow;
  97. }
  98.  
  99. void deleteRow(int** matrix, int columnLength, int indexOfRow)
  100. {
  101.     delete[] matrix[indexOfRow];
  102.     for(int i = indexOfRow; i < columnLength - 1; i++)
  103.     {
  104.         matrix[i] = matrix[i + 1]; // Сдвигаем указатели
  105.     }
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement