Hallo zusammen,
folgendes, ich möchte einen variablen Wert x mit einem vorgegebenem Wert y vergleichen.
Nun soll unterschieden werden:
x=y
x<y
x>y
Je nachdem welcher Fall auftritt, soll eine andere Aktion erfolgen.
Wie mache ich das am Besten?
Meine Überlegung:
So ein Vergleichsoperator handelt ja als Boolean (True/False), nehme ich an, richtig?
Somit könnte ich ja, je nachdem welcher richtig ist, einen anderen Case einer Case-Struktur ansteuern.
Doch wie geht das? Welches Element muss zwischen Vergleichsoperatoren und Case-Struktur schalten, damit diese "merkt", welcher Case ausgeführt werden soll?
Wie Du siehst, kann man an den Case-Selektor nicht nur boolsche Typen anschließen. Weitere Möglichkeiten sind Strings und Enums.
Dennis geht davon aus, daß deine x,y ganze Zahlen sind. Sollte das nicht der Fall sein, dann wende Dich noch mal vertrauensvoll an Dein zuständiges LV-Forum
Kann man die Cases denn auch dynamisch während der Laufzeit manipulieren? Ich würde da eher mit zwei ineinander Verschachtelten Cases Arbeiten:
Wenn erste Abfrage True; dann fall für x=y (in den True Case)
Wenn erste Abfrage False (also False Case im Äußeren Case); dann x<y Vergleichen; an die innere Case Struktur anschließen und in den True Fall den Fall für x<y reinbasteln, in den False Fall x>y (da die 3 Abfragen den ganzen Bereich abdecken muss x>y zwingend True sein, wenn die beiden anderen False sind).
Gruß Kiesch
P.S: Kein Beispiel da du auch ein bisschen selber nachdenken darfst (ich möchte dir jetzt nicht unterstellen das nicht gemacht zu haben, aber die Aufgabe nach der du fragst ist doch arg simpel zu lösen und wenns daran schon scheitert...)
Hi,
verschachtelte Cases sind nicht wartungsfreundlich, unübersichtlich und nur für bestimmte Anzahlen von Cases überhaupt möglich, sonst hat man undefinierte Zustände oder solche, die man abfangen muss...
Vorschlag: Nimm ein U8 als Case Selector und stell die Darstellung auf Bitwise um. Dann kannst Du einzelne Vergleichsergebnisse auf einzelne Bits legen und hast einen eindeutigen Selektor. Wenn A der Selektor ist, kann man für x=y A=2 zuweisen (das ist dann bitweise vom LSB aus geschrieben 01...), für x<y z.B. A=1 (10...) und für x>y A = 0 (00...). Bis jetzt hat man noch nix gewonnen, aber man kann jetzt einfach die Ergebnisse aller Vergleiche aufaddieren und hat dann seinen eindeutigen Selektor.
Grüße,
ch
Da stellt sich dann die Frage der Effizienz! In chrissyPus Vorschlag muss jedes mal JEDER Vergleich ausgewertet werden. Für die hier gegebene Aufgabe sicherlich kein großer Aufwand, aber auch verschachtelte Case-Strukturen wären hier nicht wirklich unübersichtlich!
Mein Vorschlag:
X-Y berechnen und an eine Casestruktur geben. Die Casestruktur behandelt dann die Fälle:
(X-Y < 0) ODER (X-Y = 0) ODER (X-Y > 0)
Damit reduziert man den Aufwand auf eine Subtraktion und eine Casestruktur.
Grüße,
Totti