Mehrdimensionale Felder 

Problemstellung

Ein Magisches Quadrat soll erzeugt werden.

Unter einem magischen Quadrat der Ordnung n versteht man die Anordnung von n2 verschiedenen Zahlen in einem quadratischen Schema, so dass die Summe der n Zahlen in jeder Zeile, in jeder Spalte und in jeder der beiden Hauptdiagonalen, also der von links oben nach rechts unten absteigenden und der von links unten nach rechts oben aufsteigenden Hauptdiagonalen, jeweils denselben festen Wert s besitzt.

http://www.mathe.tu-freiberg.de/~hebisch/cafe/magisch.html

Hier ein einfaches Programm, um ein zweidimensionales Feld zu demonstrieren.

Program Magisches_Quadrat_version1;
const max = 3;
var
   quadrat : array[1..max,1..max] of integer;
   zeile, spalte: integer;
   eintrag : integer;
begin {quadrat }
      for zeile := 1 to max do
      for spalte := 1 to max do
      quadrat[ zeile, spalte ] := 0;
      zeile := 1;
      spalte := 2;
      eintrag := 1;
      quadrat[ zeile, spalte ] := eintrag;
      while eintrag <= max*max do
      begin
      if zeile = 1 then
         begin
              if spalte = max then
                 zeile := zeile +1
                 else
                 begin
                      spalte := spalte +1;
                      zeile := max;
                 end;
         end { zeile = 1}
         else
         begin { Zeile <> 1 }
               if spalte = max then
                  begin
                       zeile := zeile -1;
                       spalte := 1;
                  end
                  else
                  begin
                       spalte := spalte +1;
                       zeile := zeile -1;
                       if mag_quadrat[ zeile, spalte ] <> 0 then
                       begin
                            spalte := spalte - 1;
                            zeile := zeile + 2;
                       end;
                  end;
         end;
         eintrag := eintrag +1;
         mag_quadrat[ zeile, spalte ] := eintrag;
      end; { of while }
      for zeile := 1 to max do
      begin
           for spalte := 1 to max do
           write(mag_quadrat[ zeile, spalte ],' ');
           writeln;
      end;
      readln
end. {Quadrat}

Programm Version2