Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi "In" abfrage für negative Zahlen?? (https://www.delphipraxis.net/120130-abfrage-fuer-negative-zahlen.html)

gizzy 5. Sep 2008 22:35


"In" abfrage für negative Zahlen??
 
Hey,
ich muss wissen ob "x", "y" in einen bestimmten festgelegten bereich ist. Der fängt allerdings im Negativen an. In der Delphi Hilfe steht das diese Ordinale "in" ein set von 0 aufwärts braucht. Kann mir wer weiterhelfen?

Delphi-Quellcode:
If (x in [-30..250]) and (y in [-128..177]) then ......

Crazy Ivan 5. Sep 2008 22:37

Re: "In" abfrage für negative Zahlen??
 
addier doch den differenzbetrag dazu. bsp:

Delphi-Quellcode:
if (x + 30) in [0..280] then blub
um mal bei deinen werten zu bleiben, oder stellt das ein problem dar?

Die Muhkuh 5. Sep 2008 22:39

Re: "In" abfrage für negative Zahlen??
 
In geht nicht für negative Zahlen, da ein Set ein Bereich eines Bytes (0..255) hat.

gizzy 5. Sep 2008 22:46

Re: "In" abfrage für negative Zahlen??
 
Ok, danke. Wie kann ich dann überprüfen ob meine Zahl dazwischen liegt? Brauche ja im Prinzip wie "in" nur ein True oder False als rückgabe.

Die Muhkuh 5. Sep 2008 22:48

Re: "In" abfrage für negative Zahlen??
 
Delphi-Quellcode:
if (((x > - 30) and (x < 250)) and ((y > -128) and (y < 177))) then

gizzy 5. Sep 2008 23:04

Re: "In" abfrage für negative Zahlen??
 
Das wird nen Kuddel Muddel damit aber danke für den denkansatz :)

Die Muhkuh 5. Sep 2008 23:21

Re: "In" abfrage für negative Zahlen??
 
Du kannst ja auch eine Funktion dafür schreiben (wenn es sowas nicht schon gibt?):

Delphi-Quellcode:
function InRange(const Value, aLower, aUpper: Integer): Boolean;
begin
  Result := ((Value > aLower) and (Value < aUpper));
end;

// 

if ((InRange(x, -30, 250)) and (InRange(y, -128, 177))) then

Dax 5. Sep 2008 23:32

Re: "In" abfrage für negative Zahlen??
 
Dann aber bitte ohne die const-modifier und die überzähligen Klammern ;)

Hawkeye219 5. Sep 2008 23:35

Re: "In" abfrage für negative Zahlen??
 
Hallo,

da war doch mal was... klick

Gruß Hawkeye

Die Muhkuh 5. Sep 2008 23:37

Re: "In" abfrage für negative Zahlen??
 
Zitat:

Zitat von Dax
Dann aber bitte ohne die const-modifier und die überzähligen Klammern ;)

Warum ohne const? Spielt doch hier weniger eine Rolle?

Die Klammern: Tja, ein kleines Übel von mir, da ich jeden Ausdruck und die zusammengehörigen klammere *g*

Dax 5. Sep 2008 23:42

Re: "In" abfrage für negative Zahlen??
 
Zitat:

Zitat von Die Muhkuh
Warum ohne const? Spielt doch hier weniger eine Rolle?

Mit const behandelt der Compiler die Parameter wie Zeiger, also müssen die paar Ints definitiv auf den Stack. Sonst könnte ja auch kein Zeiger darauf übergeben werden... was aber unnötig ist, da Ints sowieso keine Referenztypen sind. :)

Hawkeye219 6. Sep 2008 09:44

Re: "In" abfrage für negative Zahlen??
 
Zitat:

Zitat von Dax
Mit const behandelt der Compiler die Parameter wie Zeiger, also müssen die paar Ints definitiv auf den Stack. Sonst könnte ja auch kein Zeiger darauf übergeben werden... was aber unnötig ist, da Ints sowieso keine Referenztypen sind. :)

Das ist so nicht ganz richtig. Einfache Daten (Boolean, Integer,...) werden auch bei Verwendung der Direktive const in Registern übergeben, sofern freie Register zur Verfügung stehen und die Routine nicht mit einer Direktive wie cdecl gekennzeichnet wurde. Die letzte Entscheidung trifft der Compiler, und ihm kann man es durch const ermöglichen, Optimierungen vorzunehmen. Der Compiler kann dann - wie übrigens der Programmierer auch - sicher sein, dass die betreffende Variable während der gesamten Laufzeit der Routine den übergebenen Wert enthält. Ohne const besteht die Gefahr, dass die Variable (vielleicht unbeabsichtigt) verändert wird. Bei einer späteren Modifikation des Codes übersieht man dies und nimmt an, dass sich noch der übergebene Wert darin befindet...

Das von dir angesprochene Zeigerproblem ist eigentlich gar keins. Wenn der Compiler feststellt, dass Zeiger auf die (in Registern übergebenen) Daten benötigt werden, erzeugt er für die aufgerufene Routine einen Initialisierungscode, der die Werte auf dem Stack ablegt.

Gruß Hawkeye


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