vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 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

VB.NET - Ein- und Umsteiger
4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Schudi
Datum: 13.02.12 19:53

Guten Abend,

ich stehe gerade vor folgender Aufgabe - und dabei voll auf dem berühmten Schlauch:

Es gibt 4 Arrays mit je 6 beliebigen Zahlen :

Beispielsweise:

Array a: 10 20 30 40 50 60
Array b: 90 80 70 60 50 40
Array c: 11 22 33 44 55 66
Array d: 12 23 34 45 56 67

Innerhalb des jeweiligen Array kann jede Zahl an jeder Stelle stehen und dies wiederum in allen Arrays unabhängig voneinander.

Ermittelt werden bzw. als Liste ausgegeben werden sollen alle möglichen Kombinationen.

Ich hoffe, die Aufgabe ist verständlich beschrieben...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Manfred X
Datum: 13.02.12 20:22

Hallo!

Erkläre Deine Hausaufgabe etwas genauer ...

In jedem Array gibt es Fakultät 6 Möglichkeiten, die
Zahlen anzuordnen.
Wenn alle möglichen Anordnungen in den vier Arrays jeweils
miteinander kombiniert werden sollen, gibt es
(Fakultät 6) ^ 4 Varianten.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Schudi
Datum: 13.02.12 20:32

Das ist schwer für mich in Worte zu fasssen, aber es ist wohl so, wie Du beschreibst...

Innerhalb eines Arrays kann jede Zahl an jeder Stelle stehen. Daraus ergeben sich eine Anzahl von Kombinationsmöglichkeiten.

Es gilt nun jede der sich ergebenden Möglichkeiten mit jeder Möglichkeit aus den anderen 3 Arrays zu kombinieren.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Manfred X
Datum: 13.02.12 21:25

Hallo!

Hier ein kleines Modul, das die Permutationen innerhalb
der Arrays in eine Liste schreibt.
In Deinem Fall sind das jeweils 720 Einträge.

Aufruf-Beispiel für ein Array ("elements"):

Dim elements() As UInteger = {11, 22, 33, 44, 55, 66}
Dim lst As List(Of UInteger()) = Permutationen_Ohne_Wiederholung(elements)

Diese Liste muss für alle 4 Array gebildet werden und dann ....
eine vierfach verschachtelte Schleife über diese Listen
laufen lassen ....
Module modPerm
 
    Const GEN_NEXT As Integer = 0  'ok, print and continue
    Const GEN_TERM As Integer = 1  'ok, terminate
 
    Private Function gen_perm_rep_init(ByVal vector() As UInteger) As Integer
        For i As Integer = 0 To vector.Length - 1
            vector(i) = CUInt(i)
        Next i
        Return GEN_NEXT
    End Function
 
    Private Function gen_perm_rep_next(ByVal vector() As UInteger, _
        ByVal n As UInteger) As Integer
 
        Dim j As Integer = CInt(n) - 2  'index
        Dim i As Integer = CInt(n) - 1 'help index
        Dim temp As UInteger     'auxiliary element
 
        Do While j >= 0 AndAlso vector(j + 1) <= vector(j)
            j -= 1
        Loop
        If j < 0 Then Return GEN_TERM
 
        Do While (vector(i) <= vector(j))
            i -= 1
        Loop
        temp = vector(j)
        vector(j) = vector(i)
        vector(i) = temp
        i = CInt(n)
 
        Do While j < i
            j += 1 : i -= 1
            If j < i Then
                temp = vector(j)
                vector(j) = vector(i)
                vector(i) = temp
            End If
        Loop
        Return (GEN_NEXT)
    End Function
 
    Public Function Permutationen_Ohne_Wiederholung(Of T) _
        (ByVal elements() As T) As List(Of T())
 
        Dim vector(elements.Length - 1) As UInteger
        Dim n As UInteger = CUInt(vector.Length)
 
        Dim lst As New List(Of T())
        Dim gen_result As Integer = gen_perm_rep_init(vector)
        Do While gen_result = GEN_NEXT
            Dim ielements(elements.Length - 1) As T
            For i As Integer = 0 To vector.Length - 1
                ielements(i) = elements(CInt(vector(i)))
            Next
            lst.Add(ielements)
            gen_result = gen_perm_rep_next(vector, n)
        Loop
        Return lst
    End Function
End Module
Hinweis: Code-Eigentümlichkeiten - Folge der Umstellung aus C++

Beitrag wurde zuletzt am 13.02.12 um 21:26:59 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Preisser
Datum: 13.02.12 21:38

Hallo,

alternativ ein rekursiver Ansatz:
    ''' <summary>
    ''' Ruft für jede Permutation der Elemente aus arr den angegebenen Delegat
    ''' auf.
    ''' </summary>
    ''' <typeparam name="T">der Typ des Arrays</typeparam>
    ''' <param name="arr">das Array</param>
    ''' <param name="act">Ein Delegat vom Typ Action(Of T()), der für
    ''' jede Permutation aufgerufen werden soll</param>
    ''' <remarks></remarks>
    Public Shared Sub ForEachPermutation(Of T)(arr As T(), _
            act As Action(Of T()))
        Dim newArray As T() = New T(arr.Length - 1) {}
        Dim indexes As Integer() = New Integer(arr.Length - 1) {}
        Dim taken As Boolean() = New Boolean(arr.Length - 1) {}
 
        ForEachPermutationRek(arr, act, indexes, taken, 0, newArray)
    End Sub
 
    Private Shared Sub ForEachPermutationRek(Of T)(arr As T(), act As Action(Of _
      T()), indexes As Integer(), taken As Boolean(), pos As Integer, newArray _
      As T())
        For i As Integer = 0 To arr.Length - 1
            ' Schauen, ob die POsition belegt is
            If Not taken(i) Then
                taken(i) = True
                indexes(pos) = i
                If pos < arr.Length - 1 Then 'rekursiv aufrufen
                    ForEachPermutationRek(arr, act, indexes, taken, pos + 1, _
                      newArray)
                Else
                    'neues Array füllen und die Action aufrufen
                    For j As Integer = 0 To arr.Length - 1
                        newArray(j) = arr(indexes(j))
                    Next
                    act.Invoke(newArray)
                End If
                taken(i) = False
            End If
        Next
    End Sub
Der Funktion ForEachPermutation kann dann ein Array vom Typ T übergeben werden, sowie ein Action(Of T()), das für jede Permutation aufgerufen wird und ein Array mit den neuen Elementen enthält. Ein Aufruf
    Dim arr As Integer() = {1, 2, 3}
 
    Dim ausgabeNr As Integer = 0
    ForEachPermutation(arr, _
        Sub(array As Integer())
            ausgabeNr += 1
            Debug.WriteLine("Permutation " & ausgabeNr & ": " & String.Join( _
              ",", array))
        End Sub)
erzeugt dann z.B. die Ausgabe:
Permutation 1: 1,2,3
Permutation 2: 1,3,2
Permutation 3: 2,1,3
Permutation 4: 2,3,1
Permutation 5: 3,1,2
Permutation 6: 3,2,1
Auch hier müsste man dann z.B. unterschiedliche Actions angeben, die jeweils für das andere Array die Funktion aufrufen oder so.

Beitrag wurde zuletzt am 13.02.12 um 21:54:13 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Sloorg
Datum: 09.07.16 13:22

Hallo,

habe grad zufällig den Artikel entdeckt. Ich stehe vor einem ähnl. Problem und zwar würde ich gerne alle mögl. Kombinationen aus einem Mix von Zahlen und Buchstaben ermitteln (manche Werte können auch öfter vorkommen). Zuerst dachte ich an eine Struktur, weil man dort verschiedene Datentypen kombinieren kann:

Imports System.Console
Module Module1
    Public Structure Notenwerte
        Dim noten As Integer
        Dim pausen As String
    End Structure
    Sub Main()
        Dim note As Notenwerte
 
        Write("Bitte Notenwerte eingeben: ")
        note.noten = ReadLine()
        Write("Bitte Pausenwerte eingeben: ")
        note.pausen = ReadLine()
 
        WriteLine("Notenwerte: " & note.noten)
        WriteLine("Pausenwerte: " & note.pausen)
        WriteLine("Bitte EINGABE drücken: ")
        ReadLine()
 
    End Sub
 
End Module
Jetzt müsste man das nur mit obigem Bsp. kombinieren, hab nur keinen Plan, wie...

Schöne Grüße,
Sloorg.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Manfred X
Datum: 09.07.16 21:29

Meinst Du Kombinationen oder Permutationen ??
In diesem Thema geht es um Permutationen.
  Dim np(3) As Notenwerte
 
  np(0).pausen = "A"
  np(0).noten = 1
  np(1).pausen = "B"
  np(1).noten = 2
  np(2).pausen = "C"
  np(2).noten = 3
  np(3).pausen = "D"
  np(3).noten = 4
 
 
  Dim np_perm As List(Of Notenwerte()) = _
      Permutationen_Ohne_Wiederholung(np)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Sloorg
Datum: 09.07.16 23:08

Hallo Manfred X,

ich meine schon Permutationen. Es geht mir dabei um Rhythmusveränderung in der Improvisation (Musik): Man kann z. B. die Melodielinie beibehalten, aber den Rhythmus verändern. Da dachte ich, dass dafür ein kleines Programm recht praktisch wäre, weiß nur noch nicht, wie ich das schreiben soll.

Mir kam die Idee, dass ich als einfachstes Beispiel zuerst mal von 4 Noten- und Pausenwerten ausgehe und diese wie folgt benenne:
Notenwerte: Halbe = 2, Viertel = 4, 1/8 = 8, 1/16 = 16
Pausenwerte: Halbe Pause = H, Viertel Pause = V, 1/8-Pause = A, 1/16-Pause = S
(Obwohl 16 nicht ganz funktionieren wird, da das ja als 1 + 6 erkannt wird, außer man wandelt es in String um.)

Nehmen wir nun an, ich gebe folgenden Rhythmus ein: A 8 8 8 8 8 4 (also eine 1/8-Pause gefolgt von 5 1/8-Noten und einer 1/4-Note. Das Programm soll nun alle möglichen Permutationen berechnen.

Hier sei noch angemerkt, dass einige Werte i. d. Regel öfter auftreten, also spricht man hier von Permutation mit Wiederholung, denke ich.

Wäre ja cool, wenn du hierzu eine Lösung finden könntest. ;>)

Schöne Grüße,
Sloorg.

Beitrag wurde zuletzt am 09.07.16 um 23:29:59 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Manfred X
Datum: 10.07.16 10:33

Un dieser Funktionsaufruf funktioniert für deine Zwecke nicht?
http://www.vbarchiv.net/forum/id22_i99557t85833_4-zahlenreihen-alle-moeglichen-kombinationen-ermitteln.html


Es handelt sich um eine generische Methode, d.h.
Du kannst Instanzen einer beliebigen Klasse oder Structure als
Elemente in ein Array packen und erhälst alle möglichen
Anordnungen/Reihungen dieser Instanzen (in einer Liste von Arrays).
Du könntest deshalb - wie von Dir oben konzipiert - die Werte für
Noten und zugehörige Pausen in typspezifische Properties einer Instanz
packen.
Wie Du einen Rhythmus auf Datenebene definierst (z.B. A 8 8 8 8 8 4)
ist mir als Nicht-Musiker leider nicht klar. Es scheint dabei abwechselnd
um eine Mischung aus Noten und Pausen zu gehen?
In dem Fall wäre ein Stringarray möglich ({"A", "8", "16", ..., })
Die Zeichenfolge in einem Stringarray-Element spielt keine Rolle,
weil die Funktion Array-Positionen anordnet (Index-Permutation).
Selbst wenn Elemente mehrfach den gleichen Wert aufweisen,
handelt es sich - auf Index-Ebene - nicht um Wiederholungen!

Beitrag wurde zuletzt am 10.07.16 um 10:39:09 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Sloorg
Datum: 11.07.16 03:56

Hallo Mane,

kann ich nicht beurteilen, weiß ja nicht, wie ich das für meine Zwecke umschreiben soll...
- Wär halt cool gewesen, weil ich grad nen Improvisations-Workshop mache. Aber ich denke, das geht rationeller, wenn man's von Hand schreibt, also

A 8 8 8 8 8 4
A 4 8 8 8 8 8
...

Gruß,
Sloorg.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Sloorg
Datum: 20.07.16 07:41

Hiya,

hab hier die Lösung gefunden - zwar nicht das VB-Programm, aber einen Online Permutation Generator. Das sollte man halt in VB.NET umschreiben können:

http://textmechanic.com/text-tools/combination-permutation-tools/permutation-generator

Gruß, Sloorg!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Franki
Datum: 21.07.16 04:23

Hallo Manfred X
Zitat:

Un dieser Funktionsaufruf funktioniert für deine Zwecke nicht?
http://www.vbarchiv.net/forum/id22_i99557t85833_4-zahlenreihen-alle-moeglichen-kombinationen-ermitteln.html

Das würde ideal funktionieren...
Zitat:


Wie Du einen Rhythmus auf Datenebene definierst (z.B. A 8 8 8
8 8 4) ist mir als Nicht-Musiker leider nicht klar. Es scheint dabei
abwechselnd um eine Mischung aus Noten und Pausen zu gehen?


Genau so ist es, aber was damit weiter passieren soll ist auch mir ein Rätsel. Denn es gibt sehr viele Varianten im Ergebnis die musikalisch gesehen gar keinen Sinn machen. Jede Kombination würde ja auch beinhalten, dass alle Noten am Anfang und alle Pausen am Ende stehen und umgekehrt. Da müsste man dann noch weiter filtern um welchen Grundrhythmus es sich handelt usw. usw.

Und dazu kommt, dass man die Weiterverarbeitung des Ergebnisses ja auch noch bewältigen muss irgendwie.


Zitat:


Selbst wenn Elemente mehrfach den gleichen Wert aufweisen,
handelt es sich - auf Index-Ebene - nicht um
Wiederholungen!


Und das ist ja der entscheidende Punkt in der Musik, es können / sollen gleiche Noten (deren Dauer) und Pausen (deren Dauer) aufeinander folgen.

Gruß,
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Franki
Datum: 21.07.16 04:27

Hallo,

wie du das umschreiben bzw. eher schreiben kannst hat dir Manfred X ja schon sehr ausführlich erklärt. Woran hängt es denn bei dir bei der Umsetzung?

Und wie ich schon im anderen Posting geschrieben bzw. gefragt habe: Was bezweckst du eigentlich damit. Denn mehrere 100 Kombinationen musst du ja irgendwie auswerten können in deinem Programm.

Da musst du ja noch Kriterien einführen welche Konbinationen sinnvoll sind und welche nicht.

Und "von Hand schreiben" kannst du ja bei der Menge gleich vergessen. Kannst du zwar machen, aber dann alles in dein Programm einlesen.

Gib doch mal Info wie du mit dem Tool was du gefunden hast weiter arbeitest.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Sloorg
Datum: 21.07.16 10:21

Hallo Franki,

wie schon gesagt, ich weiß nicht, wie ich das Code-Snippet von Manfred in mein Programm einbauen soll. Klappt nicht.

- Was ich hier mache, ist für fortgeschrittene Solisten. Um es für Nicht-Musiker zu erklären:
Nehmen wir an, du hast einen Rhythmus "umm-ta-ta, umm-ta-ta". Es geht nun darum, diesen Rhythmus zu verändern: 1. Möglichkeit: "ta-ta-umm, ta-ta-umm", 2.: "ta-umm-ta" usw.
Ich setze mich einfach an die Gitarre und probiere alle Möglichkeiten aus und die gut klingenden notiere ich mir... eigentlich ganz einfach. Sogar Beethoven nutzte den mathematischen Aspekt in der Musik.

Hier ein kl. Ausschnitt aus dem PermutationsGenerator: A steht, wie schon erklärt, für 1/8-Pause, darauf 5 folgende 1/8-Noten und eine 1/4-Note:

A888884
A888848
A888884
A888848
A888488
A888488
A888848
A888884
A888848
A888884
A888488
A888488
A888884
A888848
A888884
A888848
A888488
A888488
A884888
A884888
A884888
A884888
A884888
A884888
A888488
A888488... usw.

Ich hab's mir halt in ne Text-Datei ausgeben lassen, und kann so alles schön der Reihe nach durchprobieren; eine gute Übung! Und für die Improvisation eine Menge Stoff! ;>)
Hoffe, du kannst mir folgen.

Schöne Grüße,
Sloorg. ;>)

Beitrag wurde zuletzt am 21.07.16 um 10:32:07 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Sloorg
Datum: 21.07.16 11:10

PS: Mir ist aber aufgefallen, dass dieser PermutationsGenerator auch noch nicht ganz ausgereift ist - bringt einige Zeichenfolgen doppelt...

Hier noch ein Beispiel für Interessierte: Bumm-di-di-di-di-dumm! Das wäre anhand meiner spontanen Zeichenumsetzung: Bumm = 1/4-Note, di = 1/8, dumm = eine punktierte Halbe... dafür muss ich mir noch was einfallen lassen; hab halt derweil in den PG 4 8 8 8 8 4³ eingegeben (eine punktierte Halbe entspricht ja dem Wert von 3 1/4-Noten... was für Tüftler. ;>)

(Ich weiß, 4³ wäre ganz was anderes, nur um es symbolisch irgendwie darzustellen...; wäre halt einfacher, man könnte direkt Noten und Pausenzeichen eingeben... theoretisch wär's machbar, ne?)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Manfred X
Datum: 21.07.16 11:12

Diese Liste kapiere ich nicht.
Wieso kommt z.B. die Folge "A888884" mehrmals vor ??

Beispiel für Permutationen:
Dim sequenz() As Char = {"A"c, "8"c, "8"c, "8"c, "8"c, "8"c, "4"c}
 
Dim sequenzlist As List(Of Char()) = Permutationen_Ohne_Wiederholung(sequenz)
 
'5040 Permutationen (7 * 6 * 5 * 4 * 3 * 2)
For i As Integer = 0 To sequenzlist.Count - 1
 
   For k As Integer = 0 To sequenzlist(i).Length - 1
      Console.Write(sequenzlist(i)(k))
   Next k
 
   Console.WriteLine()
Next i
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Franki
Datum: 22.07.16 02:36

Hallo Manfred,

die Begründung hast du ja selbst genannt in einem deiner vorherigen Posts zu diesem Thema.
Zitat:


Selbst wenn Elemente mehrfach den gleichen Wert aufweisen,
handelt es sich - auf Index-Ebene - nicht um Wiederholungen!


Und bei der Ausgabe kommen dann halt doppelte bzw. mehrfache Ergebnisse raus. Nimm mal als Ausgangsbasis: A A A A, was ist das Ergebnis? A A A A.

Gruß
Frank

Beitrag wurde zuletzt am 22.07.16 um 02:52:04 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Franki
Datum: 22.07.16 03:15

Hallo,

vorab, mit Musik bzw. Noten kenne ich mich aus, habe in meiner Jugendzeit in der Landesjugendbigband von Rheinland-Pfalz Gitarre und Bass gespielt.

Zitat:


Mir ist aber aufgefallen, dass dieser PermutationsGenerator auch noch nicht ganz ausgereift ist - bringt einige Zeichenfolgen doppelt...


Du hast da ein Verständnisproblem meiner Meinung nach. Wenn du identische Werte als Ausgang hast werden diese wie Manfred X ja schon geschrieben hat im Index getrennt behandelt.

Also kann es logischerweise auch zu einer Mehrfachanzeige kommen weil bei der Anzeige ja nicht zwischem den verschiedenen -di- optisch unterschieden werden kann. Bei der Permutation wird das schon unterschieden, ob es sich um das erste, zweite oder dritte -di- handelt, man sieht es nur nicht.

Für dich musikalisch gesehen spielt das ja auch keine Rolle da du nur Zeitwerte erfassen möchtest und keine konkreten Noten.

Gib doch für den Test mal komplett verschiedene Werte ein, z.B. E, A, D, G, H (das letzte e auf der Gitarre spare ich mir jetzt mal) Hast du dann auch doppelte Werte?

Du musst erst mal die Zeitachse festlegen (ist eigentlich Tempo und noch nicht Rhythmus) Und wenn du das hast, dann ist es auch einfacher punktierte Noten einzugeben, oder gar Tempoänderungen zu berücksichtigen.

Du hast halt momentan das Problem den musikalischen Sachverstand mit der Programmierung zusammen zu führen. Deswegen fange mal bei der Basis ganz klein an, wenn du das Prinzip verstanden hast mit ganz einfachen Daten wirst du sehen, dass das gar nicht so schwer ist.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Unterscheidbare Permutationen 
Autor: Manfred X
Datum: 22.07.16 04:49

Hallo!

Ich dachte, es wäre inzwischen klar geworden,
daß die doppelten Serien ausgesondert werden müssen.
 
Dim sequenz() As String = {"A", "8", "8", "8", "8", "8", "4"}
 
Dim sequenzlist As List(Of String()) = _
      Permutationen_Ohne_Wiederholung(sequenz)
 
'Aussonderung der doppelten Folgen
sequenzlist = _
      sequenzlist.Distinct(New StringArrayComparer).ToList
 
'n=42  (Es gibt 21 (7 über 5) Anordnungen der 5 8er-Werte
'       Jede dieser Anordnungen kommt 2x vor)
For i As Integer = 0 To sequenzlist.Count - 1
   For k As Integer = 0 To sequenzlist(i).Length - 1
       Console.Write(sequenzlist(i)(k))
   Next k
   Console.WriteLine()
Next i
Der Comparer ....
Private Class StringArrayComparer
   Implements System.Collections.Generic.IEqualityComparer(Of String())
 
 
   Public Function Equals1(x() As String, y() As String) As Boolean _
   Implements IEqualityComparer(Of String()).Equals
 
      If Not x.Length = y.Length Then Return False
 
      For i As Integer = 0 To x.Length - 1
         If Not x(i) = y(i) Then Return False
      Next i
      Return True
   End Function
 
 
   Public Function GetHashCode1(obj() As String) As Integer _
   Implements IEqualityComparer(Of String()).GetHashCode
 
      Dim hc As Integer, vz As Integer = 1
      For i As Integer = 0 To obj.Length - 1
         vz *= -1
         hc += obj(i).GetHashCode * vz
      Next i
      Return hc.GetHashCode
   End Function
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Unterscheidbare Permutationen 
Autor: Franki
Datum: 24.07.16 01:33

Hallo Manfred X
Zitat:


Ich dachte, es wäre inzwischen klar geworden,
daß die doppelten Serien ausgesondert werden müssen.


Ok, ich bin davon ausgegangen, dass sie das grade nicht dürfen aus musikalicher Sicht, da ja die Noten in der Musik nicht nur eine Dauer haben sondern auch einen Ton. Aber du hast recht, ich habe da zu weit gedacht, da es hier ja gar nicht um die Eigenschaft Ton geht sondern rein um die Dauer.

Aber das hätte Sloorg ja auch bei dem von ihm verlinkten Generator ganz einfach per angebotener Chekbox anklicken können, dass doppelte Ergebnisse eleminiert werden. Ich bin davon ausgegangen, dass er das bewußt nicht gemacht hat.

Wenn man aber das Thema Improvisation in der Musik berücksichtig, könnte es aber evtl. durchaus von Interesse sein, das man die gleichen Serien doch nicht aussondert. Stichtwort Akkorde auf der Gitarre von oben oder unten, in einem Canon bei gleichem Rhythmus zur Tonart und Tempo passende Varianten spielen usw. usw.

Vielleicht baut er ja je nach Bedarf eine Option ein in der der User das einstellen kann...

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Unterscheidbare Permutationen 
Autor: Sloorg
Datum: 24.07.16 19:35

Cool, danke, Manfred! - Kann's noch nicht testen - zieh grade auf einen anderen Rechner um. Erstmal VS Community 15 installieren - mal sehn, ob's hier läuft, denn auf meinem alten ging das nicht; da war VB Expr. '10 das höchste der Gefühle. :P.

Dann bye und 'n schönes WE,
Sloorg.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Unterscheidbare Permutationen 
Autor: Manfred X
Datum: 24.07.16 21:05

Der obige Code ist mit VB 2010 Express - FW 4.0 kompatibel !!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Sloorg
Datum: 25.07.16 09:31

Hiya,

ich hätte hier noch 'nen Code in C#, aber da hab ich leider gar keinen Plan, wie man den ausführen kann... (hat ein Kumpel von mir an der Uni erstellt)

using System;
using System.Linq;
using System.Collections.Generic;
 
class NoteProgram
{
    static public int[] ALLOWED_LENGTHS = new int[] {2, 4, 8, 16};
 
    public static void Main()
    {
        List<String> notes = new List<String>();
 
        // Werte einlesen
        while(true) {
            Console.Write("Notenwert eingeben: ('ENDE' beendet die Eingabe): ");
            String line = Console.ReadLine().Trim();
            int value = 0;
 
            // Ende der Eingabe
            if (line == "ENDE")
                break;
 
            // Validieren der Eingabe
            if (line[0] == '_') {
                if (int.TryParse(line.Substring(1, line.Length - 1), out value) _
                  && ALLOWED_LENGTHS.Contains(value)) {
                    notes.Add(line);
                }
                else {
                    Console.WriteLine("Ignoriere ungueltigen Notenwert {0}", _
                      line);
                }
            }
            else if (int.TryParse(line, out value) && ALLOWED_LENGTHS.Contains( _
              value)) {
                notes.Add(line);
            }
            else {
                Console.WriteLine("Ignoriere ungueltigen Notenwert {0}", line);
            }
        }
 
        // Permutationen finden
        List<List<String>> permutations = FindPermutations(notes);
 
        // Permutationen ausgaben
        Console.WriteLine("Sich ergebende Notenpermutationen:");
        foreach (List<String> permutation in permutations ) {
            foreach (String note in permutation ) {
                Console.Write(" ");
                Console.Write(note);
            }
 
            Console.WriteLine();
        }
    }
 
    /**
     * Alle Permutationen finden und zurückgeben.
     *
     * \param[in] source
     * Zu permutierende Liste.
     *
     * \param key
     * Interner Gebrauch. Nicht von außen setzen.
     *
     * Diese Methode nutzt den hier beschriebenen Algorithmus:
     * <http://stackoverflow.com/a/14444037>.
     */
    private static List<List<String>> FindPermutations(List<String> source, int k = 0)
    {
        List<List<String>> result = new List<List<String>>();
 
        int i = 0;
        for (i=k; i < source.Count; i++) {
            String tmp = source;
            source = source[k];
            source[k] = tmp;
 
            foreach (List<String> permlist in FindPermutations(source, k + 1)) {
                result.Add(permlist);
            }
 
            tmp = source[k];
            source[k] = source;
            source = tmp;
        }
        if (k == source.Count - 1) {
            result.Add(source.GetRange(0, source.Count));
        }
 
        return result;
    }
}
Gruß, Sloorg.

Beitrag wurde zuletzt am 25.07.16 um 09:37:15 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Sloorg
Datum: 25.07.16 09:40

od. der hier wär in Ruby, mit Ausgabe in *.txt-Datei, geht aber leider auch nicht: (evtl. weil er auf Linux programmiert wurde?) Ruby hätte halt den Vorteil, dass solche Algorithmen schon automatisch in der Sprache enthalten sind - was natürlich ein immenser Vorteil ist... (lt. einem Ruby-Pro; habe extra Ruby installiert... aber: "Nichts geht!" - Catweazle! - Schampamporasch! :P

#!/usr/bin/env ruby
 
ALLOWED_LENGTHS = [2, 4, 8, 16].freeze
Note = Struct.new(:length, :is_pause)
 
Dir.chdir(File.dirname(__FILE__))
 
print "Ausgabedatei festlegen: "
path = $stdin.gets.chomp
 
puts "Ausgabe erfolgt nach #{File.expand_path(path)}."
 
notes = []
loop do
  print "Notenwert eingeben ('ENDE' beendet die Eingabe): "
  line = $stdin.gets.chomp
 
  break if line.downcase.strip == "ende"
 
  note = Note.new
  note.is_pause = line.start_with?("_")
 
  length = line.sub("_", "").to_i
  fail "Ungueltige Notenlaenge: #{length}" unless ALLOWED_LENGTHS.include?( _
    length)
 
  note.length = length
  notes << note
end
 
File.open(path, "w") do |file|
  notes.permutation.each do |perm_ary|
    perm_ary.each_with_index do |note, i|
      file.print " " unless i == 0
      file.print "_" if note.is_pause
      file.print note.length
    end
    file.puts
  end
end
 
puts "Fertig."
sleep 5


Beitrag wurde zuletzt am 25.07.16 um 09:50:16 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Manfred X
Datum: 25.07.16 16:01

Ähem ... eigentlich ist das hier ein VB-Forum.

Es macht übrigens keinen praktisch relevanten Unterschied,
ob ein bestimmter Algorithmus bereits in einer Sprache
"integriert" ist oder erst codiert werden muß.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Franki
Datum: 27.07.16 01:27

Hallo Manfred X
Zitat:



Es macht übrigens keinen praktisch relevanten Unterschied,
ob ein bestimmter Algorithmus bereits in einer Sprache
integriert ist oder erst codiert werden
muß.


Wie soll man das denn verstehen?
Ob ein Feature, sei es ein Algo oder sonst was in einen Sprache, Betriebssystem Softwareversion usw. integriert ist oder nicht macht einen erheblichen Unterschied aus.

Wenn integriert, kann man das Feature verwenden ohne es selbst programmieren zu müssen oder können. Wenn nicht, hat man mehr Arbeitsaufwand wenn man es kann, wenn man es nicht kann, ist dieses Feature halt nicht verfügbar.

Grade an diesem Beispiel siehst du ja, dass die ganze Diskussion im Sinne deiner Antwort hier aus dem Ruder gelaufen ist. Du hast Hilfe ohne Ende gegeben, aber trotzdem ist der OP noch nicht zufrieden und sucht nach Alternativen und dann kommen halt auch VB fremde Themen hier zur Sprache.

Und klar, man muss eigentlich für jedes Problem das richtige Werkzeug nehmen, aber wenn man nur einen Hammer hat, dann wird jede Schraube zum Nagel...

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: kocengmalek
Datum: 28.07.16 09:14

I'm thinking to start playing online poker, saw that website, seems to be a good place ...
M88bet | bandar judi bola
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: kocengmalek
Datum: 28.07.16 10:14

definitely a great post
domino qiu qiu
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Manfred X
Datum: 28.07.16 12:07

Hallo!

Eigentlich leicht zu verstehen:
Es ging mir um das Verhalten nach der Implementierung
(Anwendung, Testen, Laufzeit).

Aber genauer:
Abgesehen von Standard-Algorithmen, ist es in den meisten
(nicht.-trivialen) Fällen vorteilhaft, Routinen selbst zu implementieren:

- direkte Anpassung an projektspezifische Anforderungen
- genaue Kenntnis der Arbeitsweise insbesondere in Spezial- und Sonderfällen
(insbesondere: Lückenlose Dokumentation, Überprüfbarkeit in technisch-
wissenschaftlichen oder sicherheitsrelevanten Anwendungen)
- Möglichkeit der Entscheidung, welche Zustände intern abgefangen oder als
Ausnahme ins Projekt geworfen werden
- eventuell: Vermeidung von Lizenz- und Copyright-Beschränkungen
- nahtlose Integration des Aufbaus der Funktions-Prototypen in eigene
Bibliotheken (Logik) bzw. in das Objektmodell der Anwendung
- u.v.a.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 4 Zahlenreihen -- alle möglichen Kombinationen ermitteln 
Autor: Sloorg
Datum: 22.08.16 10:05

Hi Leute,

ich dachte, ich poste hier noch ein grafisches Beispiel, was aus den Permutationen geworden ist (in musikalischer Hinsicht). Da man hier keine Bilder einfügen kann, hier der Link zu meiner Website, hab hier schnell mal 2 Beispiele hochgeladen.
Also, es entstehen mathematisch bzw. programmiertechnisch sehr gute Fills die man zur Improvisation nutzen kann, wenn man sie umzusetzen weiß. (Für Interessierte)
Viel Spaß damit!

http://guitar-sig.jimdo.com/improvisation/

Salut, Sloorg! ;>)
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