С Новым годом! Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 15.11.2010
Сообщений: 9
1

Магический квадрат

26.11.2010, 00:59. Показов 2243. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Определить, является ли заданная целая квадратная матрица 9-го порядка магическим квадратом, т. е. такой, в которой суммы элементов во всех строках и столбцах одинаковы.

В универе дали задание написать програму, но я плохо разбираюсь в матрицах( Помогите плз написать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.11.2010, 00:59
Ответы с готовыми решениями:

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

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

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

Магический квадрат
Дана матрица 3x3. Определить является ли матрица магическим квадратом. Кто может помочь решить ?...

3
71 / 57 / 34
Регистрация: 28.04.2010
Сообщений: 197
26.11.2010, 01:14 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
uses crt;
var ar: array [1..9, 1..9] of integer;
    i, j: integer;
    is_magic: boolean;
    sum : array [1..9] of integer;
begin
randomize; clrscr;
is_magic := true;
  for i := 1 to 9 do begin
    for j := 1 to 9 do begin
    ar[i, j] := random (3);
    write (ar[i, j]:2);
    sum [j] := 0;
    end;
  writeln;
  end;
writeln;
  for i := 1 to 9 do begin
    for j := 1 to 9 do begin
    sum [i] := sum [i] + ar[i, j];
    end;
  write (sum[i]:3);
  end;
for i := 1 to 8 do if (sum [i] <> sum [i + 1]) then is_magic := false;
for i := 1 to 9 do sum [i] := 0;
writeln;
  for i := 1 to 9 do begin
    for j := 1 to 9 do begin
    sum [i] := sum [i] + ar[j, i];
    end;
  write (sum[i]:3);
  end;
for i := 1 to 8 do if (sum [i] <> sum [i + 1]) then is_magic := false;
writeln;
writeln;
if (is_magic) then writeln ('Cube is magic')
else writeln ('Cube is not magic');
readln;
end.
0
189 / 185 / 54
Регистрация: 23.10.2010
Сообщений: 1,336
26.11.2010, 01:23 3
Описание, объявление и заполнение массивов (матриц)
0
56 / 56 / 20
Регистрация: 07.02.2011
Сообщений: 159
07.02.2011, 21:48 4
program test;
uses
crt;
const
n = 2; {размерность массива}
type
Tarr = array[1..n, 1..n] of integer; {тип квадратной матрицы}
{==========================================}
{печатаем все элементы матрицы проходя по колонкам и спускаясь последовательно по строкам}
procedure printArr(x : Tarr; s : string);
var
i, j : byte;
begin
writeln(s);
for i := 1 to n do
begin
for j := 1 to n do
begin
write(x[i, j]:4); {масштаб равен 4, этого достаточно, поскольку максимальная длина составляет вообще 1 символ}
end;
writeln;
end;
end;
{==========================================}
{заполняем стартовый массив случайными числами, желательно взять небольшой диапазон, поскольку иначе будут огромные проблемы с нахождением
магического квадрата}
procedure insertDataByPC(var x : Tarr);
var
i, j : byte;
begin
for i := 1 to n do
begin
for j := 1 to n do
begin
x[i, j] := random(2) + 1; {хотите садо мазо, поставьте здесь хотя бы random(20)}
end;
end;
end;
{==========================================}
{функция, возвращающая истину, если поданный ей парамет является магическим числом, иначе ложь}
function magic(x : Tarr) : boolean;
var
number : integer; {хранит то самое число, с которым предстоит сравнить сумму каждой строки и колонки матрицы}
i, j : byte;
tmp : integer; {отвечает за сумму элементов текущей строки / столбца}
b : boolean; {если истина, значит матрица - магическое число}
begin
b := true; {предполагаем изначально, что матрица магическая и смотрим как программа быстро развивает это убежденеие(обычно, но не всегда}
number := 0;
for i := 1 to n do
begin
number := number + x[1, i]; {нужно от чего отталкиваться при расчетах. Почему бы не взять сумму элементов первой строки}
end;

for i := 2 to n do
begin
tmp := 0;
for j := 1 to n do
begin
tmp := tmp + x[i, j];
end;
if(tmp <> number) then {если сумма i - ой строки матрицы не равна number, значит это уже не магическая матрица. Все логично.}
begin
b := false;
break; {заканчиваем расчет, поскольку смысла нет никакогов}
end;
end;

for i := 1 to n do
begin
tmp := 0;
for j := 1 to n do
begin
tmp := tmp + x[j, i];
end;
if(tmp <> number) then {если сумма j - ой колонки матрицы не равна number, значит это уже не магическая матрица. Все логично.}
begin
b := false;
break;
end;
end;

if(b = false) then
begin
magic := false; {возвращаем ложь, если это не магичесий квадрат иначе соот - но истину. Все просто.}
end
else
begin
magic := true;
end;
end;
{==========================================}
var
arr : Tarr;
begin
clrscr;

randomize;
insertDataByPC(arr);
textColor(red);
printArr(arr, 'Начальный массив имеет вид: ');
textColor(green);
if(magic(arr)) then
begin
writeln('Поздравляю! Данная матрица магический квадрат');
writeln('что честно говоря большая редкость');
end
else
begin
writeln('Это не магический квадрат');
end;
end;
readln;
end.

Добавлено через 1 минуту
только вот блок-схемы нет
0
07.02.2011, 21:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.02.2011, 21:48
Помогаю со студенческими работами здесь

Магический квадрат
Нужно определить, является ли матрица NxN магическим квадратом. Как описать главную диагональ я...

магический квадрат
написать программу, использующую подпрограмму, которая проверяет, является ли введенная матрица...

Построить магический квадрат
Написать программу, которая позволяет построить магический квадрат любой четности при 10&lt;=n&lt;=5

Построить магический квадрат порядка n
построить магический квадрат порядка n в pascal. чтоб по горизонтали по вертикали и по диагонали...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru