Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verzweigung (https://www.delphipraxis.net/77609-verzweigung.html)

bonanza 21. Sep 2006 19:52


Verzweigung
 
hi,

ich muss für ein programm sozusagem eine wertetabelle realsisieren...

also wenn ich z.b. x und y eingebe, dann soll y' rauskommen....

wenn ich um das zu realisieren viele if abfragen machen würde, dann könnte es ja sein, dass mehrere aktionen hinteriander ausgeführt werden:

Delphi-Quellcode:
if (LE = 'h') and (zustand = 1) then zustand := 2;
if (LE = 'h') and (zustand = 2) then zustand := 5;
if (LE = 'h') and (zustand = 3) then zustand := 2;
if (LE = 'h') and (zustand = 4) then zustand := 5;
if (LE = 'h') and (zustand = 5) then zustand := 5;

if (LE = 'a') and (zustand = 1) then zustand := 5;
if (LE = 'a') and (zustand = 2) then zustand := 3;
if (LE = 'a') and (zustand = 3) then zustand := 5;
if (LE = 'a') and (zustand = 4) then zustand := 5;
if (LE = 'a') and (zustand = 5) then zustand := 5;

if (LE = '!') and (zustand = 1) then zustand := 5;
if (LE = '!') and (zustand = 2) then zustand := 5;
if (LE = '!') and (zustand = 3) then zustand := 4;
if (LE = '!') and (zustand = 4) then zustand := 5;
if (LE = '!') and (zustand = 5) then zustand := 5;
Wie kann ich das verhindern ?

1ceman 21. Sep 2006 19:54

Re: Verzweigung
 
Also falls ich die Frage richtig verstanden habe, dann sollte dir "Else" helfen

If (...) and (...) Then
Else If (...) and (...) Then
Else usw.

Nicolai1234 21. Sep 2006 19:59

Re: Verzweigung
 
Als eine einfache Optimierung könntest du das auch wie folgt schreiben
Delphi-Quellcode:
if (LE = 'h') then
   begin
   case zustand of
     1: ...
     2: ...
     3: ...
     4: ...
     5: ...
   end;
   end;
Das würde das ganze etwas verkürzen.

Der_Unwissende 21. Sep 2006 20:30

Re: Verzweigung
 
Zitat:

Zitat von Nicolai1605
Als eine einfache Optimierung könntest du das auch wie folgt schreiben
Delphi-Quellcode:
if (LE = 'h') then
   begin
   case zustand of
     1: ...
     2: ...
     3: ...
     4: ...
     5: ...
   end;
   end;
Das würde das ganze etwas verkürzen.

In dem Beispiel geht es noch kürzer:

Delphi-Quellcode:
if (LE = 'h') then
   case zustand of
     1, 3 : zustand := 2;
     else zustand := 5;
   end;
Gruß Der Unwissende

Nicolai1234 21. Sep 2006 20:58

Re: Verzweigung
 
Ja, das ist dann noch besser. Man geht auch gleich der Problematik aus dem Weg, die die ursprüngliche Frage aufwarf.

Der_Unwissende 21. Sep 2006 21:06

Re: Verzweigung
 
Zitat:

Zitat von Nicolai1605
Man geht auch gleich der Problematik aus dem Weg, die die ursprüngliche Frage aufwarf.

In wie weit? Ich meine auch in deinem Code würde man nie in mehr als eine Anweisung springen. Das ist aber auch gerade der Grund, warum case nur ordinale Typen akzeptiert. Anders als beim normalen if wird hier (imho) nicht die Bedingung geprüft, sondern direkt die Ansprungadresse aus dem Wert gewählt. Das ganze ist dann halt deutlich effizienter als eine if Abfrage.
Trotzdem sollte man immer der Lesbarkeit den Vorzug geben. Ich habe nur gezeigt dass es kürzer möglich ist, schon allein über das Lesbarer und/oder besser könnte man sich dann streiten. Und wegen ein paar microsekunden optimierung oder eben nicht, darauf sollte es dann nie ankommen (wer merkt dass schon?)


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