Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
23.11.2023, 18:56
(Dieser Beitrag wurde zuletzt bearbeitet: 23.11.2023, 19:44 von RPP63.)
Ich lösche dennoch …
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
26865
Nicht registrierter Gast
Kleine Spielerei: Variable Anzahl Rädchen, jedes Rädchen mit individuellen Einstellmöglichkeiten:
Code:
Option Explicit
Sub Kombinationen()
Dim Rädchen As Variant
'Vorgabe: Anzahl "Rädchen", jeweils von 0 bis Obergrenze
'z. B. Rad 1 von 0 bis 7, Rad 2 von 0 bis 13, Rad 3 von 0 bis 9
Rädchen = Array(7, 13, 9)
Range("A:A").ClearContents
Range("A1").Value = "Kombinationen"
ReDim erg(0 To UBound(Rädchen))
Call RecLoop(Rädchen, erg)
End Sub
Sub RecLoop(ByVal Rädchen, ByRef erg As Variant)
Dim i As Long, f As Variant: f = Rädchen
If UBound(Rädchen) > 0 Then ReDim Preserve f(0 To UBound(f) - 1) Else f = 0
For i = 0 To Rädchen(UBound(Rädchen))
erg(UBound(Rädchen)) = i
If IsArray(f) Then Call RecLoop(f, erg)
If UBound(Rädchen) = 0 Then Cells(Rows.Count, 1).End(xlUp).Offset(1).Value = "'" & Join(erg, "-")
Next i
End Sub
Rädchen = Array(7, 13, 9) gibt die Anzahl Rädchen und die Einstellungen vor (jeweils 0 bis zur angegebenen Zahl). Bei mehr oder weniger Rädchen einfach Zahlen ergänzen oder löschen.
Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:1 Nutzer sagt Danke an Gast für diesen Beitrag 28
• RPP63
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
23.11.2023, 19:20
(Dieser Beitrag wurde zuletzt bearbeitet: 23.11.2023, 19:21 von RPP63.)
Sehr schön!
Ernst gemeinte Frage:
Ist das eine "echte" Rekursion?
Ich stehe damit ein wenig auf Kriegsfuß.
(was man heute sicherlich gar nicht schreiben darf, ähnlich dem irgendwann als "unschicklich" geächtetem "Monitor im Kreuzfeuer" [Du erinnerst Dich, wurde als Kreuzverhör umbenannt?])
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
26865
Nicht registrierter Gast
(23.11.2023, 19:20)RPP63 schrieb: Ist das eine "echte" Rekursion?
Ja, die Sub ruft sich selbst (mit jeweils geänderten Argumenten) auf. Nimm mal eine kleine Menge Kombinationen und spiel das mal im Einzelschritt durch. Behalte vor allem f, i und erg im Auge.
Das geht bestimmt auch eleganter, war ein Schnellschuss.
Registriert seit: 05.12.2019
Version(en): 2016
Vielen Dank
EarlFred !
So hatte ich es mir vorgestellt.
Code:
'Vorgabe: Anzahl "Rädchen", jeweils von 0 bis Obergrenze
'z. B. Rad 1 von 0 bis 7, Rad 2 von 0 bis 13, Rad 3 von 0 bis 9
Rädchen = Array(7, 13, 9)
Kann man den Code auch so gestalten, dass ich angeben kann, wo meine Zahlen für die jeweiligen Rädchen beginnen?
Areray(7, 13, 9) begann ja bei 0-7, 0-13 & 0-9). Kann man für das 1. Rädchen auch bei 1 beginnen (1-5) und das 2. Rädchen (3-6) und eine Eingabe für das 3. Rädchen z.B. von 4-8 machen? Also nicht, dass immer bei der Zahl 0 begonnen wird?
Vielen Dank
26865
Nicht registrierter Gast
Ich mag Menschen, die sich mit Lösungen beschäftigen, sie zuerst mal zu verstehen versuchen und dann selbst anpassen können.
Wo müsste man das denn anpassen? Welche Varianten fallen dir ein?
Registriert seit: 05.12.2019
Version(en): 2016
23.11.2023, 21:22
Dank Dir!
Habs mir nochmal genauer angeschaut. i=1
Schönen Abend noch!
Registriert seit: 05.12.2019
Version(en): 2016
Durch i=1 beginnen ja alle 3 Zahlen bei ist bis zur entsprechenden Array-Zahl. Kann ich aber auch 3 veschiedene Beginnzahlen angeben?
26865
Nicht registrierter Gast
(23.11.2023, 22:47)Redgeier schrieb: Durch i=1 beginnen ja alle 3 Zahlen bei ist bis zur entsprechenden Array-Zahl. Kann ich aber auch 3 veschiedene Beginnzahlen angeben?
Du hast doch jetzt alles gelernt, was du zur Umsetzung brauchst, so dass die Frage „ob“ unzulässig ist. Selbstverständlich ist es möglich und du kannst es auch.
- du weißt, wie man die Obergrenze der Werte definiert.
- du kannst analog also auch die Untergrenze definieren.
- du weißt, wo die Untergrenze verwendet wird.
Alles da an Wissen. Einfach anwenden, das ist kein Hexenwerk.
Registriert seit: 29.09.2015
Version(en): 2030,5
Ich würde verwenden:
1: 0-7
2: 0-13
3: 0-9
Code:
Sub M_snb()
msgbox = 8 * 14 * 10
Cells(1).Resize(1120) = [index(int((row(1:1120)-1)/(14*10)) & "_" & mod(int((row(1:1120)-1)/10),14) & "_" & mod(row(1:1120)-1,10),)]
End Sub