![]() |
Problem mit Mengen
Also irgendwie steh ich aufm Schlauch :
Delphi-Quellcode:
Da kommt bei der Zeile die Meldung das ein Ordinaltyp erforderlich sei :roll:
type
TGegeben = set of (Radius,Hoehe,Umfang,Grundflaeche,Volumen,Oberflaeche); var Geg : TGegeben; procedure KeineAhnung; begin Geg := Geg + [Hoehe]; // "Ordinaltyp erforderlich !" end; Wie geht das denn sonst ? Das hat ma so funktioniert :mrgreen: |
Re: Problem mit Mengen
Das ist richtig. und bei mir kompiliert das auch prima.
Aber an der spelle würd ich auch include verwenden. PS: du hast Hoehe bestimmt wo anders deklariert! Da wette ich. |
Re: Problem mit Mengen
Stimmt in einer Klasse -.-
Was hat das Hoehe aus der Klasse mit dem set zu tun :roll: |
Re: Problem mit Mengen
Schau einfach mal, was die Codevervollständig von Hoehe hält oder such nach der Deklaration und lass dich überraschen. Ansonsten benenn halt Hoehe im Set mal in was anderes um.
|
Re: Problem mit Mengen
Zitat:
|
Re: Problem mit Mengen
Zitat:
|
Re: Problem mit Mengen
Zitat:
:warn: Also immer aufpassen, wo du welchen namen verwendest. PS: du kannst ja mal die einzelnen Werde des Sets umbenennen, oftmals wird in soeinem Fall ein Teil des Set-Namens verwendet. So kann man dann auch mal ähnliche Typen Deklarieren, ohne gleich wieder in einen Namenskonflikt zu geraden. :zwinker:
Delphi-Quellcode:
Type TGegeben = Set of (GegRadius, GegHoehe, GegUmfang,
GegGrundflaeche, GegVolumen, GegOberflaeche); TSoll = Set of (SoRadius, SoHoehe, SoUmfang, SoGrundflaeche, SoVolumen, SoOberflaeche); |
Re: Problem mit Mengen
Ja es funktioniert jetzt :)
Hab meine Setelemente umbenannt... |
Re: Problem mit Mengen
Zitat:
|
Re: Problem mit Mengen
Zitat:
|
Re: Problem mit Mengen
Man definiert es meistens so:
Delphi-Quellcode:
TGegebenesElement ist eine Enumeration/Aufzählungstyp und TGegebeneElemente die eigentliche Menge zum zur Enumeration. Dann funktionieren auch Include(), Exclude() und alle anderen Mengenoperationen.
type
TGegebenesElement = (geRadius, geHoehe, geUmfang, geGrundflaeche, geVolumen, geOberflaeche); TGegebeneElemente = set of TGegebenesElement; Gruß Hagen |
Re: Problem mit Mengen
Noch ne Frage nebenbei : Wie bekommt man heraus wie viele Elemente in einer Menge gerade enthalten sind ?
|
Re: Problem mit Mengen
Gar nicht. Wüßte nicht wie. Und es wäre nett, wenn du mal zeigst, wie Du aus einem Typen eine Variable machst.
|
Re: Problem mit Mengen
ka :mrgreen:
Naja ich glaube ich weis wie ich sie doch zählen kann... |
Re: Problem mit Mengen
Delphi-Quellcode:
ungetestet, müsste aber so gehen.
function CountOfElements(const Elements: TElements): Integer;
var I: TElement; begin Result := 0; for I := Low(I) to High(I) do if I in Elements then Inc(Result); end; function CountOfElements(const Elements: TElements): Integer; var I: Int64; begin I := Ord(Elements); Result := 0; while I <> 0 do begin if Odd(I) then Inc(Result); I := I shr 1; end; end; Gruß Hagen |
Re: Problem mit Mengen
Also, wenn den einzelnen Elementen keine bestimmten Werte aufgezwungen sind, dann reicht auch schon volgendes
Delphi-Quellcode:
oder ganz kurz, da Ord(Low(TheSet)) = 0 sein sollte
Elemente := Ord(High(TheSet)) - Ord(Low(TheSet)) + 1;
Delphi-Quellcode:
(es könnte sogar sein, dass die Ord's auch entfallen können)
Elemente := Ord(High(TheSet)) + 1;
|
Re: Problem mit Mengen
Delphi-Quellcode:
In anderen Worten High(Set) +1 gibt die Größe der Menge, d.h. wieviele unterschiedliche Elemente sie maximal enthalten kann. Dies ist somit nicht die Anzahl der tatsächlich enthaltenen Elemnte zu einem bestimmten zeitpunk.SizeOf(Set) == High(Set) +1 <> CountOfElementsInSet(Set). Die max. Anzahl der Elemente in der Menge TZiffern = [0...9] ist 10 == High(TZiffern) +1, eine Mengevariabale vom Typ TZiffern könnte aber auch so aussen -> Ziffern = [1,5,8]. High(Ziffern) == High(TZiffern) = 10, die Anzahl der real enthaltenen Elemente ist aber nur 3, denn nur drei Zahlen sind aktuell in Ziffern. himitsu, damit gibt dein Vorschlag nicht wie gefragt Zitat:
Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 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