Симметричная матрица - Pascal ABC (12683)
Формулировка задачи:
Написать программу, которая проверяет, является ли квадратная матрица симметричной относительно главной диагонали.
Входные данные
В первой строке записаны через пробел размер квадратной матрицы N (количество строк равно количеству столбцов) ( 1 ≤ N ≤ 100 ). В следующих N строках записаны строки матрицы, в каждой – по N натуральных чисел, разделённых пробелами.
Выходные данные
Программа должна вывести слово 'YES', если матрица симметричная, и слово 'NO', если матрица несимметричная.
Решение задачи: «Симметричная матрица»
textual
Листинг программы
var f:text; n,i,j,k:integer; a:array[1..100,1..10] of integer; begin assign(f,'input.txt');//файл в папке с программой reset(f); readln(f,n); for i:=1 to n do for j:=1 to n do read(f,a[i,j]); close(f); k:=0; i:=2; while (i<=n)and(k=0) do begin j:=1; while(j<i)and(k=0) do if a[i,j]<>a[j,i] then k:=1 else j:=j+1; if k=0 then i:=i+1; end; assign(f,'output.txt');//файл результата будет там же rewrite(f); if k=0 then writeln(f,'YES') else writeln(f,'NO'); close(f); write('Файл input прочитан, результат записан ф файл output')//можно убрать end.
Объяснение кода листинга программы
- Создается переменная f типа text, которая представляет собой файловый дескриптор для чтения и записи файлов.
- Задаются три переменные: n, i, j типа integer. Переменная n будет использоваться для ограничения внешнего цикла, переменные i и j будут использоваться для внутреннего цикла.
- Создается переменная a типа array[1..100,1..10] of integer. Эта переменная представляет собой матрицу размером 100x10. Она будет использоваться для хранения чисел, которые будут читаться из файла.
- Выполняется операция assign(f,'input.txt'), которая устанавливает файловый дескриптор f на файл 'input.txt' в текущей директории.
- Выполняется операция reset(f), которая подготавливает файловый дескриптор f для чтения.
- Выполняется операция readln(f,n), которая читает n строк из файла 'input.txt' и сохраняет их в переменную n.
- Начинается внешний цикл for, который выполняется n раз. Каждая итерация этого цикла будет обрабатывать одну строку из файла 'input.txt'.
- Начинается внутренний цикл for, который выполняется n-1 раз (так как i и j начинаются с 1, а не с 0).
- Внутри внутреннего цикла проверяется условие a[i,j]<>a[j,i]. Если это условие истинно, то переменная k устанавливается в 1. Это означает, что текущая строка не была прочитана корректно (т.е. она содержит разные числа в разных позициях). В этом случае внутренний цикл прерывается и переходит к следующей итерации внешнего цикла.
- Если условие a[i,j]<>a[j,i] ложно, то переменная j увеличивается на 1. Это означает, что текущая строка была прочитана корректно. В этом случае внутренний цикл продолжается.
- Если переменная k равна 0, то переменная i увеличивается на 1. Это означает, что все строки были прочитаны корректно. В этом случае внутренний цикл прерывается и переходит к следующей итерации внешнего цикла.
- Если переменная k не равна 0, то внутренний цикл повторяется.
- Выполняется операция close(f), которая закрывает файловый дескриптор f.
- Выполняется операция assign(f,'output.txt'), которая устанавливает файловый дескриптор f на файл 'output.txt' в текущей директории.
- Выполняется операция rewrite(f), которая перезаписывает содержимое файла 'output.txt'.
- Выполняется операция if k=0 then writeln(f,'YES') else writeln(f,'NO'), которая выводит результат проверки на корректность чтения строк из файла 'input.txt'.
- Выполняется операция close(f), которая закрывает файловый дескриптор f.
- Выводится сообщение 'Файл input прочитан, результат записан ф файл output', которое является комментарием и не требует выполнения.
- Код завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д