Doppelt gerade Seitenlänge

 

Ein Magisches Quadrat hat eine doppelt gerade Seitenlänge, wenn sie zweimal durch 2 teilbar ist, das heißt durch 4 teilbar ist, so zum Beispiel 4, 8, 12.

Um beispielsweise ein Magisches Quadrat mit der Seitenlänge 8 zu erstellen, bereitet man sich zwei 8x8 Quadrate vor.

               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               

Danach trägt man der Reihe nach die Zahlen von 1 bis 64, dem Quadrat der Seitenlänge, aufsteigend in das eine Quadrat ein, und in das andere absteigend.

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 40
41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64
64 63 62 61 60 59 58 57
56 55 54 53 52 51 50 49
48 47 46 45 44 43 42 41
40 39 38 37 36 35 34 33
32 31 30 29 28 27 26 25
24 23 22 21 20 19 18 17
16 15 14 13 12 11 10 9
8 7 6 5 4 3 2 1

Jetzt legt man eine ganz bestimmte Maske auf. Es gibt viele solcher Masken. Ich möchte hier aber nur mit einer arbeiten. Sie ist in Viertel geteilt und symmetrisch. Diese legt man nun auf das eine Quadrat, das Negativ dieser Maske auf das andere.

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 40
41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64
64 63 62 61 60 59 58 57
56 55 54 53 52 51 50 49
48 47 46 45 44 43 42 41
40 39 38 37 36 35 34 33
32 31 30 29 28 27 26 25
24 23 22 21 20 19 18 17
16 15 14 13 12 11 10 9
8 7 6 5 4 3 2 1

Die von der Maske bedeckten Zahlen werden zusammen in ein Quadrat gefügt. Die Zahlen sind jetzt so angeordnet, dass sie ein Magisches Quadrat bilden.

64 63 3 4 5 6 58 57
56 55 11 12 13 14 50 49
17 18 46 45 44 43 23 24
25 26 38 37 36 35 31 32
33 34 30 29 28 27 39 40
41 42 22 21 20 19 47 48
16 15 51 52 53 54 10 9
8 7 59 60 61 62 2 1

Umsetzung in Delphi

Für das Erstellen eines Magischen Quadrates ist das Viertel der Seitenlänge eine sehr wichtige Größe, denn sie bestimmt hauptsächlich über das Ausmaß der Maske. Es ist einfacher erst alle Zahlen von 1 bis zum Quadrat der Seitenlänge einzutragen und sie dann mit der zweiten Maske zu überschreiben, als extra noch das Negativ der Maske aufzulegen.

DIe Prozedur durchläuft also alle Zellen des Arrays und trägt dort eine Zahl ein.

Die Koordinaten der Maske müssen verschiedene Bedingungen erfüllen:

  • Die Zeile ist kleiner als das Viertel der Seitenlänge oder größer als drei Viertel der Seitenlänge und
     
     
     
     
     
     
     
     
     
  • die Spalte ist kleiner als das Viertel der Seitenlänge oder größer als drei Viertel der Seitenlänge oder
     
     
     
  • die Zeilen sind größer als das Viertel der Seitenlänge und kleiner als drei Viertel der Seitenlänge und
     
     
     
     
     
     
  • die Spalten sind größer als das Viertel der Seitenlänge und kleiner als drei Viertel der Seitenlänge.
     
     
     

In alle Zellen, deren Koordinaten diese Kriterien erfüllen, werden die Zahlen in umgekehrter Reihenfolge eingesetzt.

Nach jeder Zelle wird die Zahl, die einzutragen ist, um eins erhöht.

var
  MagSquare:Array[0..99{Spalten},0..99{Zeilen}Of Word;
  n:word;
  size,a{Spalte},b{Zeile}:byte;

procedure tfrmCreateMagSquar.CreateQuartMS;

var
  quart:Byte;

begin
  n:=1;
  quart:=size div 4;
  for b:=0 to size-1 do
  begin
    for a:=0 to size-1 do
    begin
      magsquare[a,b]:=n;
      If ((a<=quart-1) Or (a>size-quart-1)) And ((b<=quart-1) Or (b>size-quart-1)) then magsquare[a,b]:=Sqr(size)-n+1;
      If ((a>quart-1) and (a<=size-quart-1)) And ((b>quart-1) and (b<=size-quart-1)) then magsquare[a,b]:=Sqr(size)-n+1;
      n:=n+1;
    end;
  end;
end;