Является ли данный двумерный массив магическим квадратом - Pascal

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

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

Помогите пожалуйста решить задачки на массив в паскале : 6-Выясните,является ли предложенный двумерный массив размером N*N магическим квадратом,т.е. массивом,суммы элементов которого по столбцам,по строкам и по обеим диагоналям равны. помогите пожалуста я новичёк пишите всю программу ..........заранее благодарю...........

Решение задачи: «Является ли данный двумерный массив магическим квадратом»

textual
Листинг программы
uses CRT;
const matr_max    = 50;
var matrica       : array[1..matr_max, 1..matr_max] of integer;
    matrica_count : integer;
    q, r, c, t    : integer;
    bMagicSquare  : Boolean;
 
begin
  ClrScr;
  Write('Введите размерность матрицы (N<=', matr_max,'): '); ReadLn(matrica_count);
  if matrica_count > matr_max then matrica_count := matr_max;
 
  { забиваем рандомными значениями}
  Randomize;
  WriteLn('НАША МАТРИЦА');
  for r := 1 to matrica_count do
  begin
    for c := 1 to matrica_count do
    begin
      matrica[r, c] := random(20)+1;
      Write(matrica[r, c]:3, '  ');
    end;
    WriteLn;
  end;
 
  bMagicSquare := True;
 
  { считаем сумму элементов первой строки }
  t := 0;
  for c := 1 to matrica_count do
    t := t + matrica[1, c];
 
  { работаем по строкам }
  for r := 2 to matrica_count do
  begin
    q := 0;
 
    for c := 1 to matrica_count do
      q := q + matrica[r, c];
 
    if q<>t then
    begin
      bMagicSquare := False;
      break;
    end;
  end;
 
 
  if bMagicSquare then
  begin
    { работаем по столбцам }
    for r := 1 to matrica_count do
    begin
      q := 0;
 
      for c := 1 to matrica_count do
        q := q + matrica[c, r];
 
      if q<>t then
      begin
        bMagicSquare := False;
        break;
      end;
    end;
 
    if bMagicSquare then
    begin
      {проверяем диагонали}
 
      {главная диагональ}
      q := 0;
      for c := 1 to matrica_count do
        q := q + matrica[c, r];
 
      if q=t then
      begin
        {вторая диагональ}
        r:=1;
        c:=matrica_count;
        q:=0;
        while r<=matrica_count do
        begin
          q:=q+matrica[r,c];
          Inc(r);
          Dec(c);
        end;
 
        if q<>t then
          bMagicSquare := False;
      end;
    end;
  end;
 
 
  { выводим результаты }
  if bMagicSquare then
    WriteLn('Матрица является магическим квадратом.')
  else
    WriteLn('Матрица НЕ является магическим квадратом.');
 
  WriteLn;
  Write('Для продолжения нажмите любую кнопку...');
  ReadLn;
end.

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

  1. Объявлены переменные: — matr_max — максимальная размерность матрицы (константа) — matrica — двумерный массив для хранения чисел — matrica_count — количество строк в матрице (вводится пользователем) — q, r, c, t — вспомогательные переменные для выполнения различных операций — bMagicSquare — булевая переменная, определяющая является ли матрица магическим квадратом
  2. Заполнение матрицы случайными числами от 1 до 20.
  3. Проверка суммы элементов первой строки матрицы.
  4. Проверка равенства сумм элементов каждой последующей строки матрицы сумме элементов первой строки. Если суммы не равны, то матрица не является магическим квадратом.
  5. Проверка равенства сумм элементов каждого столбца матрицы сумме элементов первой строки. Если суммы не равны, то матрица не является магическим квадратом.
  6. Проверка главной и второй диагоналей матрицы. Если суммы не равны, то матрица не является магическим квадратом.
  7. Вывод сообщения о том, является ли матрица магическим квадратом или нет.
  8. Завершение работы программы и ожидание нажатия кнопки для продолжения.

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


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

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

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