Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Größer als und kleiner als (https://www.delphipraxis.net/95625-groesser-als-und-kleiner-als.html)

Tommy1988 10. Jul 2007 16:39


Größer als und kleiner als
 
Hallo, ich habe grade eine Denklücke (hab vergessen wie das norrens geht..)
Ich habe eine Zahl, und möchte, wenn sie größer 19 und kleiner 24 (also dazwischen) ist,
darauf reagieren. (und das 2 Mal)
Delphi-Quellcode:
if (Zahl2 >= 19) and (Zahl1 <= 24)and
(Zahl2 >= 19) and (Zahl2 <= 24) then
 begin
 Label1.Caption := 'Zahl1/Zahl2 zwischen 19 und 24';
 end else
 begin
Label1.Caption := 'mh ?!';
end;
ich bekomme als caption IMMEr letzteres :idea:

DeddyH 10. Jul 2007 16:42

Re: Größer als und kleiner als
 
Zitat:

Zitat von Tommy1988
Delphi-Quellcode:
if (Zahl2 >= 19) and (Zahl1 <= 24)and //Zahl2 ?
(Zahl2 >= 19) and (Zahl2 <= 24) then

:mrgreen:

Tormentor32 10. Jul 2007 16:42

Re: Größer als und kleiner als
 
Delphi-Quellcode:
if (Zahl1 in [19..24]) and (Zahl2 in [19..24])
so sollte es gehen

Tommy1988 10. Jul 2007 16:43

Re: Größer als und kleiner als
 
erm.. ne meine variablen heißen eigentlich alle anders, habe das jetzt nur HIER so hingeschrieben, sollte natürlich AUCH Zahl1 sein.

Aber Problem liegt halt noch immer vor,

Edit:
[Fehler] uMain.pas(870): E2010 Inkompatible Typen: 'Real' und 'Integer'

Die Muhkuh 10. Jul 2007 16:45

Re: Größer als und kleiner als
 
Delphi-Quellcode:
if ((Zahl1 > 19) and (Zahl1 < 24)) and ((Zahl2 > 19) and (Zahl2 < 24)) then
begin
Label1.Caption := 'Zahl1 UND Zahl2 zwischen 19 und 24';
end else
begin
Label1.Caption := 'mh ?!';
end;
oder meinste mehr das hier:

Delphi-Quellcode:
if ((Zahl1 > 19) and (Zahl1 < 24)) or ((Zahl2 > 19) and (Zahl2 < 24)) then // Man beachte das or
begin
Label1.Caption := 'Zahl1 UND Zahl2 zwischen 19 und 24';
end else
begin
Label1.Caption := 'mh ?!';
end;
[edit]
Zitat:

[Fehler] uMain.pas(870): E2010 Inkompatible Typen: 'Real' und 'Integer'
Zeig das mal, was in der Zeile steht...[/edit]

Tommy1988 10. Jul 2007 16:49

Re: Größer als und kleiner als
 
Delphi-Quellcode:
BMI := Runden(Gewicht / (GroesseM*GroesseM),2);
Alter   := StrToFloat(EdAlt.Text);
.
.
if (BMI in [19..24]) and (Alter in [19..24]) then
 begin
 Label34.Caption := 'BMI/Alter zwischen 19 und 24'+
 FloatToStr(BMI)+'/'+FloatToStr(Alter);
 end else
 begin
Label34.Caption := 'mh ?!';
end;

DeddyH 10. Jul 2007 16:50

Re: Größer als und kleiner als
 
Bei mir geht' s:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Zahl1,Zahl2: real;
begin
  Zahl1 := 20.5;
  Zahl2 := 22.3;
  if (Zahl1 > 19) and (Zahl1 < 24) and (Zahl2 > 19) and (Zahl2 < 24) then
  begin
    Label1.Caption := 'Zahl1 UND Zahl2 zwischen 19 und 24';
  end else
  begin
    Label1.Caption := 'mh ?!';
  end;
end;

Tommy1988 10. Jul 2007 16:53

Re: Größer als und kleiner als
 
Inkompatible Typen Real und Integer:
Die Zeilen:

Delphi-Quellcode:
BMI := Runden(Gewicht / (GroesseM*GroesseM),2);
Alter   := StrToFloat(EdAlt.Text);
.
.
if (BMI in [19..24]) and (Alter in [19..24]) then
begin
Label34.Caption := 'BMI/Alter zwischen 19 und 24'+
FloatToStr(BMI)+'/'+FloatToStr(Alter);
end else
begin
Label34.Caption := 'mh ?!';
end;

Rociel 10. Jul 2007 16:58

Re: Größer als und kleiner als
 
wieso fürs alter kein byte?
beim BMI wird das alter doch ganzzahlig verwendet oder?

inherited 10. Jul 2007 16:58

Re: Größer als und kleiner als
 
Wenn BMI ein integer ist, musst du IntToStr, nicht FloatToStr nehmen.

Tommy1988 10. Jul 2007 17:05

Re: Größer als und kleiner als
 
BMI und Alter ist aber Real (Steht oben)

DeddyH 10. Jul 2007 17:07

Re: Größer als und kleiner als
 
Welchen Wert haben denn die Zahlen?

Tommy1988 10. Jul 2007 17:08

Re: Größer als und kleiner als
 
BMI meistens eine Kommazahl (zwischen 0 und X...)

und Alter halt die Eingabe im Edit. (Zum testen gebe ich immer 19 ein)

Rociel 10. Jul 2007 17:12

Re: Größer als und kleiner als
 
in welcher Zeile taucht denn der fehler auf? beim if oder bei der ausgabe?

Tommy1988 10. Jul 2007 17:14

Re: Größer als und kleiner als
 
Fehler in dieser Zeile:
Delphi-Quellcode:
if (BMI in [19..24]) and (Alter in [19..24]) then
Der Cursor sitzt dann da wo die ² steht:
Delphi-Quellcode:
if (BMI in [19..24])² and (Alter in [19..24]) then

DeddyH 10. Jul 2007 17:17

Re: Größer als und kleiner als
 
Und wenn Du mal locker ein
Delphi-Quellcode:
ShowMessage(FloatToStr(BMI));
vor die Abfrage setzt?

[Edit]IN geht bei Fließkommazahlen nicht[/Edit]

Rociel 10. Jul 2007 17:17

Re: Größer als und kleiner als
 
wenn du

Delphi-Quellcode:
 in [19..24]
nutzt muss der vergleichstyp (BMI und Alter) auch ordinal sein, denn 19..24 heißt: 19,20,21,22,23,24 also ordinal.

du vergleichst also inetwa äpfel mit eiern ;)

schreib einfach die if's wie oben mit >, =, <

Tommy1988 10. Jul 2007 17:25

Re: Größer als und kleiner als
 
Schreibe ich aber
Delphi-Quellcode:
if (Zahl2 >= 19) and (Zahl1 <= 24)and
(Zahl2 >= 19) and (Zahl2 <= 24) then
begin
Label1.Caption := 'Zahl1/Zahl2 zwischen 19 und 24';
end else
begin
Label1.Caption := 'mh ?!';
end;
erhalte ich im label immer nur das mh?!

DeddyH 10. Jul 2007 17:27

Re: Größer als und kleiner als
 
Setz doch mal einen Breakpoint und schau, welchen Wert die Zahlen haben. Ich tippe auf einen einfachen Rechenfehler.

Rociel 10. Jul 2007 17:30

Re: Größer als und kleiner als
 
also wie vorher schon erwähnt wars ja zahl1 und nicht zahl2 in der ersten zeile, aber eigentlich müsste es so funktionieren, wies dasteht, oder ich überseh was, ich kram gleich mal meine ex raus und schmeiß delphi mal an

Rociel 10. Jul 2007 17:38

Re: Größer als und kleiner als
 
Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
var zahl1,zahl2:real;
begin
Zahl1:=19;zahl2:=19;
if (Zahl1 >= 19) and (Zahl1 <= 24)and
(Zahl2 >= 19) and (Zahl2 <= 24) then
begin
Label1.Caption := 'Zahl1/Zahl2 zwischen 19 und 24';
end else
begin
Label1.Caption := 'mh ?!';
end;
end;
funktioniert wunderbar

DeddyH 10. Jul 2007 17:39

Re: Größer als und kleiner als
 
Das hatte ich in #7 bereits geschrieben. :-D

Rociel 10. Jul 2007 17:42

Re: Größer als und kleiner als
 
oh, stimmt =) kommt davon wenn man nebenher noch psycho lernt...

aber damit ist schonmal gezeigt, dass es hier nicht zu zeitabhängigen ergebnissen kommt wie bei den Kirchhoff'schen regeln *rofl*

Tommy1988 10. Jul 2007 17:56

Re: Größer als und kleiner als
 
also mit dem OR

Delphi-Quellcode:
if (BMI >= 19) and (BMI <= 24) or
(Alter >= 19) and (Alter <= 24) then
begin
Label34.Caption := 'Zahl1/Zahl2 zwischen 19 und 24';
end else
begin
Label34.Caption := 'mh ?!';
end;
klappt es schon, aber es wird nur eines von beiden geprüft.

beides auf einmal geht nicht oder ?

mkinzler 10. Jul 2007 17:58

Re: Größer als und kleiner als
 
Ich vermute mal so:
Delphi-Quellcode:
if ((BMI >= 19) and (BMI <= 24)) or ((Alter >= 19) and (Alter <= 24)) then

DeddyH 10. Jul 2007 18:00

Re: Größer als und kleiner als
 
Was steht denn in BMI? Wie oft muss ich das eigentlich noch fragen?

mkinzler 10. Jul 2007 18:02

Re: Größer als und kleiner als
 
BMI = Body Mass Index

Rociel 10. Jul 2007 18:02

Re: Größer als und kleiner als
 
also wenn du ein or setzt, dann muss BMI im Intervall liegen, Alter im Intervall, oder beides drin liegen.

wenn du anstatt dem or n and setzt, müssen zwngsläufig BMI UND Alter im Intervall liegen, sonst wird else aufgerufen

Tommy1988 10. Jul 2007 18:03

Re: Größer als und kleiner als
 
Mhh.. ist der BMI über 24 wird nicht der else-block angezeigt..

das wird einfach ignoriert..

Edit:
Delphi-Quellcode:
if ((BMI >= 19) and (BMI <= 24)) { and hier statt or}and
((Alter >= 19) and (Alter <= 24)) then
so klappts

danke an eure tipps. werd mir das mal alles angucken.

@mkinzler:

was bedeuten die 2 einklammerungen die du dazugeschrieben hast?
was sagen die aus?

mkinzler 10. Jul 2007 18:04

Re: Größer als und kleiner als
 
Was sollen denn die Alternativen sein?

Hawkeye219 10. Jul 2007 18:08

Re: Größer als und kleiner als
 
Hallo,

wer Probleme mit den Vergleichsoperatoren hat und mindestens über Delphi6 verfügt, der kann auch die (überladene) Funktion Delphi-Referenz durchsuchenInRange aus der Unit Math verwenden:

Delphi-Quellcode:
if InRange(BMI, 19, 24) or {and?} InRange(Alter, 19, 24) then ...
Gruß Hawkeye

DeddyH 10. Jul 2007 18:11

Re: Größer als und kleiner als
 
Wenn nur ANDs verwendet werden, muss das auch ohne Klammern funktionieren.

mkinzler 10. Jul 2007 18:12

Re: Größer als und kleiner als
 
Zitat:

Wenn nur ANDs verwendet werden, muss das auch ohne Klammern funktionieren.
es ist aber eine or in der Mitte

DeddyH 10. Jul 2007 18:16

Re: Größer als und kleiner als
 
Das ist ja das Problem, dass der Fragesteller selbst nicht genau zu wissen scheint, ob beiden Zahlen im angegebenen Bereich liegen müssen. Übrigens hat AFAIK AND eine stärkere Bindung als OR, oder? Somit wären die Klammern in jedem Fall überflüssig, oder bin ich da fehlinformiert?

mkinzler 10. Jul 2007 18:17

Re: Größer als und kleiner als
 
M.W. sind sie gleich berechtigt

Rociel 10. Jul 2007 18:20

Re: Größer als und kleiner als
 
Die OH äußert sich dazu mit dem Kurzschlussverfahren =) :

Vollständige Auswertung und Kurzschlussverfahren im Vergleich
Der Compiler unterstützt zwei Auswertungsmodi für die Operatoren and und or: die vollständige Auswertung und das Kurzschlussverfahren. Bei der vollständigen Auswertung werden alle Operanden eines and- oder or-Ausdrucks auch dann ausgewertet, wenn das Resultat des gesamten Ausdrucks bereits feststeht. Das Kurzschlussverfahren geht streng von links nach rechts vor und wird beendet, sobald das Ergebnis des gesamten Ausdrucks feststeht. Wenn beispielsweise der Ausdruck A and B im Kurzschlussverfahren ausgewertet wird und A den Wert False hat, wertet der Compiler B nicht mehr aus, da bereits feststeht, dass nach der Auswertung von A auch der gesamte Ausdruck den Wert False haben wird.

Hawkeye219 10. Jul 2007 18:32

Re: Größer als und kleiner als
 
AND und OR sind nicht gleichberechtigt! AND entspricht einer Multiplikation ("Punktrechnung"), OR einer Addition ("Strichrechnung"). Es gilt aber immer noch der Satz: Punktrechnung vor Strichrechnung.

Aber warum lange rätseln, wenn man durch gezieltes Setzen von Klammern für Klarheit bei Compiler und Leser sorgen kann?

Gruß Hawkeye

DeddyH 10. Jul 2007 18:34

Re: Größer als und kleiner als
 
Zitat:

Zitat von Hawkeye
Aber warum lange rätseln, wenn man durch gezieltes Setzen von Klammern für Klarheit bei Compiler und Leser sorgen kann?

Da stimme ich Dir voll zu. Allerdings erklärt das dann nicht, dass es nun mit Klammern läuft, ohne hingegen nicht.

mkinzler 10. Jul 2007 18:36

Re: Größer als und kleiner als
 
Vielleicht weil immer ein AND/OR ein bool'schen Audruck liefert

DeddyH 10. Jul 2007 18:43

Re: Größer als und kleiner als
 
Siehe #29


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:45 Uhr.
Seite 1 von 2  1 2      

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