- Beiträge
- 6.698
- Reaktionspunkte
- 1.690
-> Hier kostenlos registrieren
Habe ich mittlerweile (wie immer ungestestet):Da nun die String-Trickserei entfällt, dürfte sich die VBA-Rechnerei wesentlich leichter in SCL umschreiben lassen.
Ich werde mich daran auch noch versuchen ...
Code:
' // kompl. Permutation (Beispiel für 5-stellige Permutationen)
CONST
maxcol : INT := 5 ; // Anzahl Stellen der Permutation
maxidx : INT := maxcol - 1 ; // für die Dimensionierung des Array
END_CONST
VAR_INPUT
idx1 : INT ; // 1..maxcol!
END_VAR
VAR_TEMP
idx0 : INT ; // 0..(maxcol! - 1)
col : INT ; // aktuelle Stelle/Spalte; Zählung beginnt rechts mit 1
tmp : INT ;
ord : INT ; // OrdnungsZahl 0..4 für die berechnete Ziffer für die gegebene Stelle und den gegebenen Index
idx : INT ; // Array-Index
arr : ARRAY [0..maxidx] OF BYTE := 5, 4 , 3 , 2 ,1 ; // "niederwertigste" Permutation
END_VAR
idx0 = idx1 - 1 ;
FOR col := maxcol TO 2 BY -1 DO
ord := (idx0 / Fakultaet(col - 1)) MOD col ;
tmp := arr(col - 1 - ord) ;
FOR idx = col - 1 - ord TO col - 2 DO // (Schleife darf nicht ausgeführt werden, wenn col - 1 - ord > col - 2 ist)
arr(idx) = arr(idx + 1) ;
END_FOR ;
arr(col - 1) = tmp ;
END_FOR ;
// Die Elemente des Array enthalten jetzt die gesuchte Permutation ...
// ... aber wohin damit? Keine Ahnung. So gesehen war die StringVariante doch einfacher.

Zuletzt bearbeitet: