Autor Beitrag
Herbie
Hält's aus hier
Beiträge: 9

Win 2000, Win XP
D6 Ent
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 04.05.05 14:57 
Sieht irgendwie nach TStringGrid aus.
Herbie Threadstarter
Hält's aus hier
Beiträge: 9

Win 2000, Win XP
D6 Ent
BeitragVerfasst: Mi 04.05.05 16:13 
Hallo jasocul

user profile iconjasocul 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Mi 04.05.05 18:42 
user profile iconHerbie 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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:
ausblenden 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 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 user profile iconSpaceguide 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 04.05.05 21:22 
user profile iconSpaceguide hat folgendes geschrieben:
Notiz an mich: Lern erstmal zu quoten ;-)

Dann editier doch bitte den Beitrag. Sonst denkt wirklich noch jemand, dass das von mir ist. :roll:
Herbie Threadstarter
Hält's aus hier
Beiträge: 9

Win 2000, Win XP
D6 Ent
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Fr 06.05.05 11:07 
Hmm, Delfiphan hat das eigentlich schon recht einfach gemacht.
Nehmen wir diese Funktion hier:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
function ElementInMenge(aPermutation : integer; aElement : integer) : boolean;
//aPermutation = 0..2^n-1, aElement = 0..n-1, n=Anzahl Elemente
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Sa 07.05.05 13:54 
Nennen wir es korrekterweise aMengensystem :)
Herbie Threadstarter
Hält's aus hier
Beiträge: 9

Win 2000, Win XP
D6 Ent
BeitragVerfasst: 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 :D

_________________
Gruss
Herbie