📘 О чем эта работа
В работе реализована утилита на C++ для пакетной обработки матриц, сохранённых в текстовом файле input.txt. Объектом является набор k матриц размерности n×m, задачей — идентификация квадратных матриц и замена элементов главной и побочной диагоналей на нули с последующей записью результатов в output.txt и выводом содержимого обоих файлов на экран.
📚 Что внутри
Документ содержит подробное описание алгоритма и полный листинг программы. Конкретные элементы содержимого:
- Функция readMatricesFromFile: чтение матриц из текстового файла в структуру std::vector<std::vector<std::vector<int>>>, корректная обработка пустых строк как разделителей;
- Функция printMatrixInfo и printMatrix: вывод номера матрицы, количества строк и столбцов, пометка о квадратности и печать содержимого;
- Функция processSquareMatrices: проверка квадратности (rows==cols) и замена элементов главной ([i][i]) и побочной ([i][n-i-1]) диагоналей на 0;
- Функция writeMatricesToFile: запись обработанных матриц в output.txt в том же текстовом формате с пустой строкой-разделителем;
- Полный листинг программы с обработкой исключений при открытии файлов и примером main, демонстрирующим последовательность действий;
- Блок‑схемы (рисунки 1–5) алгоритмов подпрограмм и основного процесса;
- Результаты тестирования: набор из семи матриц разной размерности (включая 1x1 и матрицы, разделённые несколькими пустыми строками), сравнение входного и выходного файлов, подтверждение корректности обработки квадрата и сохранения неквадратных матриц.
📊 Для кого подходит
Подходит студентам факультетов, связанных с программированием и прикладной информатикой, для выполнения лабораторных и практических заданий по курсу «Программирование на C++», а также для преподавателей как демонстрационный пример модульного кода и работы с файловым вводом‑выводом.
✨ Особенности
Работа подчёркивает модульный подход: каждая подзадача вынесена в отдельную функцию, что упрощает тестирование и дальнейшую доработку. Обращаем внимание на конкретные преимущества:
- Устойчивость к входному формату: пустые строки используются как разделители матриц, поддерживаются матрицы с различным числом столбцов в строках (разбор через istringstream);
- Обработка граничных случаев: матрицы 1x1 корректно превращаются в [[0]]; неквадратные матрицы остаются без изменений;
- Реализация исключений: проверка открытия файлов с бросанием runtime_error при ошибке;
- Полный пример тестирования: в тексте описаны тесты на семи матрицах и показаны результаты сравнения input.txt и output.txt;
- Листинг готов к компиляции в стандартном окружении C++ с минимальными зависимостями (iostream, fstream, sstream, vector).
❓ Частые вопросы
Подойдет ли для моего ВУЗа?
Структура отчёта соответствует стандартным требованиями: задание, ход выполнения, тестирование, выводы, список литературы и приложение с листингом.
Можно адаптировать?
Да. Функции из исходного кода легко модифицировать: изменить формат ввода/вывода, добавить проверку консистентности строк, логирование или расширить обработку диагоналей под иные правила.