Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Abfrage von Zahlen in einem SET (https://www.delphipraxis.net/37907-abfrage-von-zahlen-einem-set.html)

hackie3of5 12. Jan 2005 00:35


Abfrage von Zahlen in einem SET
 
Hallo!
Ich habe da ein programmiertechnisches Problem und muss mein Programm bis morgen fertig haben. Wäre cool, wenn ich eine Antwort bekommen würde, aber ich bin's ja selbst schuld :?
Also, ich habe ein Set mit verschiedenen Zahlen. Um zu gucken, ob eine bestimmte Zahl in dem Set ist, kann ich ja "If a in Menge then..." benutzen. Wie kann ich aber jetzt überprüfen, ob die Zahl zweimal enthalten ist? Es soll nur eine Aktion ausgeführt werden, wenn die Zahl zweimal vorhanden ist.

Naja, über eine Antwort wäre ich sehr dankbar!
Schöne Nacht noch,

Rüdiger

Robert_G 12. Jan 2005 00:41

Re: Abfrage von Zahlen einem SET
 
Wie soll die gleiche Zahl zwimal in einer Menge vorkommen?

eins = 1 -> 0001
zwei = 2 -> 0010
drei = 4 -> 0100
vier = 8 -> 1000

Code:
Menge := Eins;
-> 0001
Menge := Menge + Eins;
-> 0001
Denn ansonsten wäre es ja schon die 2
-> 0010
Code:
Menge := Eins;
-> 0001
Menge := Menge + Eins;
-> 0001
Menge := Menge + Zwei;
-> 0011
Aber vielleicht ist es auch schon zu spät für mich. ;)

Hansa 12. Jan 2005 00:51

Re: Abfrage von Zahlen in einem SET
 
Was Robert da sagt verstehe ich jetzt nicht. 8) Aber IN bedeutet nur, daß ein Wert in der Menge = Set enthalten ist. Jedoch nicht wie oft. Ist es möglich, daß etwas mehrmals da ist, dann vergesse das Set und benutze ein Array.

[Edit]
Zitat:

und muss mein Programm bis morgen fertig haben
Das wird wohl nichts werden. :mrgreen: Der Unterschied ist schon sehr bedeutend !

hackie3of5 12. Jan 2005 00:59

Re: Abfrage von Zahlen in einem SET
 
Ok, an die Arbeit... :(
Naja, vielen Dank! Ich werd's einfach anders aufbauen, vielleicht bekomm ich ja noch ne Gnadenfrist von meinem Lehrer *g*

kiar 12. Jan 2005 01:03

Re: Abfrage von Zahlen in einem SET
 
hallo häckie , schon mal in der hilfe von delphi geschaut ?

z.B
Mengen

Robert_G 12. Jan 2005 01:19

Re: Abfrage von Zahlen in einem SET
 
Da ich nicht mehr so fit in Delphi bin habe ich es gerade mal getestet:

Delphi-Quellcode:
program SetTest;

{$APPTYPE CONSOLE}
uses SysUtils;

type
   TSomeSet = set of (eins,
zwei,
drei,
vier);

procedure PrintSet(const aMenge: TSomeSet);
begin
   Writeln(Ord(PChar(@aMenge)^));
end;

var
   Menge            : TSomeSet;
begin
   Menge := [eins];
   PrintSet(Menge);
   Menge := [zwei];
   PrintSet(Menge);
   Menge := [drei];
   PrintSet(Menge);
   Menge := [vier];
   PrintSet(Menge);

   Writeln('--------------');

   Menge := [eins];
   PrintSet(Menge);
   Menge := Menge + [eins];
   PrintSet(Menge);
   Menge := Menge + [zwei];
   PrintSet(Menge);
   Sleep(5000);
end.

Wie ich nicht anders erwartet habe bekomme ich:
Code:
1
2
4
8
--------------
1
1
3

Christian Seehase 12. Jan 2005 02:43

Re: Abfrage von Zahlen in einem SET
 
Moin Rüdiger,

Zitat:

Zitat von hackie3of5
Wie kann ich aber jetzt überprüfen, ob die Zahl zweimal enthalten ist?

Gar nicht.
Eine Menge kann jedes Element des Sets nur einmal enthalten.

Würde es gehen, könnte man es so machen:

Delphi-Quellcode:
type
  Zahl = (eins,zwei,drei,vier);
  Zahlen = set of Zahl;

var
  zWork : Zahl;
  znWork : Zahlen;

begin
  zWork := zwei;
  znWork := [eins,zwei,zwei,vier];
  znWork := znWork - [zWork];
  if (zWork in znWork) and (zWork in (znWork - [zWork])) then begin
    ShowMessage('Zweimal');
  end;
end;
Wie man aber leicht am Ergebnis sehen kann: Es kommt keine Meldung.
Du kannst das auch mal im Einzelschritt durchgehen, und Dir die Werte von znWork mal anschauen.

Robert hat es in seinem ersten Beitrag veranschaulicht:
Die Menge [...] ist nur ein Bitfeld.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 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