Autor |
Beitrag |
Herbie
Hält's aus hier
Beiträge: 9
Win 2000, Win XP
D6 Ent
|
Verfasst: Mi 04.05.05 14:54
Hallo zusammen,
möchte ein Muster erstellen, um die Kombinationen von mehreren Elementen zueinander, darzustellen. Ein Element ist dabei immer fest – Beispiel:
E1_______E2_______E3_______E4
____________________________X
X___________________________X
__________X_________________X
__________________X_________X
X_________X_________________X
X_________X_______X_________X
X_________________X_________X
__________X_______X_________X
Formel: ((Element-Anzahl - 1) ²) – 1 = 8 Kombinationen
Jetzt sollen nicht nur 4 Elemente wie im obigen Beispiel kombiniert werden, sondern die Element-Anzahl kann zwischen 1 und 20 variieren.
Wie kann ich denn solch ein Muster flexibel mit Delphi erstellen?
Bin für jeden Tipp sehr dankbar, denn irgendwie komme ich nicht weiter!
_________________ Gruss
Herbie
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 04.05.05 14:57
Sieht irgendwie nach TStringGrid aus.
|
|
Herbie 
Hält's aus hier
Beiträge: 9
Win 2000, Win XP
D6 Ent
|
Verfasst: Mi 04.05.05 16:13
Hallo jasocul
jasocul hat folgendes geschrieben: | Sieht irgendwie nach TStringGrid aus. |
Ja möchte das Ganze in ein Grid reinpacken. Aber mir gehts erst einmal darum sämtliche Kombinationen sauber aufzubauen, damit ich keine vergesse.
Bei 4 Elementen ist das Ganze ja noch überschaubar. Aber wenn ich z.B. 10
Elemente habe, wird's ganz schön komplex (10 Elemente = 9 ² - 1 = 511 Kombinationen, wenn ich mich nicht verrechnet habe).
_________________ Gruss
Herbie
|
|
Spaceguide
      
Beiträge: 552
(D3/D7/D8) Prof.
|
Verfasst: Mi 04.05.05 18:42
Herbie hat folgendes geschrieben: |
(10 Elemente = 9 ² - 1 = 511 Kombinationen, wenn ich mich nicht verrechnet habe).
|
Deine Formel ist irgendwie falsch. Die leere Menge beinhaltend, hat die Potenzmenge aus n Elementen eine Mächtigkeit von 2^n.
Zuletzt bearbeitet von Spaceguide am Do 05.05.05 18:21, insgesamt 1-mal bearbeitet
|
|
Spaceguide
      
Beiträge: 552
(D3/D7/D8) Prof.
|
Verfasst: Mi 04.05.05 18:47
Notiz an mich: Lern erstmal zu quoten
Wenn du einfach alle Kombination raushaben willst, kannst du natürlich auch einfach alle Zahlen von 1 (ohne leere Menge) bis 2^n durchgehen und die Bits in Binärdarstellung prüfen. z.B. dein Beispiel
Zahl Bitmuster
1 0001
2 0010
3 0011
4 0100
5 0101
...
...
15 1111
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Mi 04.05.05 19:08
Um direkt rauszufinden ob in der i-ten Kombinationsmöglichkeit das j-te Element enthalten ist, kannst du die folgende Formel benützen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| const n = 4; var i, j: Integer; begin for i := 0 to 1 shl n - 1 do for j := 0 to n - 1 do if i and (1 shl j) <> 0 then ShowMessage(Format('%d. Kombination: %d ist in der Menge ',[i,j])) else ShowMessage(Format('%d. Kombination: %d ist nicht in der Menge ',[i,j])); end; |
Sonst kannst du wie schon von Spaceguide erwähnt die Zahl i ins Binärsystem umrechnen, das ist natürlich dasselbe. Im Forum sollte es genügend Funktionen geben, die genau das tun.
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 04.05.05 21:22
|
|
Herbie 
Hält's aus hier
Beiträge: 9
Win 2000, Win XP
D6 Ent
|
Verfasst: Do 05.05.05 21:50
Erst mal danke an delfiphan und Spaceguide.
Irgendwie checke ich das Ganze leider immer noch nicht.
Wie muss ich denn z.B. jetzt vorgehen wenn ich ein Muster von 20 Zahlenkombinationen erstellen möchte?
Erst die Anzahl der Kombinationen errechnen und dann...? - power(20,2)
An Spaceguide:
"alle Zahlen von 1 (ohne leere Menge) bis 2^n durchgehen"
Wie mache ich das in Delphi ? Wie kommst Du zu dem Bitmuster wie in Deinem Beispiel,
wenn ich z.B. 20 Elemente habe?
Ich weiß ich nerve, aber irgendwie steh ich auf dem Schlauch. Das mit dem Bitmuster wäre super, könnte mir dann die einzelnen Zeilen des Bitmusters in eine Liste schreiben und die Liste dann rekursiv durchgehen und ein Grid-Anzeige entsprechend dem Bitmuster aufbauen.
_________________ Gruss
Herbie
|
|
Spaceguide
      
Beiträge: 552
(D3/D7/D8) Prof.
|
Verfasst: Fr 06.05.05 11:07
Hmm, Delfiphan hat das eigentlich schon recht einfach gemacht.
Nehmen wir diese Funktion hier:
Delphi-Quelltext 1: 2: 3: 4: 5:
| function ElementInMenge(aPermutation : integer; aElement : integer) : boolean; begin Result := boolean(aPermutation and (1 shl aElement)); end; |
Jetzt kannst du da einfach eine zweidimensionale Schleife durchgehen und z.B. in einen TStringgrid ein x schreiben, wo die Funktion true zurückgibt.
|
|
Allesquarks
      
Beiträge: 510
Win XP Prof
Delphi 7 E
|
Verfasst: Fr 06.05.05 17:44
Je nachdem ob du verschiedene Elemente oder auch mal gleiche verwendest verändert sich die Anzahl. In einem Buch unter Statisktik wirst Su unter "Permutationen" oder "Kombinationen" fündig werden, falls du in dieser Hinsicht überhauüt unterscheiden möchtest.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Fr 06.05.05 17:49
@Spaceguide: Permutation = Vertauschung. Z.B. Eine Permutation von 1234 wäre 3124. Deine Variable aPermutation müsste ACombination (oder anders) heissen, da es hier nicht um Permutationen geht.
|
|
Spaceguide
      
Beiträge: 552
(D3/D7/D8) Prof.
|
Verfasst: Sa 07.05.05 13:54
Nennen wir es korrekterweise aMengensystem 
|
|
Herbie 
Hält's aus hier
Beiträge: 9
Win 2000, Win XP
D6 Ent
|
Verfasst: Mo 09.05.05 13:11
An alle, die mir geantwortet haben: Vielen Dank. Ihr habt mir sehr weitergeholfen. Jetzt funktioniert das Ganze. War wirklich auf der Leitung gesessen 
_________________ Gruss
Herbie
|
|