Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 05.12.2019
Сообщений: 2
1

Проверка массива на магический квадрат

22.03.2020, 16:44. Показов 719. Ответов 3

Помогите пожалуйста сделать так, что бы программа заработала. Нужно создать квадратный массив и проверить: является ли он магическим (сумма чисел по горизонтали, вертикали и диагонали одинакова). Вот мой код и ошибка(ошибка в операторе if):
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
program pr10;
const
n = 4;
var
kvad: array[1..n,1..n] of integer;
i, j: integer;
begin
for i:=1 to 4 do
begin
 for j:=1 to 4 do
 begin
  write('Vvedite element masivu');
  readln(kvad[i, j])
 end;
end;
  if kvad[1,1]+kvad[2,1]+kvad[3,1]+kvad[4,1]=
      kvad[1,1]+kvad[1,2]+kvad[1,3]+kvad[1,4]=
      kvad[1,1]+kvad[2,2]+kvad[3,3]+kvad[4,4] then
      writeln('Magichniy kvadrat').
      else;
      writeln('Kvadrat');
end.
Операция '=' не применима к типам boolean и integer

Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2020, 16:44
Ответы с готовыми решениями:

Магический квадрат
Постройте «магический» квадрат (это значит, что суммы чисел во всех ее вертикалях, всех...

Магический квадрат Паркера
Есть программа, составляющая магические квадраты uses crt; Const mn = 16; Var p:...

Как написать игру Магический квадрат на Паскаль
Как написать игру Магический квадрат на Паскаль (В виде игры именно так,что бы пользователь вводил...

Образуют ли элементы двумерного массива магический квадрат
Составить программу, проверяющую, образуют ли элементы двумерного массива магический квадрат (в...

__________________
3
1550 / 881 / 377
Регистрация: 07.04.2017
Сообщений: 3,543
22.03.2020, 16:51 2
В паскале синтаксис a=b=c=d не работает. Если так написать - вы сначала сравниваете a=b, что даёт в результате значение типа boolean. Потом вы сравниваете этот результат с =c. Сравнивать boolean и integer на равенство нельзя, об этом вам и говорит ошибка.

Сохраните каждое из 4 значений в отдельную переменную (чтоб потом 2 раза одно и то же не считать) и затем сравнивайте как то типа (a=b) and (b=c) and (c=d).
1
4314 / 2084 / 2110
Регистрация: 10.12.2014
Сообщений: 8,058
23.03.2020, 05:31 3
trevertor23, если вы используете константы
Pascal
2
3
const
n = 4;
то не нужно пользоваться магическими числами
Pascal
8
9
10
11
for i:=1 to 4 do
begin
 for j:=1 to 4 do
 begin
или наоборот!

Даже если предположить, что вы правильно написали условие, то проверяете вы всего лишь первую колонку, первую строку и главную диагональ.
А как же остальные три строки и три колонки с побочной диагональю?
Вероятно нужно добавить еще проверок!
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
begin
  var a : array[1..4, 1..4] of Integer;
  for var row := 1 to 4 do
    for var col := 1 to 4 do
      a[row, col] := ReadInteger($'[{row}, {col}] =');
  var sum := a[1,1] + a[1,2] + a[1,3] + a[1,4];
  // проверяем оставшиеся три строки на равенство первой
  if (sum = a[2,1] + a[2,2] + a[2,3] + a[2,4]) and
     (sum = a[3,1] + a[3,2] + a[3,3] + a[3,4]) and
     (sum = a[4,1] + a[4,2] + a[4,3] + a[4,4]) and
     // колонки
     (sum = a[1,1] + a[2,1] + a[3,1] + a[4,1]) and
     (sum = a[1,2] + a[2,2] + a[3,2] + a[4,2]) and
     (sum = a[1,3] + a[2,3] + a[3,3] + a[4,3]) and
     (sum = a[1,4] + a[2,4] + a[3,4] + a[4,4]) and
     // диагонали
     (sum = a[1,1] + a[2,2] + a[3,3] + a[4,4]) and
     (sum = a[1,4] + a[2,3] + a[3,2] + a[4,1])
  then 'Магический квадрат'.Print else 'Не магический квадрат'.Print;
end.
Добавлено через 3 минуты
P.S. На сколько мне не изменяет память, в магическом квадрате ещё не должно быть повторяющихся цифр, а присутствующие должны быть натуральными из множества 1…n².
На это тоже нужно делать проверку!
0
812 / 302 / 137
Регистрация: 23.03.2020
Сообщений: 791
25.03.2020, 15:03 4
Pascal
1
2
3
4
5
6
7
8
9
10
begin
  //var n:= 3; var a:=Matr(n, n, Arr(4,9,2,3,5,7,8,1,6)).Println;
  var n := ReadlnInteger('Введите размер квадратного массива n=');
  Println('Введите значения элементов матрицы через пробел. Всего', n*n);
  var a := ReadMatrInteger(n, n).Println;
  var (sumd1, sumd2) := (0, 0);
  For var f := 0 to n-1 do begin sumd1 += a[f, f]; sumd2 += a[f, n-f-1]; end;
  if (a.Cols.Select(t -> t.Sum) + a.Rows.Select(t -> t.Sum) + Arr(sumd1) + Arr(sumd2)).Distinct.Count = 1
  then Println('Это магический квадрат') else Println('Никакой магии');
end.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.03.2020, 15:03

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Двумерные массивы. Проверить, образуют ли элементы двумерного массива магический квадрат
Тема: Двумерные массивы Составьте программу, проверяющую, образуют ли элементы двумерного массива...

Проверка матрицы на "магический квадрат"
Здравствуйте. Я только начинаю изучать Pascal и вообще программирование. Я поставил для себя цель,...

Задача. Магический/Не магический квадрат
Проверить, является ли заданная целочисленная матрица A(N, N) "магическим квадратом" (это значит,...

Магический квадрат
Только вернулся со второго тура районной олимпиады где занял второе место, вот одна из задач....

Магический квадрат
дана целая квадратная матрица n-порядка. Определить, являеться ли она магическим квадратом, т.е....

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.