Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi if ... then vereinfachen (https://www.delphipraxis.net/20639-if-then-vereinfachen.html)

StefanDP 20. Apr 2004 22:52


if ... then vereinfachen
 
folgender code:

Code:
var
  gewicht: array [1..4] of single; // gewichtungen
...
if (gewicht[1] > gewicht[2]) and
   (gewicht[1] > gewicht[3]) and
   (gewicht[1] > gewicht[4]) then
      Spieler[Nummer].RichtungNeu := HOCH;
wie kann ich das einfacher schreiben?
weil in
Code:
if gewicht[1] > (gewicht[2] or gewicht[3] or gewicht[4]) then...
ist irgendwie ein logigfehler von mir drin

mfg
stefan

Muetze1 20. Apr 2004 23:00

Re: if ... then vereinfachen
 
Moin!

Dein Ansatz geht leider nicht - ich kann mir da sonst auch nur eine Schleife vorstellen:

Delphi-Quellcode:
Var
  i : Integer;
  IsOk : Boolean;
Begin
  IsOk := True;
  for i := 2 To 4 Do
    If Not ( Gewicht[1] > Gewicht[i] ) Then
    Begin
      IsOk := False;
      Break;
    End;

  If ( IsOk ) Then
    Spieler[Nummer].RichtungNeu := HOCH;
MfG
Muetze1

Luckie 20. Apr 2004 23:11

Re: if ... then vereinfachen
 
Wo bei, wenn der erste ausdruck schon False ergibt Delphi den Rest gar nicht mehr prüft (je nach Compiler Einstellungen). Ums Tippen wird man aber nicht rumkommen.

Hansa 20. Apr 2004 23:19

Re: if ... then vereinfachen
 
Zitat:

Zitat von StefanDP
folgender code:

Code:
and
   (gewicht[1] > gewicht[4]) then
      Spieler[Nummer].RichtungNeu := HOCH;
...[/code]
ist irgendwie ein logigfehler von mir drin

mfg
stefan

Ja, Logikfehler, so gehts nicht. Im Endeffekt wird nur > 4 geprüft.

StefanDP 20. Apr 2004 23:29

Re: if ... then vereinfachen
 
also ich will überprüfen, ob gewicht[1] größer als gewicht[2],..[3],..[4] ist

oder gibt es eine funktion, um aus mehreren variablen die größte herauszufinden?

Luckie 20. Apr 2004 23:38

Re: if ... then vereinfachen
 
Scvhreib schnell einen Sortieraklgo (Bubblesort reicht für so was kleines) und du weißt was größer ist. ;)

dizzy 21. Apr 2004 00:10

Re: if ... then vereinfachen
 
Die Unit "Math" einbinden, und dein Array muss ein Array[a..b] of double sein. Dann geht:
Delphi-Quellcode:
if gewicht[1] >= MaxValue(gewicht) then ...
Wenn also gewicht[1] der größte Wert im Array ist (und auch wenn weitere Werte =gewicht[1], aber auch die größten sind), so wird der Ausdruck true.

Für Integer-Arrays hab ich sowas nicht gefunden, aber man kann sich ja relativ leicht ein "MaxValue" für beliebige Typen selber schnell schreiben. Ist nen 3-4-Zeiler.

gruss,
dizzy

Delphi_Fanatic 21. Apr 2004 06:55

Re: if ... then vereinfachen
 
Wieso übernimmst Du nicht einfach den Vorschlag von 'Muetze1' ?
Das ist doch genau das, was Du brauchst !

Die Idee mit MaxValue ist vom Grundsatz her zwar sehr gut, allerdings erwartet
diese Funktion eine array .. of double.
Deine Gewichte hast Du als 'single' definiert.

Phoenix 21. Apr 2004 06:59

Re: if ... then vereinfachen
 
Delphi-Quellcode:
var
   temp: single;
   i: integer;
   gewicht: array [1..4] of single;
begin
   // grösstes Element zwischenspeichern
   temp := 0;
   for i := 1 to 4 do
      if gewicht[i] > temp then
         temp := gewicht[i];

   // und nur noch damit vergleichen:
   if gewicht[1] > temp then
   begin
      // blafasel
   end;
end;

himitsu 21. Apr 2004 07:14

Re: if ... then vereinfachen
 
@Phoenix
Code:
   [b]for[/b] i := [color=red][b]2[/b][/color] [b]to[/b] 4 [b]do[/b]
denn der 1. Wert braucht ja nicht ausgewertet zu werden.


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