Вопрос задан 18.01.2020 в 00:23. Предмет Информатика. Спрашивает Соколов Вася.

Магический, или волшебный, квадрат — это квадратная таблица NxN, заполненная N 2 числами таким

образом, что сумма чисел в каждой строке, каждом столбце и на обеих диагоналях одинакова. Задан двумерный массив размерностью NxN. Определить, является ли он магическим квадратом. Составить блок схему, описание решения и программу на Паскаль
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Фирсова Оля.
Программа для решения поставленной задачи - в прилагаемом файле. Отмечу, что программа далеко не оптимальная. Например, совсем не обязательно искать все суммы. Если хотя бы одна не совпала с предыдущими, то вычисления можно закончить. В комментарии в начале программы дан пример магического квадрата для проверки.
0 0
Отвечает Мещеряков Георгий.
Var
  i,j,n:integer;
  m: array[1..10,1..10] of integer;
  flag:boolean;
  sum: array[0..1] of longint;
 begin
  readln(n);
  flag:=true;
  for i:=1 to n do
   begin
    for j:=1 to n do
     read(m[i,j]);
    readln;
   end;
     //Проверяем строки
  i:=1;
  for j:=1 to n do
      sum[i mod 2]:=sum[i mod 2]+m[i,j];
  while ((i<n) and flag) do
    begin
     i:=i+1;
     for j:=1 to n do
      sum[i mod 2]:=sum[i mod 2]+m[i,j];
     if sum[0]<>sum[1] then flag:=false;
     sum[(i+1) mod 2]:=0;
    end;
    //Проверяем столбцы
  sum[0]:=0;
  sum[1]:=0;
  j:=1;
  for i:=1 to n do
      sum[j mod 2]:=sum[j mod 2]+m[i,j];
  while ((j<n) and flag) do
    begin
     j:=j+1;
     for i:=1 to n do
      sum[j mod 2]:=sum[j mod 2]+m[i,j];
     if sum[0]<>sum[1] then flag:=false;
     sum[(j+1) mod 2]:=0;
    end;
  sum[0]:=0;
  sum[1]:=0;
  j:=1;
  for i:=1 to n do
   begin
    sum[0]:=sum[0]+m[i,j];
    sum[1]:=sum[1]+m[n-i+1,j];
    j:=j+1;
   end;
  if  sum[0]<>sum[1] then flag:=false;
  if flag then writeln('Магический');
 end.
0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Магический квадрат, или волшебный квадрат, это квадратная таблица размером NxN, где каждая ячейка заполнена числом, таким образом, что сумма чисел в каждой строке, каждом столбце и на обеих диагоналях одинакова. Вам нужно определить, является ли заданный двумерный массив размером NxN магическим квадратом.

Блок-схема решения:

1. Создать переменную `sum` и инициализировать ее нулем. 2. Проверить, что все строки, столбцы и диагонали имеют одинаковую сумму. 3. Если условие выполняется, то массив является магическим квадратом. В противном случае, массив не является магическим квадратом.

Описание решения:

Для определения, является ли заданный двумерный массив магическим квадратом, мы должны проверить, что сумма чисел в каждой строке, каждом столбце и на обеих диагоналях одинакова.

Мы можем использовать следующий алгоритм для проверки:

1. Создаем переменную `sum` и инициализируем ее нулем. 2. Перебираем все строки и столбцы массива и добавляем числа в переменную `sum`. 3. Проверяем, что сумма чисел в каждой строке и столбце равна `sum`. 4. Проверяем, что сумма чисел на главной и побочной диагоналях равна `sum`. 5. Если все условия выполняются, то массив является магическим квадратом. В противном случае, массив не является магическим квадратом.

Программа на Паскаль:

```pascal program MagicSquare;

const N = 3; // Размерность массива NxN

type MagicSquareArray = array[1..N, 1..N] of Integer;

function IsMagicSquare(arr: MagicSquareArray): Boolean; var i, j, sum: Integer; begin sum := 0; // Проверка суммы чисел в каждой строке for i := 1 to N do begin sum := 0; for j := 1 to N do sum := sum + arr[i, j]; if sum <> N * (N * N + 1) div 2 then begin IsMagicSquare := False; Exit; end; end; // Проверка суммы чисел в каждом столбце for j := 1 to N do begin sum := 0; for i := 1 to N do sum := sum + arr[i, j]; if sum <> N * (N * N + 1) div 2 then begin IsMagicSquare := False; Exit; end; end; // Проверка суммы чисел на главной диагонали sum := 0; for i := 1 to N do sum := sum + arr[i, i]; if sum <> N * (N * N + 1) div 2 then begin IsMagicSquare := False; Exit; end; // Проверка суммы чисел на побочной диагонали sum := 0; for i := 1 to N do sum := sum + arr[i, N - i + 1]; if sum <> N * (N * N + 1) div 2 then begin IsMagicSquare := False; Exit; end; IsMagicSquare := True; end;

var square: MagicSquareArray; i, j: Integer; begin // Заполнение массива for i := 1 to N do for j := 1 to N do begin Write('Введите число для ячейки [', i, ', ', j, ']: '); ReadLn(square[i, j]); end; // Проверка, является ли массив магическим квадратом if IsMagicSquare(square) then WriteLn('Данный массив является магическим квадратом.') else WriteLn('Данный массив не является магическим квадратом.'); end. ```

Программа запрашивает у пользователя числа для заполнения ячеек массива размером NxN. Затем она вызывает функцию `IsMagicSquare`, которая проверяет, является ли массив магическим квадратом. Результат проверки выводится на экран.

Примечание: В приведенной программе размерность массива `N` задана константой и равна 3. Вы можете изменить значение константы `N` в соответствии с вашими требованиями.

0 0

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос