| |
Fortgeschrittene ProgrammierungRe: vielleicht rekursives programmieren? | | | Autor: vbtricks | Datum: 18.10.05 18:21 |
| Nun,
meine Lösung bastelt Strings zusammen, die dann die komplette Ausgabe (also die gesamte Permutation) enthalten. Was verstehst du unter Collection? Ein Array, oder das, was in VB eine Collection ist?
Stefan
PS: Wir bekommen das noch gebacken. Ich weiß nur leider noch nicht genau, was du haben willst.
Web: http://www.vbtricks.de.vu/
VBTricks.de.vu. Meine Webseite zu VB und anderen Programmiersprachen. Verschiedene fortgeschrittene OCXe und komplette Projekte sind im Sourcecode verf?gbar. | |
vielleicht rekursives programmieren? | | | Autor: nektarine | Datum: 17.10.05 16:56 |
| hallo, ich habe folgendes (nicht unbedingt programmtechnisches) problem.
es handelt sich hier um ein teilprogramm, alles zu erklären würde zu lange dauern
ich habe eine collection "elements", in der befinden sich beliebig viele elemente (aber nie mehr als 7 oder so)
zB "el1" "el2" ... diese elemente können folgende werte annehmen: " ", "abc", "123", "1-2-2003"
nun möchte ich alle möglichen permutationen für meine elemente festlegen... in diesem fall 16
el1 = ""
el2 = ""
el1 = ""
el2 = "abc"
el1 = ""
el2 = "123"
el1 = ""
el2 = "1-2-2003"
el1 = "abc"
el2 = ""
... bis zu
el1 = "1-2-2003"
el2 = "1-2-2003"
dazu habe ich folgende lösung
For p1 = 1 To 4 '16 mögliche Permutationen werden erzeugt
For p2 = 1 To 4
setWert element(1), c(p1) 'in c stehen nach der reihe "", "abc", "123", "1-2-2003" ...mehr als 4 gibt es nicht
setWert element(2), c(p2)
ausgabe(element(1) + " = " + c(p1)
ausgabe(element(2) + " = " + c(p2)
Next
Next
diese lösung hilft mir weiter, wenn ich weiß, dass es genau zwei elemente zum permutieren gibt, es können aber auch null oder vier sein... das ist dynamisch
wie kann ich das lösen??? rekursiv wäre vielleicht eine möglichkeit, dass habe ich aber noch nie gemacht... HILFE | |
Re: vielleicht rekursives programmieren? | | | Autor: nektarine | Datum: 18.10.05 10:26 |
| hi, danke für deine antwort... ich habe mich jetzt mal ein bisschen reingearbeitet... verstandten hab ich noch nicht alles aber das wird schon ;)
lg nektarine | |
Re: vielleicht rekursives programmieren? | | | Autor: nektarine | Datum: 18.10.05 12:02 |
| ok, ich gebe mich geschlagen...
kannst du mir vielleicht weiterhelfen? mein kopf ist für rekursives programmieren nicht geschaffen... wenn ich mir ein beispiel anschaue und den code mit dem debugger durchgehe versteh ich alles... wenn ich selber etwas "basteln" möchte seh ich mich nicht mehr durch | |
Re: vielleicht rekursives programmieren? | | | Autor: vbtricks | Datum: 18.10.05 15:58 |
| Hallo,
okay, die Problemstellung im von mir verlinkten Eintrag war etwas anders. Dann ändern wir das wie folgt:
Dim aTexte(3) As String
' diese rekursive Funktion wird für jede Stelle des Ergebnisses aufgerufen
Private Sub Recursive(ByVal sCurText As String, ByVal iIndex As Integer)
Dim sSplitted() As String
Dim i As Integer
If iIndex > UBound(aTexte) Then
' Ende erreicht
List1.AddItem Left(sCurText, Len(sCurText) - 1)
Else
' alle Möglichkeiten durchgehen
For i = 0 To UBound(aTexte)
' nächste Stelle
Recursive sCurText & aTexte(i) & "=", iIndex + 1
Next
End If
End Sub
Private Sub Command1_Click()
List1.Clear
Recursive "", 0
End Sub
Private Sub Form_Load()
aTexte(0) = " "
aTexte(1) = "abc"
aTexte(2) = "123"
aTexte(3) = "1-2-2003"
End Sub Anschauen und gegebenenfalls noch mal fragen.
Stefan
Web: http://www.vbtricks.de.vu/
VBTricks.de.vu. Meine Webseite zu VB und anderen Programmiersprachen. Verschiedene fortgeschrittene OCXe und komplette Projekte sind im Sourcecode verf?gbar. | |
Re: vielleicht rekursives programmieren? | | | Autor: nektarine | Datum: 18.10.05 17:36 |
| hallo, ich muss nochmal fragen
wenn ich dein prog jetzt ausführe kommt mir raus
= = =
= = =abc
= = =123 usw.
ich habe aber das problem, die elemente miteinzubeziehen el1 el2 el3...
wenn ich zwei elemente habe(zb in collection), die alle vier möglichen werte annehmen sollen, sollte ich 16 lösungen haben
el1 = "" und el2 = ""
el1 = "" und el2 = "abc"
el1 = "" und el2 = "123"
....
el1 = "1-2-2003" und el2 = "1-2-2003"
immer in so 2er paketen (bzw. 3er pakete bei 3 elementen...)
...ja, dass is bis jetzt mein größtes problem, ich blick mich nicht ganz durch wenn ich das selbst schreiben soll.
PS: ich möchte dir danken, dass du dich so bemühst | |
Re: vielleicht rekursives programmieren? | | | Autor: vbtricks | Datum: 18.10.05 17:40 |
| Hallo, du willst das in einzelnen Variablen haben? Die Ausgabe ist ja korrekt, schließlich kommt ja auch " " vor.
Stefan
Web: http://www.vbtricks.de.vu/
VBTricks.de.vu. Meine Webseite zu VB und anderen Programmiersprachen. Verschiedene fortgeschrittene OCXe und komplette Projekte sind im Sourcecode verf?gbar. | |
Re: vielleicht rekursives programmieren? | | | Autor: nektarine | Datum: 18.10.05 18:08 |
| hmm? also ich versuchs nochmal... ich glaub ich habe mich unklar ausgedrückt
ich habe eine collection werte und eine mit elemente. die werte sind immer 4 stück die elemente können beliebig sein
collection werte = [""] ["abc"] ["123"] ["1-2-2003"]
collection elemente = [el1] [el2] ... [eln]
und jetzt hätt ich gern als ausgabe in einer liste stehen
16 Möglichkeiten wenns zwei elemente sind
el1="" el2=""
el1="" el2="abc" usw bis zum 16ten el1="1-2-2003" el2="1-2-2003"
64 Möglichkeiten wenns 3 elemente sind
el1="" el2="" el3=""
el1="" el2="" el="abc" usw bis zum 64ten el1="1-2-2003" el2="1-2-2003" el3="1-2-2003"
el1 is keine variable in dem sinn... es soll im moment nur ausgegeben werden | |
Re: vielleicht rekursives programmieren? | | | Autor: nektarine | Datum: 18.10.05 18:27 |
| eine collection von vb... wenns ein array is, is auch kein problem. is ja ungefähr das gleiche
im endeffekt muss ich meinen variablen (die elemente) immer andere werte zuweisen und dann eine funktion ausführen. also ungefähr so
el1="" el2=""
funktion(es wird nichts übergeben)
el1="" el2="abc"
funktion()
el1=abc" el2="123"
funktion()
aber die funktion im richtigen moment auszuführen, dachte ich, schaffe ich dann schon allein. jetzt bin ich mir da schon nicht mehr so sicher ;)
die ausgabe is also nicht notwendig... die is eigentlich nur zur überprüfung | |
Re: vielleicht rekursives programmieren? | | | Autor: vbtricks | Datum: 18.10.05 18:51 |
| Neue Version:
Dim aTexte(3) As String
Private Sub MyProcedure(ByRef ResultArray() As String)
' hier als Beispiel wieder die Ausgabe
List1.AddItem Join(ResultArray, "=")
' auf einzelne Elemente greifst du so zu
' ResultArray(0) ist das erste Element
' ResultArray(1) ist das zweite Element
' ...
' Ubound(ResultArray) gibt den letzten Index zurück
' so kannst du also alle Elemente der aktuellen Permutation durchgehen:
' For i = 0 To Ubound(ResultArray)
' ' hier was ausführen
' Next i
End Sub
' diese rekursive Funktion wird für jede Stelle des Ergebnisses aufgerufen
Private Sub Recursive(ByRef ResultArray() As String, ByVal iIndex As Integer)
Dim sSplitted() As String
Dim i As Integer
If iIndex > UBound(ResultArray) Then
' Ende erreicht, MyProcedure ausführen
MyProcedure ResultArray
Else
' alle Möglichkeiten durchgehen
For i = 0 To UBound(aTexte)
' nächste Stelle
ResultArray(iIndex) = aTexte(i)
Recursive ResultArray, iIndex + 1
Next
End If
End Sub
Private Sub Command1_Click()
Dim MyResultArray() As String
List1.Clear
' wir wollen 4 Elemente (0..3)
ReDim MyResultArray(3)
Recursive MyResultArray, 0
End Sub
Private Sub Form_Load()
aTexte(0) = " "
aTexte(1) = "abc"
aTexte(2) = "123"
aTexte(3) = "1-2-2003"
End Sub Ausführen kannst du die Beispiele? (brauchst eine ListBox und einen CommandButton)
Stefan
PS: Wenn es immer noch nicht das richtige ist, einfach weiter erklären.
Web: http://www.vbtricks.de.vu/
VBTricks.de.vu. Meine Webseite zu VB und anderen Programmiersprachen. Verschiedene fortgeschrittene OCXe und komplette Projekte sind im Sourcecode verf?gbar. | |
Re: vielleicht rekursives programmieren? | | | Autor: nektarine | Datum: 18.10.05 19:01 |
| hallo... ganz richtig ist es noch immer nicht weil ich ja mein ELEMENTE mit einbeziehen will
also fehlt zb in der form.load noch noch meine collection
c.add "el1"
c.add "el2"
...oder auch mehrere
weil in deiner ausgabe kommt ja wieder = = = da sollte aber stehen el1="" el2="" el3=""
das was im ResultArray drinnen steht sieht aber schon gut aus
...ausführen kann ich alles ohne probleme | |
Re: vielleicht rekursives programmieren? | | | Autor: vbtricks | Datum: 18.10.05 19:18 |
| Okay, das ist dann aber Kosmetik. Wenn du dann später sowieso mit den Elementen arbeiten willst, greifst du ja eh auf die Elemente des Arrays ResultArray in der MyProcedure Prozedur. Aber hier die neue Revision:
Dim aTexte(3) As String
Dim ElementNames As Collection
Private Sub MyProcedure(ByRef ResultArray() As String)
' hier als Beispiel wieder die Ausgabe
Dim i As Integer, sOutput As String
For i = 0 To UBound(ResultArray)
sOutput = sOutput & " " & ElementNames(i + 1) & " =""" & ResultArray(i) & _
""""
Next i
List1.AddItem sOutput
End Sub
' diese rekursive Funktion wird für jede Stelle des Ergebnisses aufgerufen
Private Sub Recursive(ByRef ResultArray() As String, ByVal iIndex As Integer)
Dim sSplitted() As String
Dim i As Integer
If iIndex > UBound(ResultArray) Then
' Ende erreicht, MyProcedure ausführen
MyProcedure ResultArray
Else
' alle Möglichkeiten durchgehen
For i = 0 To UBound(aTexte)
' nächste Stelle
ResultArray(iIndex) = aTexte(i)
Recursive ResultArray, iIndex + 1
Next
End If
End Sub
Private Sub Command1_Click()
Dim MyResultArray() As String
List1.Clear
' wir wollen 4 Elemente (0..3)
ReDim MyResultArray(3)
Recursive MyResultArray, 0
End Sub
Private Sub Form_Load()
Dim i As Integer
aTexte(0) = " "
aTexte(1) = "abc"
aTexte(2) = "123"
aTexte(3) = "1-2-2003"
Set ElementNames = New Collection
For i = 1 To UBound(aTexte) + 1
ElementNames.Add "el" & i
Next i
End Sub Stefan
Web: http://www.vbtricks.de.vu/
VBTricks.de.vu. Meine Webseite zu VB und anderen Programmiersprachen. Verschiedene fortgeschrittene OCXe und komplette Projekte sind im Sourcecode verf?gbar. | |
Re: vielleicht rekursives programmieren? | | | Autor: nektarine | Datum: 18.10.05 21:37 |
| ja da hast du recht! danke, das prog funkttioniert... aber leider nur dann wenn ich 4 elemente hab
die elemente hängen nicht mit den werten zusammen... es können auch nur 2 elmente drinnen sein oder auch fünf
das is auch mein ursprüngliches problem... wenn ich wüsste dass es immer 4 elemente sind, bräuchte ich nicht unbedingt eine rekursion
im ElementNames kann beliebiges drinnenstehen zb
ElementNames.Add "erstesElement"
ElementNames.Add "2.Element"
ElementNames.Add "El3"
ich bekomm das nicht ganz dynamisch hin, wenn ElementNames zwei elemente hat sollts so aussehen
erstes Element = "" 2.Element = "" ...bis zu... erstes Element = "1-2-2003" 2.Element = "1-2-2003"
wenn es drei sind dann so
erstes Element = "" 2.Element = "" El3 = "" ....bis zu...
erstes Element = "123" 2.Element = "abc" El3 = "1-2-2003" usw...
bei vier elementen solls genau so aussehen wie du das programmiert hast
ich entschuldige mich mal dafür dass ich dir so auf die nerven gehe... aber du hast mir schon sehr viel weiter geholfen, hatte bis jetzt noch nie mit rekursiven programmen zu tun
lg nektarinchen | |
Re: vielleicht rekursives programmieren? | | | Autor: nektarine | Datum: 18.10.05 22:11 |
| okok du bist mein programmiergott!!!
der fehler lag bei mir (eh klar) ;)
es is alles genau so wie ich das die ganze zeit versucht hab.... DANKE DANKE DANKE | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevDTA 3.0 Pro
SEPA mit Kontonummernprüfung
Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Weitere InfosTipp des Monats März 2024 Dieter OtterUTF-8 Konvertierung von Dateien und StringsVB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|