vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Re: 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.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: vielleicht rekursives programmieren? 
Autor: vbtricks
Datum: 18.10.05 09:18

Hallo,

schau dir mal das an: http://www.vbarchiv.net/forum/read.php?f=2&i=102167&t=102166. Bei Fragen einfach noch mal melden!

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.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel