Symmetrisches Array befüllen

Online-Skater

Erfahrenes Mitglied
Hallo

Ich habe eine 8*8 Array mit Prioritäten gegeben, dieses Feld ist hochsymmetrisch also müsste ich theoretisch nur ein Viertel belegen und den Rest befüllen lassen. Doch leider fehlt mir hier ein Ansatz wie man dies bewerkstelligen könnte.

Bsp.
Code:
9999	5	500	200	200	500	5	9999
5	1	50	150	150	50	1	5
500	50	250	100	100	250	50	500
200	150	100	50	50	100	150	200
200	150	100	50	50	100	150	200
500	50	250	100	100	250	50	500
5	1	50	150	150	50	1	5
9999	5	500	200	200	500	5	9999

Kann mir wer einen Ansatz liefern wie man dies bewerkstelligen könnte. Danke :)
 

CSANecromancer

Erfahrenes Mitglied
Ich habe mal was zusammengestopselt, aber nicht getestet (kann gerade kein separates Projekt aufmachen). Gedacht ist es so:

1. Schritt:
w b c d - - - -
x b c d - - - -
y b c d - - - -
z b c d - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -

2. Schritt:
w b c d d c b w
x b c d d c b x
y b c d d c b y
z b c d d c b z
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -

3. Schritt:
w b c d d c b w
x b c d d c b x
y b c d d c b y
z b c d d c b z
z b c d d c b z
y b c d d c b y
x b c d d c b x
w b c d d c b w

Code:
var
  x, y: Integer;
  i: Integer;

  // Belegung des linken oberen Quadranten
  Feld[0, 0] := 9999;
  Feld[1, 0] := 5;
  Feld[2, 0] := 500;
  Feld[3, 0] := 200;

  Feld[0, 1] := 5;
  Feld[1, 1] := 1;
  Feld[2, 1] := 50;
  Feld[3, 1] := 150;

  Feld[0, 2] := 500;
  Feld[1, 2] := 50;
  Feld[2, 2] := 250;
  Feld[3, 2] := 100;

  Feld[0, 3] := 200;
  Feld[1, 3] := 150;
  Feld[2, 3] := 100;
  Feld[3, 3] := 50;

  // Abbilden der Werte auf den rechten oberen Quadranten
  for y := 0 to 3 do        // Zeilenrichtung normal
  begin
    i := 4;
    for x := 3 to 0 do       // Spaltenrichtung invers
    begin
      Feld[i, y] := Feld[x, y];
      Inc(i);
    end;
  end;

  // Abbilden der oberen Matrixhälfte auf die untere
  i := 4;
  for y := 3 to 0 do              // Zeilenrichtung invers
  begin
    for x := 0 to 7 do           // Spaltenrichtung normal
      Feld[x, i] := Feld[x, y];
    Inc(i);
  end;
 

Online-Skater

Erfahrenes Mitglied
Vielen Dank CSANecromancer das war sogar mehr als ein Ansatz :)

Runterzählende Schleifen heißen in pascal downto ansonsten funktioniert es perfekt ;-)