Autor |
Beitrag |
Andidreas
      
Beiträge: 114
Windows XP Pro
BDS 2006
|
Verfasst: So 05.08.07 10:14
Hallo
Wie kann ich prüfen, ob eine Zahl innerhalb von 10115-14199 enthalten ist?
Dank im voraus
Andidreas Moderiert von Gausi: Topic aus VCL (Visual Component Library) verschoben am So 05.08.2007 um 10:42
_________________ Trotz Gejammer und Gezeter liegt die Katze jetzt im Bräter.
|
|
Hobby-Programmierer
      
Beiträge: 238
Erhaltene Danke: 4
Win XP Pro, Vista Ultimate Trial :o)
D6 Pro, D7 Pro, Turbo, XE SE
|
Verfasst: So 05.08.07 10:19
Moin ...
kann das zwar jetzt net prüfen, aber sollte nicht folgendes funktionieren
Delphi-Quelltext 1:
| if x in [10115..14199] then |
LG Mario
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: So 05.08.07 10:40
Das wird afaik nicht funktionieren, weil Sets nicht so groß sein können. Aber so gehts auf jeden Fall:
Delphi-Quelltext 1:
| if (aZahl >= 10115) AND (aZahl <= 14199) then Showmessage('Sie haben gewonnen!'); |
_________________ We are, we were and will not be.
|
|
Andidreas 
      
Beiträge: 114
Windows XP Pro
BDS 2006
|
Verfasst: So 05.08.07 10:48
Danke Gausi. Funktioniert bestens.
_________________ Trotz Gejammer und Gezeter liegt die Katze jetzt im Bräter.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: So 05.08.07 11:05
@Gausi: Wird auch nicht funktionieren, da die Grenzen von Sets auf 256 Elemente begrenz sind und Bit-Indizes als Byte behandelt werden. D.h. es wird immer nur das LSB einer Zahl betrachtet, womit die Abfrage
Delphi-Quelltext 1:
| If X in [256..511] Then Halt; |
immer False ergeben würde, während
Delphi-Quelltext 1:
| If X in [0..255] Then Halt; |
immer True liefert
Wenn man weiß, das X nie größer als 255 wird ist diese Abfrage zwar legitim, aber dennoch immer langsamer als Gausi's Version.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: So 05.08.07 11:14
Also das:
Delphi-Quelltext 1:
| If X in [256..511] Then Halt; |
geht bei mir eh nicht durch den Compiler: Zitat: | [Fehler] Unit1.pas(29): Konstantenausdruck verletzt untere Grenzen |
Ob das nach Delphi7 geändert wurde, weiß ich nicht.
_________________ We are, we were and will not be.
|
|
Andidreas 
      
Beiträge: 114
Windows XP Pro
BDS 2006
|
Verfasst: So 05.08.07 11:16
Bekomme genau die gleiche Fehlermeldung.
_________________ Trotz Gejammer und Gezeter liegt die Katze jetzt im Bräter.
|
|
Biergeneral
      
Beiträge: 35
WIN XP
Delphi 7 Ent., Delphi 2007 Ent., C/C++ (Eclipse)
|
Verfasst: Fr 10.08.07 13:00
Sonst gibts in der Math unit auch noch
InRange(Value, Min, Max) : Boolean
Aber da wird vermutlich auch nichts anderes als (Value > Min) and (Value < Max) drinstehen 
Zuletzt bearbeitet von Biergeneral am Fr 10.08.07 23:23, insgesamt 1-mal bearbeitet
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Fr 10.08.07 13:02
eher (Value < Max) oder besser (Value >= Min) and (Value <= Max)
_________________ Markus Kinzler.
|
|
Biergeneral
      
Beiträge: 35
WIN XP
Delphi 7 Ent., Delphi 2007 Ent., C/C++ (Eclipse)
|
Verfasst: Fr 10.08.07 23:24
Stand da doch  *hust*
|
|