Илья Кривенков
S:22:36:51 03.12
R:00:00:00 00.00
[ 👨💻 ]: Как работает код:
1. EPSILON: Определена константа 1e-9, которая используется для сравнения вещественных чисел. Числа a и b считаются равными, если std::fabs(a - b) < EPSILON. Аналогично, число a считается нулем, если std::fabs(a) < EPSILON.
2. printMatrix: Вспомогательная функция для аккуратного вывода матрицы на экран.
3. findRowsWithZeroes:
* Итерирует по каждой строке матрицы.
* Для каждой строки итерирует по её элементам.
* Если найден элемент, который близок к нулю (с учетом EPSILON), то флаг zeroFoundInRow устанавливается в true, и внутренний цикл прерывается (нет смысла искать дальше в этой строке).
* Если флаг zeroFoundInRow установлен, индекс текущей строки добавляется в результирующий вектор.
* Возвращает вектор индексов строк.
4. findColumnWithLongestSeries:
* Обрабатывает крайние случаи пустой матрицы или матрицы из одной строки.
* maxOverallSeriesLength хранит максимальную длину серии, найденную во всех столбцах.
* targetColumnIndex хранит индекс столбца, в котором была найдена эта максимальная серия.
* Внешний цикл итерирует по каждому столбцу (j).
* Внутренний цикл итерирует по элементам внутри текущего столбца, начиная со второго элемента (с индексом 1).
* Сравнивает текущий элемент matrix[i][j] с предыдущим matrix[i-1][j] с учетом EPSILON.
* Если они равны, currentSeriesLength увеличивается.
* Если не равны, серия прерывается: maxSeriesLengthInColumn обновляется, если currentSeriesLength была больше, и currentSeriesLength сбрасывается на 1.
* Важно после завершения внутреннего цикла также обновить maxSeriesLengthInColumn с учетом *последней* серии в столбце, так как она могла не прерваться.
* После обработки всего столбца, maxOverallSeriesLength и targetColumnIndex обновляются, если в текущем столбце найдена серия длиннее, чем до этого.
* Возвращает индекс столбца или -1 в случае ошибки (пустая матрица).
5. main:
* Запрашивает у пользователя размеры матрицы.
* Проверяет размеры на корректность.
* Создает std::vector<std::vector<double>> для хранения матрицы.
* Запрашивает ввод элементов матрицы.
* Вызывает функции findRowsWithZeroes и findColumnWithLongestSeries.
* Выводит результаты в читаемом формате.