| Autor |
Beitrag |
mars
      
Beiträge: 238
Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
|
Verfasst: Di 25.03.03 14:56
Gibt es eine Funktion, welche den maximalen Wert eines Sets zurückgibt?
DiV
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Di 25.03.03 15:20
HiLo.
So eine funktion hab ich noch nicht gesehen...soll nicht heissen das es sie nicht gibt! Aber du kannst den maximalen wert des zugehörigen enum-types ermitteln, was wiederum auch der max-wert für ein set..da in einem set sämtlich bits nur einmal auftauchen können
Quelltext 1: 2: 3: 4: 5: 6: 7:
| TX = (tx1, tx2, tx3); TXset = set of TX; ... uses typInfo; ... i := GetTypeData(TypeInfo(TX)).MaxValue; ShowMessage( IntToStr(i)) |
so würde ich es machen...möglicherweise kennt jemand eine coolere möglichkeit!
mfg. mx.
|
|
mars 
      
Beiträge: 238
Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
|
Verfasst: Di 25.03.03 15:37
Nun, danke mal für deinen Post. Doch ich habe Mühe, dein Beispiel auf meine konkrete Situation zu übertragen. Auch findet meine OH die Funktion GetTypeData nicht. Könntest du mir noch sagen, wie ich es bei mir lösen sollte:
Quelltext 1: 2: 3: 4: 5: 6:
| Irgendwas=set of 1..250;
var irgend: Irgendwas;
irgend:= [a,b,c]; |
Wie bekomme ich nun den grössten Wert von irgend?
Danke
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Di 25.03.03 15:52
In deinem fall kannst du mein beispiel nicht verwenden, da solche sets keine TypeInfo haben!
Was hällst du von Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| const MaxSet = 250;
type Irgendwas=set of 1..MaxSet;
var irgend: Irgendwas;
irgend:= [a,b,c]; i := maxSet ;) | Müsste den selben effekt haben!?
|
|
mars 
      
Beiträge: 238
Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
|
Verfasst: Di 25.03.03 16:01
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Di 25.03.03 16:41
Naja...wenn du ein set hast, dass die werte 1 bis 250 haben kann und jeder wert nur einmal in dem set auftauchen darf(das haben sets so ansich), dann ist die maximale anzahl gleich der anzahl der werte -> also 250.
Da du 250 sowieso statisch im code hast, kannst du ihn auch in eine konstante schreiben und als MaxSet benutzen! oder hab ich dich falsch verstanden?
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Di 25.03.03 16:45
| Zitat: | Wie bekomme ich nun den grössten Wert von irgend?
|
Sach das doch gleich...dein ersten post konnte man auch anders versthen!
| Zitat: | Gibt es eine Funktion, welche den maximalen Wert eines Sets zurückgibt?
DiV |
Das ist ein kleiner aber feiner unterschied
Ich arbeite drann
|
|
mars 
      
Beiträge: 238
Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
|
Verfasst: Di 25.03.03 17:08
Sorry, dass es möglicherweise zweideutig war
Danke jedenfalls für deine Mühe. Irgendwann möchte ich auch noch begreifen, was deine tricky Methode mit dem GetTypeData(TypeInfo()) sein sollte...
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Di 25.03.03 17:56
@TypeData:
Mit TypeInfo(TX) hol ich mir einem Pointer auf den RTTI(runTimeTypeInfo) eintrag des types TX.
Mit GetTypeData(...) kann ich dann auf die vielen lustigen infos zugreifen, die Delphi für diesen typ gespeichert hat. Zurück kommt ein record vom typ TTypeData. in TTypeData sind infos für alle möglichen daten-und Objekttypen vorhanden. Deshalb sollte man aufpassen, das man nur die infos liest, die für den typ gedacht sind!
Unteranderem zB. für enum typen MinValue und MaxValue!
Also du hast ein enum-typ TX = (tx1, tx2, tx3);
dann ist das im prinzip das: TX = (0,1,2);
Hier ist MinValue = 0 und MaxValue = 2 gespeichert!
Da ein SET nur bits sind, die entweder gesetzt sind oder nicht, ist die max.Anzahl = MaxValue!
zB: Quelltext 1: 2: 3:
| var x:TX; ... x := [tx1,tx3]; |
sieht binär so aus >101< -> das bit 0 und das bit 2 ist gesetzt, also genau die bits, deren bezeichner( siehe prinzip oben) im set stehen!
...
Ich denke dein set sieht auch so aus, nur das du 255 bits hast
Hoffe das hat zum verständnis beigetragen!?
|
|
mars 
      
Beiträge: 238
Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
|
Verfasst: Di 25.03.03 18:30
ja, doch! Danke
Ich denke, RTTI wurde schon in einem anderen Thread erklärt, also werde ich mich mal weiter schlau machen darüber, tönt nämlich interessant... 
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Di 25.03.03 21:50
Zu deinem ursprünglichen prob kann ich momentan nur sagen, dass du es auf die brutale methode machen könntest. Also einfach eine funktion, mit einer for-schleife drinn, die alle für werte testet ob sie im set vorhanden sind. Ist einer vorhanden speicherst du ihn im result und lässt die schleife weiter laufen. Dann sollte der höchste wert zurückgegben werden.
mfg mx
|
|
mars 
      
Beiträge: 238
Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
|
Verfasst: Di 25.03.03 21:58
Ja, ok, wenn es nichts anderes gibt, werd ich s wohl auf die unästhetische Art lösen müssen
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mi 26.03.03 10:06
Wie wäre es denn mit den Funktionen High und Low?
Zum Beispiel so:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Type tTestId = (idTest1, idTest2, idTest3);
[...]
var Test: tTestId; begin For Test := Low (Test) To High (Test) Do ; end; |
Gruß
Tino
|
|
mars 
      
Beiträge: 238
Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
|
Verfasst: Mi 26.03.03 10:20
Das hat aber nichts mit meiner Frage zu tun, oder doch?
Jedenfalls weiss ich mit deinem Beispiel immer noch nicht, wie ich den höchsten Wert im Set erhalte. 
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Mi 26.03.03 10:50
| Tino hat folgendes geschrieben: | Wie wäre es denn mit den Funktionen High und Low?
Zum Beispiel so:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Type tTestId = (idTest1, idTest2, idTest3);
[...]
var Test: tTestId; begin For Test := Low (Test) To High (Test) Do ; end; |
Gruß
Tino |
Ja...das ist besagte 'coolere' möglichkeit für typData.minValue typData.maxValue. Letztendlich greift dies aber vermutlich auch auf die typ daten zurück! Doch für sets geht das schonmal garnicht!
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mi 26.03.03 11:16
Ich habe dies nur als Beispiel gepostet weil ich mit den ganzen Hinweisen , Mengen- und Aufzählungstypen die hier gepostet worden sind nicht viel anfangen konnte.
Gruß
Tino
|
|