#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main() {
// Включаем поддержку русского языка для консоли
setlocale(LC_ALL, "");
int n, i, j;
FILE *file_out;
printf("--- Программа модификации диагоналей матрицы ---\n");
printf("Введите размер квадратной матрицы (n): ");
// Считываем размер n
if (scanf("%d", &n) != 1 || n <= 0) {
printf("Ошибка: неверный размер матрицы.\n");
return 1;
}
// 1. Динамическое выделение памяти для матрицы (для гибкости)
int **matrix = (int **)malloc(n * sizeof(int *));
for (i = 0; i < n; i++) {
matrix[i] = (int *)malloc(n * sizeof(int));
}
// 2. Заполнение матрицы тестовыми данными (для наглядности)
// Например, порядковыми номерами от 1 до n*n
int count = 1;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
matrix[i][j] = count++;
}
}
// 3. АЛГОРИТМ ОБНУЛЕНИЯ ДИАГОНАЛЕЙ
printf("\nМодификация данных...\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
// Условие главной диагонали: i == j
// Условие побочной диагонали: j == (n - 1 - i)
if (i == j || j == (n - 1 - i)) {
matrix[i][j] = 0; // Ставим ноль
}
}
}
// 4. Открытие файла для записи результата (text.txt)
file_out = fopen("text.txt", "w");
if (file_out == NULL) {
printf("Ошибка при создании файла text.txt\n");
// Очистка памяти перед выходом
for (i = 0; i < n; i++) free(matrix[i]);
free(matrix);
return 1;
}
// 5. Запись модифицированной матрицы в файл
fprintf(file_out, "Матрица %d x %d с обнуленными диагоналями:\n", n, n);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
// Записываем число с отступом (ширина 4 символа)
fprintf(file_out, "%4d", matrix[i][j]);
}
// Переход на новую строку после каждой строки матрицы
fprintf(file_out, "\n");
}
// 6. Очистка ресурсов и закрытие потоков
fclose(file_out);
// Освобождение динамической памяти
for (i = 0; i < n; i++) {
free(matrix[i]);
}
free(matrix);
printf("Операция завершена успешно. Результат записан в text.txt.\n");
return 0;
}