Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Mengenoperatoren (https://www.delphipraxis.net/33006-mengenoperatoren.html)

Pseudemys Nelsoni 31. Okt 2004 12:24


Mengenoperatoren
 
moin 8)

Kann mir jemand die Mengenoperatoren erklären und die syntax wie man sie anwendet zeigen?

in google wird unter "delphi mengenoperatoren" gerade mal 1 1/2 seiten angezeigt... super.

Die Delphi hilfe kapier ich nicht ganz, da ist mir zuviel O X Y usw drin....

xineohp 31. Okt 2004 13:15

Re: Mengenoperatoren
 
moin,

die OH ist hier zwar knapp bemessen, aber das wichtigste sagt sie dann doch :wink: nur halt in der mathematischen Kurzversion :mrgreen:

Hier nochmal ausführlicher:

A := [1,2,3]
B := [3,4,5]

+
Der + Operator bildet die Vereinigungsmenge aus den Operanden. D.h. im Ergebnis befinden sich alle Elemente die in A und/oder B enthalten sind: A+B = [1,2,3,4,5]

-
Der - Operator bildet die Differenzmenge. D.h. im Ergebnis befinden siach alle Elemente die in A aber nicht in B enthalten sind: A-B = [1,2]

*
Der * Operator bildet die Schnittmenge aus den Operanden. D.h. im Ergebnis befinden sich alle Elemente die sowohl in A als auch in B entahlten sind: A*B = [3]


soweit dazu. Fortsetzung folgt :mrgreen:

Pseudemys Nelsoni 31. Okt 2004 13:21

Re: Mengenoperatoren
 
moin xineohp,

danke für die beschreibung :thumb:

dennoch versteh ich sie nicht ( :mrgreen: )..ich weiss ehrlich gesagt nicht wofür A und B stehen.
Sagen wir mal ich habe folgendes:

Delphi-Quellcode:
type
  tmyset = set of (asdf, qwert);

...

var
  myset: tmyset;
begin
  // wie mach ich das nun wenn ich wissen möchte ob sowohol "asdf" als auch "qwert" drinnen sind?
  if ([asdf, qwert] * myset) then...
  //so? (geht leider nicht) :\
end;

Robert Marquardt 31. Okt 2004 13:22

Re: Mengenoperatoren
 
Sets (Mengen) sind in Delphi einfach Bit-Arrays. Die Groesse ist auf 8 Bytes beschraenkt, also maximal 256 Elemente.
Code:
+-------+---+-------+
|   A  | C |   B  |
+-------+---+-------+
Das soll das klassische Diagramm mit zwei ueberschneidenden Kreisen sein.
AC ist die eine Menge und CB die andere. C ist die Schnittmenge.
In Delphi ist A * B die Schnittmenge, also AC * CB = C.
AC - CB = A, CB - AC = B, A + C = AC, C + B = B + C = CB.
Dann gibt es noch den Operator "in" mit booleschem Ergebnis, der schlicht prueft ob ein bestimmtes Element im Set ist.

alcaeus 31. Okt 2004 13:24

Re: Mengenoperatoren
 
Hi Pseudemys Nelsoni,

Zitat:

Zitat von Pseudemys Nelsoni
Delphi-Quellcode:
type
  tmyset = set of (asdf, qwert);

...

var
  myset: tmyset;
begin
  // wie mach ich das nun wenn ich wissen möchte ob sowohol "asdf" als auch "qwert" drinnen sind?
  if ([asdf, qwert] * myset) then...
  //so? (geht leider nicht) :\
end;

der Code ist auch nur fast richtig.
Delphi-Quellcode:
if ([asdf, qwert] * myset = [asdf, qwert]) then...
müsste stimmen.

Greetz
alcaeus

Dax 31. Okt 2004 13:28

Re: Mengenoperatoren
 
Ich hoffe mal dass das hier hilft. 8)

Pseudemys Nelsoni 31. Okt 2004 13:29

Re: Mengenoperatoren
 
danke euch 4, nun verstehe ichs auch :)

xineohp 31. Okt 2004 13:31

Re: Mengenoperatoren
 
Zitat:

Zitat von xineohp
A := [1,2,3]
B := [3,4,5]

soviel mal gleich am Anfang zur Frage was den A und B seien :roll: sagt ja sehr viel aus wie gründlich du liest :mrgreen:

zu deinem Beispiel:
Delphi-Quellcode:
If ([awert,bwert]*myset = [awert,bwert]) then // ...
Der * Operator gibt die Elemente zurück die sowohl in A (hier: A=[awert,bwert]) als auch in B (hier: B=myset) enthalten sind. D.h. das Ergebnis von A*B ist eine Menge! kein boolscher Ausdruck! Wenn du jetzt überprüfst ob die Schnittmenge aus A und B gleich A ist, dann ist klar das A in B enthalten ist.

xineohp 31. Okt 2004 13:34

Re: Mengenoperatoren
 
Andererseits müsste auch
Delphi-Quellcode:
If ([awert,bwert]<=myset) then //...
zum gewünschten Ergebnis führen.

Robert Marquardt 31. Okt 2004 13:34

Re: Mengenoperatoren
 
Es geht auch "if myset >= [asdf, qwert] then", denn die Vergleichsoperatoren sind auch alle definiert.
A > B gilt wenn B eine echte Teilmenge von A ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz