Hallo Klaus,
vielen Dank für Deinen Code, er funktioniert !
NextCombi ändert die Belegung des Arrays, dabei entstehen doppelte Ziffern dafür fehlen welche.
CheckCombi prüft, ob von NxtCombi zulässige Belegungen erzeugt wurden, wen ja, dann result=TRUE.
CheckMagic prüft, ob die Bedingungen für das Zauberquadrat erfüllt sind.
Wenn Du mir noch ein paar Hinweise zu CheckCombi geben könntest, den dort benutzten Code habe ich bisher noch nie benutzt oder gesehen.
Delphi-Quellcode:
const
Size=3;
Numbers=Size*Size;
RowSum=(1+Numbers)*Numbers div 2 div Size;
var
Combi:Array[0..Numbers-1] of Byte;
Square:Array[0..Size-1,0..Size-1] of Byte absolute Combi;
FUNCTION CheckCombi:Boolean;
var I:Integer; Entries:Set of 1..Numbers;
begin
Entries:=[];
for I:=High(Combi) downto 0 do Include(Entries,Combi[I]);
Result:=Entries=[1..Numbers];
end;
Die Anweisung
Include(Entries,Combi[I]); fügt offenbar die Zahl
Combi[I] in
Entries ein.
Mit
Entries=[1..Numbers] wird geprüft, ob tatsächlich nur die Ziffern z.B. 1..9 in
Combi enthalten sind.
Gibt es doppelte oder fehlende Ziffern, ist das Ergebnis FALSE.
@Schokohase,
Deine Version werde ich prüfen, wenn sie schneller ist, dann wäre das ein Vorteil.
Noch eine Anmerkung
Die Permutation ist ein Teil der Kombinatorik
https://www.mathebibel.de/kombinatorik
https://www.mathebibel.de/permutation-ohne-wiederholung
Danke für Euere Hinweise