Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   if Anweisung? (https://www.delphipraxis.net/167381-if-anweisung.html)

mat72 27. Mär 2012 11:43

Delphi-Version: 5

if Anweisung?
 
Hallo,
ich wollte in einer Procedure einen Wert errechnen und wenn die Bedingung (0.85<Wert<1.15) nicht erfüllt ist, sollte eine Meldung kommen.
Leider funktioniert es nicht so, wie ich es mir gedacht habe.
Stimmt da etwas in der Anweisung nicht?
Delphi-Quellcode:
procedure TForm7.Button1Click(Sender: TObject);
begin
gain:=(foc1-foc2)/100;
Label13.Caption := FloatToStrF(gain, ffNumber, 8, 3);
if (0.85<gain) and (gain<1.15)
  then
    ShowMessage('Please Enter the Calculated Offset!');
end;
Danke für eure Hilfe.
Gruss
Matthias

Jens01 27. Mär 2012 11:49

AW: if Anweisung?
 
Die Frage ist ja, was passiert nicht so wie es soll.
Bei diesen Floatvariablen sollte/ muß man immer mit CompareValue vergleichen.

mkinzler 27. Mär 2012 11:59

AW: if Anweisung?
 
das Problem besteht aber eher beim Prüfen auf Gleichheit, bei < oder > sollte das keine Rolle spielen

Medium 27. Mär 2012 12:00

AW: if Anweisung?
 
Zitat:

Zitat von Jens01 (Beitrag 1158843)
Bei diesen Floatvariablen sollte/ muß man immer mit CompareValue vergleichen.

Das gilt weitestgehend nur bei Prüfung auf Gleichheit. Bei Relationen ist das unkritisch, so lange den Intervallgrenzen keine extra besonders wichtige Bedeutung zukommt. Vom Statement her schaut das so weit richtig aus. Was steht denn im Label, und mit was für Werten hast du getestet?

v2afrank 27. Mär 2012 12:04

AW: if Anweisung?
 
In deinem Fall ist aber einfach die Anweisung falsch:
Delphi-Quellcode:
if not((gain>0.85) and (gain<1.15)) then
sollte richtig sein

s.h.a.r.k 27. Mär 2012 12:11

AW: if Anweisung?
 
Geht doch auch einfacher:
Delphi-Quellcode:
if (gain < 0.85) or (gain > 1.15) then
  // ...
PS: gain ist aber hoffentlich keine globale Variable?

PPS: Etwas besser lesbar :)
Delphi-Quellcode:
if IsValidGain(gain) then
  // ...


function TForm7.IsValidGain(const AGain: Float): Boolean; // private method
const
  MIN_VALUE = 0.85;
  MAX_VALUE = 1.15;
begin
  Result := (AGain > MIN_VALUE) and (AGain < MAX_VALUE);
end;

Medium 27. Mär 2012 12:16

AW: if Anweisung?
 
Seine Abfrage ist korrekt, schaut mal die Stellung von "gain" und den Konstanten an. Die Frage ist jetzt nur, ob die Eingabe innerhalb oder ausserhalb des Intervalls als richtig angesehen werden soll, womit die Sache mit der Negierung interessant ist.
Edit: Ah, jetzt nach noch mal lesen ja. Negieren und gut ist. Ups :)

v2afrank 27. Mär 2012 12:19

AW: if Anweisung?
 
Die Abfrage ist nicht korrekt.
Seine Bedingung lautet wenn die Bedingung (0.85<Wert<1.15) nichterfüllt ist.
Er hat auf die Bedingung (0.85<Wert<1.15) abgefragt

Medium 27. Mär 2012 12:20

AW: if Anweisung?
 
Siehe Edit. Mit ist das "not" bei dir auch durchgegangen, ich dachte du hättest nur die Operanden getauscht. Ich brauch Futter...

mat72 27. Mär 2012 12:23

AW: if Anweisung?
 
Danke für euere Hilfe,
manchmal sieht man den wald vor lauter Bäumen nicht.
Die Meldung sollte kommen, wenn der Wert nicht die Bedingung erfüllt.


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