Проверка матрицы на "магический квадрат" - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Я только начинаю изучать Pascal и вообще программирование. Я поставил для себя цель, понять все действия данной программы. Но я с самого начала начал путаться в переменных, то бишь за что, какая переменная отвечает. Не могли вы прокомментировать следующий код (переменные и действия), чтобы хоть как то понять смысл программы. Язык: Free Pascal Код программы:
PROGRAM my_project;
 
  Uses crt;
 
  Var
 
    a:array[1..10,1..10] of integer;
 
    i,j,n,s,w,k,q:integer;
 
begin
 
  clrscr;
 
  write('Введите размерность квадрата: ');
  read(n);
 
  for i:=1 to n do
 
    for j:=1 to n do
 
      begin
 
        write('A(',j,',',i,') = ');
        read(a[j,i]);
 
      end;
 
    s:=0;
 
    for i:=1 to n do
 
      s:=s+a[1,i];
 
    k:=1;
 
    for i:=1 to n do
 
      begin
 
        w:=0; q:=0;
 
        for j:=1 to n do
 
          begin
 
            w:=w+a[j,i];
 
            q:=q+a[i,j];
 
          end;
 
        if (s<>w) or (q<>s) then k:=0;
 
      end;
 
    if k=0 then write('Квадрат не магический!')
 
    else write('Квадрат магический!!!');
 
    readln;
    readln;
 
end.

Решение задачи: «Проверка матрицы на "магический квадрат"»

textual
Листинг программы
PROGRAM my_project;//название программы, можно убрать, не нужно
Uses crt;//модуль для работы с экраном и клавиатурой
//здесь используется для очистки экрана clrscr
Var a:array[1..10,1..10] of integer; //переменные, таблица = массив до 10х10
    i,j,n,s,w,k,q,d:integer; //размеры и счетчики (добавил d-2я диагональ)
begin
clrscr;
write('Введите размерность квадрата: ');
read(n);
for i:=1 to n do
for j:=1 to n do
 begin
  write('A(',j,',',i,') = ');
  read(a[j,i]);
 end;
s:=0;//сумма главной диагонали
for i:=1 to n do
s:=s+a[1,i];
k:=1; //фиксатор совпадения сумм строк, столбцов и 2х диагоналей
for i:=1 to n do
 begin
  w:=0; q:=0;//сумма в строке и в столбце
  for j:=1 to n do
   begin
    w:=w+a[j,i];//считаем столбец
    q:=q+a[i,j];//строку
   end;
  if (s<>w) or (q<>s) then k:=0;//если что-то не совпало
 end;
//нужно еще вторую диагональ проверить
d:=0;
for i:=1 to n do
d:=d+a[i,n-i+1];
if d<>s then k:=0;
if k=0 then write('Квадрат не магический!')
else write('Квадрат магический!!!');
readln
end.

Объяснение кода листинга программы

  1. Объявление переменных:
    • a: массив для хранения значений матрицы
    • i, j, n, s, w, k, q, d: переменные для работы с матрицей и проверки ее свойств
  2. Ввод размера матрицы
  3. Заполнение матрицы значениями
  4. Расчет суммы главной диагонали
  5. Проверка совпадения сумм строк, столбцов и главной диагонали
  6. Расчет суммы второй диагонали
  7. Проверка совпадения суммы второй диагонали и главной суммы
  8. Вывод результата проверки матрицы
  9. Чтение символа для завершения работы программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы