Okay, gehen wir mal durch marabu's Code
... beachte die Kommentarzeilen!
Delphi-Quellcode:
// Col steht für "column" - also Spalte
// Row steht für Zeile
// Konvertiert den den Spalten- und Zeilenindex innerhalb des großen
// 9x9-Feldes in den jeweiligen Index des 3x3-Blocks und innerhalb des
// 3x3-Blocks
function BigToSmall(
// iBigCol und iBigRow sind die Indeces innerhalb des großen 9x9-Feldes
iBigCol, iBigRow: Integer;
// variable Parameter welche mit Werten gefüllt werden
var iBlockCol, iBlockRow, iSmallCol, iSmallRow: Integer
): Boolean;
begin
// Überprüfung ob sich die Eingabewert im gültigen Bereich befinden
Result := (iBigCol in [0..8]) and (iBigRow in [0..8]);
// Füllen der variablen Parameter mit den Werten
if Result then
begin
// "Blockspalte" ist der Index der Spalte eines 3x3er Blocks [1]
iBlockCol := iBigCol div 3;
// "Blockzeile" ist der Index der Zeile eines 3x3er Blocks [1]
iBlockRow := iBigRow div 3;
// "kleine Spalte" ist der Index der Spalte innerhalb des 3x3er Blocks [2]
iSmallCol := iBigCol mod 3;
// "kleine Zeile" ist der Index der Zeile innerhalb des 3x3er Blocks [2]
iSmallRow := iBigRow mod 3;
end;
end;
// Gegenteil der obigen Funktion BigToSmall()
function SmallToBig(
iBlockCol, iBlockRow, iSmallCol, iSmallRow: Integer;
var iBigCol, iBigRow: Integer
): Boolean;
begin
// Überprüfung ob sich die Eingabewert im gültigen Bereich befinden
Result := (iBlockCol in [0..2]) and (iBlockRow in [0..2])
and (iSmallCol in [0..2]) and (iSmallRow in [0..2]);
// Füllen der variablen Parameter mit den Werten
if Result then
begin
// Spalte innerhalb des 9x9-Feldes anhand der Eingabe berechnen
iBigCol := 3 * iBlockCol + iSmallCol;
// Zeile innerhalb des 9x9-Feldes anhand der Eingabe berechnen
iBigRow := 3 * iBlockRow + iSmallRow;
end;
end;
Und jetzt gucken wir, wie das 9x9-Feld aussieht, wenn wir es nach den oben in den Kommentaren in eckige Klammern gesetzten Ziffern aufschlüsseln:
Spaltenindeces:
iBlockCol nach
[1]
Code:
0 0 0 1 1 1 2 2 2
0 0 0 1 1 1 2 2 2
0 0 0 1 1 1 2 2 2
0 0 0 1 1 1 2 2 2
0 0 0 1 1 1 2 2 2
0 0 0 1 1 1 2 2 2
0 0 0 1 1 1 2 2 2
0 0 0 1 1 1 2 2 2
0 0 0 1 1 1 2 2 2
Zeilenindeces:
iBlockRow nach
[1]
Code:
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2
Spaltenindeces:
iSmallCol nach
[2]
Code:
0 1 2 0 1 2 0 1 2
0 1 2 0 1 2 0 1 2
0 1 2 0 1 2 0 1 2
0 1 2 0 1 2 0 1 2
0 1 2 0 1 2 0 1 2
0 1 2 0 1 2 0 1 2
0 1 2 0 1 2 0 1 2
0 1 2 0 1 2 0 1 2
0 1 2 0 1 2 0 1 2
Zeilenindeces:
iSmallRow nach
[2]
Code:
0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2
0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2
0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2
Vielleicht kannst du jetzt begreifen, was gemeint war ...