1 1 1 1 1 1 1 1 1 1 Rating 0.00 (0 Votes)

Problemstellung:
In einem 100m Rennen treten 8 Läufer an.
Es geht um Gold, Silber und Bronze.
Wieviele Möglichkeiten der Belegung der Plätze 1-3 gibt es?

Voraussetzungen:
Das Bsp ist ab A00 lauffähig.

Lösung:
Zuerst benötigen wir gesamte Anzahl der Möglichkeiten.
Die Fakultät (math. Zeichen !) ist das Produkt der natürlichen Zahlen von 1 bis n definiert.
Es sind nur positive Ganzzahlen möglich. Werte über 170 können mit VB(A) nicht berechnet werden.
Mathematische Formel:
n!=1*2*3*4*...*n

In VBA gibt es zur Berechnung mehrere Lösungen, hier nur eine Möglichkeit
Public Function Fakultaet(ByVal intN As Integer) As Variant
  Dim dblFakultaet As Double
  Dim lngZaehler As Long
  On Error Resume Next
  dblFakultaet = 1
  For lngZaehler = 1 To intN
    dblFakultaet = dblFakultaet * lngZaehler
  Next lngZaehler
  If Err = False Then
    Fakultaet = dblFakultaet
  Else
    Fakultaet = "Fehler!"
    Err.Clear
  End If
  On Error GoTo 0
End Function
Für unser Bsp. ergäbe das also:
1*2*3*4*5*6*7*8=40320
Möglichkeiten
Jetzt wollten wir aber nur die Anzahl der Möglichkeiten haben mit denen die Plätze 1-3 belegt werden können.
Hier kommt dann die Variation zum Einsatz.
Mathematische Formel:
x=n!/(n-k)!
In VBA:
Public Function Variation(iAllElements As Integer, iSelectElements As Integer) As Long
    Dim nFakultaet As Long
    Dim nElemente As Long
    nFakultaet = Fakultaet(iAllElements)
    nElemente = Fakultaet(iAllElements - iSelectElements)
    Variation = nFakultaet / nElemente
End Function
Für unser Bsp: x=40230/120=336
Also ergeben sich 336 Möglichkeiten bei 8 Läufern wie die Plazierung der Plätze 1-3 belegt sein können.
 
Jetzt möchte wir aber auch noch die Namen der Plazierten haben.
Somit kommen wir nun zur Permutation.
 
Den Code könnt Ihr der Bsp-DB entnehmen.
Der Aufruf sähe dann so aus:
Private Sub cmd_CreatePermut_Click()
Dim i As Long, j As Long, k As Long
Dim TmpSArray() As String
Dim sTmp As String, sResult As String
Me.Text1 = Null
If Me.txt_Tiefe = 0 Or IsNull(Me.txt_Tiefe) Then Me.txt_Tiefe = 3
txt_CountVari = Variation(8, Me.txt_Tiefe)
For i = 1 To Me.txt_Tiefe
    sTmp = PermutateString(1, i, "Beier|Büttner|Heinze|Kunze|Müller|Schmidt|Mayer|Dietze")
Next i
TmpSArray = Split(sTmp, "|", , vbTextCompare)
    k = 0
    For j = LBound(TmpSArray) To UBound(TmpSArray)
        If TmpSArray(j) <> "" Then
            k = k + 1
            sResult = sResult & "[" & k & "] " & TmpSArray(j) & vbNewLine
        End If
    Next j
    Me.Text1 = sResult
End Sub
Wir über geben der Funktion in diesem Fall die Anzahl der Plätze die wir haben wollen in unserem Fall=3
und die Namen="Beier|Büttner|Heinze|Kunze|Müller|Schmidt|Mayer|Dietze"
Als Trennzeichen bitte das Pipesymbol (|) verwenden.
Der Aufruf erstellt uns eine Liste mit den 336 Möglichkeiten der Belegung der Plätze 1-3
 
 
 
 
Dateien:

Arbeiten mit Fakultät, Variationen und Permutationen

ab A00

Die Zip-Datei enthält eine Version ab A00

Datum 05.02.2018
Dateigröße 29.16 KB
Download 495
 
 

Ähnliche Artikel

Kommentar schreiben

Sicherheitscode
Aktualisieren

Login Form

Neueste Artikel

Problemstellung:In MS-Access ist es mit Bordmitteln nicht möglich Zeiten über 24 Stunden zu berechnenIn dieser Bsp-DB möchte ich zeigen wie es trotzdem geht. Voraussetzungen:Das Bsp ist ab A2007...
1.png2.png0.png4.png2.png1.png2.png
Heute112
Gestern145
Diese Woche257
Dieser Monat1636
Total1204212

  • IP: 54.92.190.11
  • Browser: Unknown
  • Version:
  • OS: Unknown

Online

1
Online

18. September 2018

Letzte Kommentare

  • Trusted Locations Manager

    Tommy Admin 13.07.2018 13:06
    RE: Trusted Locations Manager
    Hallo Matthias, aus Ermangelung einer 64bit Version kann ich das leider nicht prüfen. Tut mir leid. Gruss ...

    Weiterlesen...

     
  • Trusted Locations Manager

    Matthias 13.07.2018 06:48
    Funktioniert nicht
    Habe gerade den TL-Manager installiert. Nach dem Start sagt er mir, dass es kein Office erkennen ...

    Weiterlesen...