Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi In Set or Not in Set? Frage zu Set. (https://www.delphipraxis.net/78517-set-not-set-frage-zu-set.html)

Go2EITS 6. Okt 2006 08:49


In Set or Not in Set? Frage zu Set.
 
Guten Morgen DP User!

Mal wieder eine Anfängerfrage. (Ich habe in handbüchnern, Delphi Hilfe und Goggle gesucht, konnte die Angaben nicht umsetzen, weil das Beispiel dafür fehlte.)
Es sei gegeben:
Wenn "Ch" im Set "set1" ist, dann "True" sonst "False".

Delphi-Quellcode:
Function IsOk(Ch:Char):Boolean;
TYPE
  TIntSet = set of char;
VAR
 Set1:TIntSet;
begin
Set1:=[#1..#128,#228,#246,#252,#196,#214,#220,#223];

if ch in set1 
   then
     begin
     Result:=true;
     Exit;
     end
   else
     Result:=False;

end;//Function IsOK

//Müsste True anzeigen
procedure TForm1.Button1Click(Sender: TObject);
begin
if IsOk('a') then ShowMessage('True') else
ShowMessage('False') ;
end;
Meine Frage:
Ich möchte wissen, wenn etwas nicht im Set ist.
NOT wie z. B. "if ch not set1 then" funktioniert nicht und '<>' auch nicht.
Da mache ich irgendetwas falsch. :gruebel:

Wisst Ihr weiter?
Beste Grüße
Go2EITS

Daniel 6. Okt 2006 08:50

Re: In Set or Not in Set? Frage zu Set.
 
Wenn der eine Weg geht ... if c in set then, dann kannst Du die Logik einfach umdrehen: if not (c in set) then ...

mkinzler 6. Okt 2006 08:52

Re: In Set or Not in Set? Frage zu Set.
 
not in sollte eigentlich gehen
Notfalls
Delphi-Quellcode:
 not (ch in ...)

Go2EITS 6. Okt 2006 09:04

Re: In Set or Not in Set? Frage zu Set.
 
@mkinzler
Das hatte ich als erstes probiert. Das "not in" geht nicht. (u.v.m.)

@Daniel und @Mkinzler
Dein " if not (c in set) then ..." funtioniert bestens.
Wenn Ihr wüsstest, wie lange ich gesucht habe. Dass man Klammern setzten muss... Darauf wäre ich nie gekommen.

Vielen Dank für die schnelle Antwort. :thumb:
Eine wichtige Grundsatzfrage geklärt.
CU! Go2EITS

Elvis 6. Okt 2006 09:06

Re: In Set or Not in Set? Frage zu Set.
 
Zitat:

Zitat von Go2EITS
Delphi-Quellcode:
Function IsOk(Ch:Char):Boolean;
TYPE
  TIntSet = set of char;
VAR
 Set1:TIntSet;
begin
Set1:=

if ch in set1 
   then
     begin
     Result:=true;
     Exit;
     end
   else
     Result:=False;

end;//Function IsOK

urrkks... :? Wo hast du denn den Code her?
Warum nicht einfach so?
Delphi-Quellcode:
function IsBlablaChar(const c : Char) : Boolean;
begin
  result := not (c in [#1..#128, #228, #246, #252, #196, #214, #220, #223]);
end;

Go2EITS 6. Okt 2006 09:24

Re: In Set or Not in Set? Frage zu Set.
 
@Elvis
:oops: ähhm...mein Code.
Genial! :shock: Die Verwendung von Result ist so natürlich beispielhaft. Was für ein Unterschied zu meinen Code. :thumb:
Beste Grüße Go2EITS

negaH 6. Okt 2006 10:34

Re: In Set or Not in Set? Frage zu Set.
 
Delphi-Quellcode:
if Set * [Ch] <> [] then "Ch in Set"
if Set * [Ch] = [] then "Ch not in Set"
Gruß Hagen

Go2EITS 6. Okt 2006 11:32

Re: In Set or Not in Set? Frage zu Set.
 
[EDIT] Überschwang raus.[\EDIT]
Das ist bestimmt nicht mehr zu toppen. Hab es kopiert und probiere ich mal aus. :thumb:
Beste Grüße von Go2EITS

3_of_8 6. Okt 2006 11:49

Re: In Set or Not in Set? Frage zu Set.
 
Wurde der Operator <> für Sets überladen? Wie denn? Also was bewirkt der auf Sets angewandt?

Dax 6. Okt 2006 11:52

Re: In Set or Not in Set? Frage zu Set.
 
Zitat:

Zitat von 3_of_8
Wurde der Operator <> für Sets überladen? Wie denn? Also was bewirkt der auf Sets angewandt?

Nein, wurde er nicht. Was denkst du denn bitte? :roll:

<> ist <>, oder != in php/C-Derivaten... Einfache Ungleichheit :tongue:

chaosben 6. Okt 2006 11:54

Re: In Set or Not in Set? Frage zu Set.
 
Und wem Hagens unglaublicher Code noch nicht reicht, kann hier weiterlesen. :)

3_of_8 6. Okt 2006 11:57

Re: In Set or Not in Set? Frage zu Set.
 
Zitat:

Zitat von Dax
Zitat:

Zitat von 3_of_8
Wurde der Operator <> für Sets überladen? Wie denn? Also was bewirkt der auf Sets angewandt?

Nein, wurde er nicht. Was denkst du denn bitte? :roll:

<> ist <>, oder != in php/C-Derivaten... Einfache Ungleichheit :tongue:

Sorry, ich hab mich verschrieben... Ich meinte den Operator *.

(Ich hab zu wenig Schlaf...)

Dax 6. Okt 2006 12:11

Re: In Set or Not in Set? Frage zu Set.
 
Zitat:

Zitat von 3_of_8
Sorry, ich hab mich verschrieben... Ich meinte den Operator *.

Achsoo.. Na dann is das natürlich was anderes :mrgreen:

SetA * SetB = SetC

Ermittelt die Schnittmenge von SetA und SetB.

3_of_8 6. Okt 2006 12:27

Re: In Set or Not in Set? Frage zu Set.
 
Verstehe... Irgendwie unlogisch, denn eine Multiplikation von Mengen ist normalerweise was anderes...

Dax 6. Okt 2006 12:32

Re: In Set or Not in Set? Frage zu Set.
 
Es gibt keine Multiplikation von Mengen, oder? Mir sind nur Schnitt, Vereinigung und Subtraktions bekannt.. Eine Negation zwar auch, aber das ist ja "nur" eine Subtraktion der Menge von der Allmenge.

PS: Den Schnitt zweier Mengen kann man nicht nur über das korrekte mathematische Symbol bezeichnen, sondern auch mit einem X. Macht ja auch Sinn. Aber da es keinen X-Operator gibt, und das X auch gern für die Multiplikation geschrieben wird, ham se wohl deshalb das genommen.. :gruebel:

Go2EITS 6. Okt 2006 12:38

Re: In Set or Not in Set? Frage zu Set.
 
Ich glaube, nur an einem praktischen Beispiel kann man Hagens Code testen.
Ich brauche zu lang. Bin gerade mit dem NOT zurecht gekommen.
Was ist dann X + Z =Y sollte nicht das die gesamte Menge aus X+y ergeben?
Und ist nicht X - Z = Y d. H. Y birgt alle X minus der in Z befindlichen Elemente?

Lustig: Hagen weg und wir sind wieder alleingelassen. :-D

3_of_8 6. Okt 2006 13:04

Re: In Set or Not in Set? Frage zu Set.
 
Zitat:

Zitat von Dax
Es gibt keine Multiplikation von Mengen, oder? Mir sind nur Schnitt, Vereinigung und Subtraktions bekannt.. Eine Negation zwar auch, aber das ist ja "nur" eine Subtraktion der Menge von der Allmenge.

PS: Den Schnitt zweier Mengen kann man nicht nur über das korrekte mathematische Symbol bezeichnen, sondern auch mit einem X. Macht ja auch Sinn. Aber da es keinen X-Operator gibt, und das X auch gern für die Multiplikation geschrieben wird, ham se wohl deshalb das genommen.. :gruebel:

Natürlich gibt es eine Mengenmultiplikation.

M*N ist eine Menge von geordneten Paaren (m, n) wobei m Element M und n Element N.

negaH 6. Okt 2006 13:14

Re: In Set or Not in Set? Frage zu Set.
 
Zitat:

Lustig: Hagen weg und wir sind wieder alleingelassen.
Also sorry mal, was kann ich dafür das du eine enorm überschwengliche Natur bist. Freude und Leid scheint ja bei dir ziemlich zu schwanken, das kenne ich so nur bei Frauen ;)

Sieh einfach in der Delphi Hilfe nach und ließ dich dort in die Mengen ein.
Ich habe nur den Hinweis gegeben das man mit Mengen auch rechnen kann, logisch eigentlich, da es eben Mathematik ist.

Gruß Hagen

PS: @Hagen! Unbelievable Siehe hier...
Danke für den Tipp was "unglaublich" auf englisch heist, wusste ich noch garnicht ;) Naja wie auch meine Programme schreibe ich ja auf Russisch ;)

Go2EITS 6. Okt 2006 13:23

Re: In Set or Not in Set? Frage zu Set.
 
@hagen: Das Du es wußtest war mir klar.
In der Hilfe habe ich nachgesehen u. v. m Die Beispiele sind da ja sooo aussagekräftig. Hab eben nicht studiert. Überschenglich? Sollte etwas scherzhaft sein, aber nicht abwertend. Gute Codes sind selten.
[Edit] Text verschlimmbessert.[/Edit]

negaH 6. Okt 2006 13:37

Re: In Set or Not in Set? Frage zu Set.
 
Delphi Hilfe "Mengenoperatoren"

erklärt eigentlich alles. Wenn du dazu noch Fragen hast dann stelle sie hier, ich beantworte sie gerne ;)

Gruß Hagen

Go2EITS 6. Okt 2006 14:07

Re: In Set or Not in Set? Frage zu Set.
 
@hagen
Vielen Dank für das freundliche Angebot. :thumb:
Ich sehe nochmal unter D7 und TD2006 nach.
Aber mein Problem mit not ist soweit gelöst, da habe ich schon ewig getüftelt.

Beste Grüße
Go2EITS

3_of_8 6. Okt 2006 14:31

Re: In Set or Not in Set? Frage zu Set.
 
Ähm dumme Frage, hatte ich oben Recht mit der Mengenmultiplikation?

Go2EITS 6. Okt 2006 14:40

Re: In Set or Not in Set? Frage zu Set.
 
Schulterzucken-Smilie

Klaus01 6. Okt 2006 14:44

Re: In Set or Not in Set? Frage zu Set.
 
Code:
The following operators take sets as operands.

Operator   Operation   Operand types   Result type   Example
+   union   set   set   Set1 + Set2
–   difference   set   set   S - T
*   intersection   set   set   S * T
<=   subset   set   Boolean   Q <= MySet
>=   superset   set   Boolean   S1 >= S2
=   equality   set   Boolean   S2 = MySet
<>   inequality   set   Boolean   MySet <> S1
in   membership   ordinal, set   Boolean   A in Set1

The following rules apply to +, –, and *.

An ordinal O is in X + Y if and only if O is in X or Y (or both). O is in X – Y if and only if O is in X but not in Y. O is in X * Y if and only if O is in both X and Y.
   The result of a +, –, or * operation is of the type set of A..B, where A is the smallest ordinal value in the result set and B is the largest.

The following rules apply to <=, >=, =, <>, and in.

X <= Y is True just in case every member of X is a member of Y; Z >= W is equivalent to W <= Z. U = V is True just in case U and V contain exactly the same members; otherwise, U <> V is True.
   For an ordinal O and a set S, O in S is True just in case O is a member of S.
wobei Intersection = Schnittmenge ist.

Grüße
Klaus

Go2EITS 6. Okt 2006 14:56

Re: In Set or Not in Set? Frage zu Set.
 
Delphi-Quellcode:
TYPE
  TIntSet = set of char;
VAR
Set1,set2,set3:TIntSet;
begin
Set1:=[#1..#128];
set2:=[#228,#246];
set3:=set1*set2;
Das funktioniert nun schon, auch wenn wir von der Frage, die ja eigentlich beantwortet ist, seit Hagen abschweifen. Und nun, was ist in set3 drin? Wie kann ich es anzeigen?

Klaus01 6. Okt 2006 15:11

Re: In Set or Not in Set? Frage zu Set.
 
Soweit ich das überblicke, kannst Du nir auf leere oder nicht leere Menge Prüfen
und direkt abfragen ob ein Element in dem Set vorhanden ist.
if .. in ..

Grüße
Klaus


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

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