Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- /**
- Динамическая матрица.
- Задача 7.
- Удалить строку с максимальным количеством отрицательных элементов. Если есть несколько - удалить первую из них.
- **/
- //Создание матрицы случайных чисел
- void randomMatrix(int** matrix, int rowLength, int columnLength);
- //Вывод матрицы
- void printMatrix(int** matrix, int rowLength, int columnLength);
- //Счётчик количества отрицательных чисел в данной строке
- int negativeNumbersCounter(int* row, int rowLength);
- //Нахождение максимальной строки (возвращается её индекс)
- int maxNegativeNumbersRow(int** matrix, int rowLength, int columnLength);
- //Удаляем строку
- void deleteRow(int** matrix, int columnLength, int indexOfRow);
- int main()
- {
- srand(time(NULL));
- int** matrix;
- int rowLength, columnLength, maxNegativeRow;
- printf("Enter length of column: "); //Длина столбца определяет количество строк в матрице
- scanf("%d", &columnLength);
- matrix = new int*[columnLength];
- printf("Enter length of row: ");
- scanf("%d", &rowLength);
- for(int i = 0; i < columnLength; i++) matrix[i] = new int[rowLength];
- //Инициализируем и выводим матрицу
- randomMatrix(matrix, rowLength, columnLength);
- printMatrix(matrix, rowLength, columnLength);
- maxNegativeRow = maxNegativeNumbersRow(matrix, rowLength, columnLength);
- printf("\nIndex of row with max number of negative numbers is %d, now we delete this row\n", maxNegativeRow);
- deleteRow(matrix, columnLength, maxNegativeRow);
- columnLength--;
- //Выводим матрицу во второй раз с удалённой строкой
- printMatrix(matrix, rowLength, columnLength);
- //Возвращаем память
- for(int i = 0; i < rowLength; i++) delete [] matrix[i];
- delete [] matrix;
- return 0;
- }
- void randomMatrix(int** matrix, int rowLength, int columnLength)
- {
- for(int i = 0; i < columnLength; i++)
- {
- for(int j = 0; j < rowLength; j++) matrix[i][j] = (rand() - RAND_MAX/2)%10;
- }
- }
- void printMatrix(int** matrix, int rowLength, int columnLength)
- {
- for(int i = 0; i < columnLength; i++)
- {
- printf("\n");
- for(int j = 0; j < rowLength; j++)
- {
- if(matrix[i][j] >= 0) printf("[ "); //Выравниваем табличку для более понятного вида
- else printf("[");
- printf("%d]", matrix[i][j]);
- }
- }
- printf("\n");
- }
- int negativeNumbersCount(int* row, int rowLength)
- {
- int negativeNumbersCounter = 0;
- for(int i = 0; i < rowLength; i++)
- {
- if(row[i] < 0) negativeNumbersCounter++;
- }
- return negativeNumbersCounter;
- }
- int maxNegativeNumbersRow(int** matrix, int rowLength, int columnLength)
- {
- //Переменные для хранения индекса нужной строки и количества отрицательных элементов в ней
- int maxNegativeRow = 0, maxNegativeNumbers = negativeNumbersCount(matrix[0], rowLength);
- int currentNegativeNumbers; //Счётчик для текущец итерации цикла
- for(int i = 1; i < columnLength; i++)
- {
- currentNegativeNumbers = negativeNumbersCount(matrix[i], rowLength);
- if(currentNegativeNumbers > maxNegativeNumbers) maxNegativeNumbers = currentNegativeNumbers, maxNegativeRow = i;
- }
- return maxNegativeRow;
- }
- void deleteRow(int** matrix, int columnLength, int indexOfRow)
- {
- delete[] matrix[indexOfRow];
- for(int i = indexOfRow; i < columnLength - 1; i++)
- {
- matrix[i] = matrix[i + 1]; // Сдвигаем указатели
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement