Рефераты. Алгоритмы генерации магических квадратов

2. Отмеченные на шаге 1 диагональные элементы квадрата заполняют пропущенными целыми числами в порядке возрастания в направлении справа-налево и снизу-вверх. Недиагональные элементы в каждом подквадрате должны быть отмечены (например, символом $), а числа, приходящиеся на них должны быть пропущены. Результат заполнения диагональных элементов для квадрата 8-го порядка показан на следующем рисунке:

64

$

$

61

60

$

$

57

$

55

54

$

$

51

50

$

$

47

46

$

$

43

42

$

40

$

$

37

36

$

$

33

32

$

$

29

28

$

$

25

$

23

22

$

$

19

18

$

$

15

14

$

$

11

10

$

8

$

$

5

4

$

$

1

3. Квадраты с пропусками диагональных и недиагональных элементов, полученные на шагах 1 и 2, объединяются в общий квадрат, где целочисленные элементы подавляют метки # или $. Результат объединения для квадрата 8-го порядка показан на следующем рисунке:

64

02

03

61

60

06

07

57

09

55

54

12

13

51

50

16

17

47

46

20

21

43

42

24

40

26

27

37

36

30

31

33

32

34

35

29

28

38

39

25

41

23

22

44

45

19

18

48

49

15

14

52

53

11

10

56

8

58

59

5

4

62

63

1

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

2.3 Выводы

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

Глава 3. Программная реализация магических квадратов

Программная реализация основных магических квадратов основывается на уже известных словесных алгоритмах математиков и философов. Обычно это квадратная матрица, четная или нечетная. Также существует индивидуальный алгоритм заполнения каждого квадрата- или бесчисленного множества квадратов одного вида, но разных порядков. Рассмотрим некоторые из них.

3.1 Программная реализация квадратов нечетного порядка

Магические квадраты нечетного порядка можно построить с помощью метода французского геометра 17 в. А.де ла Лубера. Рассмотрим этот метод на примере квадрата 5-го порядка (рис. 3.1). Число 1 помещается в центральную клетку верхней строки. Все натуральные числа располагаются в естественном порядке циклически снизу вверх в клетках диагоналей справа налево. Дойдя до верхнего края квадрата (как в случае числа 1), продолжаем заполнять диагональ, начинающуюся от нижней клетки следующего столбца. Дойдя до правого края квадрата (число 3), продолжаем заполнять диагональ, идущую от левой клетки строкой выше. Дойдя до заполненной клетки (число 5) или угла (число 15), траектория спускается на одну клетку вниз, после чего процесс заполнения продолжается.[10]

Рис. 3.1

Ниже рассмотрим листинг программы, которая реализует данный квадрат на языке Паскаль.

progam algMR;

uses crt;

const n=5;

type mr:array[1..n,1..n]of integer;

var a:mr; b,i,j:integer;

begin

clrscr;

for i:=1 to n do

for j:=1 to n do

a[i,j]:=0;

i:=1;j:=(n div 2)+1;b:=1;

repeat

if i=n+1 then i:=1;if i=0 then i:=n;

if j=n+1 then j:=1;

if a[i,j]=0 then begin a[i,j]:=b;i:=i-1;j:=j+1;b:=b+1; end

else begin i:=i+1;a[i,j]:=b; b:=b+1;i:=i-1;j:=j+1;end;

until b=n;

for i:=1 to n do

begin

for j:=1 to n do

write(' ',a[i,j]);

writeln;

end;

end.

В программе использовался конечный массив элементов магического квадрата, что позволяет реализовать демонстрацию данного магического квадрата на уроках информатики в школе или ВУЗах.

3.2 Программная реализация квадратов четного порядка

Метод Ф.де ла Ира (1640-1718) основан на двух первоначальных квадратах. На рис. 2 показано, как с помощью этого метода строится квадрат 5-го порядка. В клетку первого квадрата вписываются числа от 1 до 5 так, что число 3 повторяется в клетках главной диагонали, идущей вправо вверх, и ни одно число не встречается дважды в одной строке или в одном столбце. То же самое мы проделываем с числами 0, 5, 10, 15, 20 с той лишь разницей, что число 10 теперь повторяется в клетках главной диагонали, идущей сверху вниз (рис. 2,б). Поклеточная сумма этих двух квадратов (рис. 2,в) образует магический квадрат. Этот метод используется и при построении квадратов четного порядка.[10]

Рис. 2

Ниже рассмотрим листинг программы, которая реализует данный квадрат на языке Паскаль.

progam algMR;

uses crt;

const n=5;

type mr:array[1..n,1..n]of integer;

var a,d,c:mr; b,i,j,z,k:integer;

begin

clrscr;

for i:=1 to n do

for j:=1 to n do

a[i,j]:=0;i:=1;j:=1;b:=1;

for k:= 1 to n do

repeat

if i=n+1 then i:=1;if i=0 then i:=n;

if j=n+1 then j:=1;

if a[i,j]=0 then begin a[i,j]:=b;i:=i+1;j:=j-1; end

else begin b:=b+1; i:=i+2;a[i,j]:=b; i:=i+1;j:=j-1;end;

until b=n+1;

i:=1;j:=2;b:=0;z:=-5;

for k:= 1 to n do

begin z:=z+5;

repeat

if i=n+1 then i:=1;if i=0 then i:=n;

if j=n+1 then j:=1;

Страницы: 1, 2, 3, 4, 5



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.