![]() |
If Anweisung mit 2 Bedingungen?
Eine Frage, wie Packe ich 2 Bedingungen in eine Schleife?
Ich habs so probiert und noch ein zwei andere Versuche abdie sind schief gegangen
Delphi-Quellcode:
if VorFeld[60] div 2+Feld[98]<=Maxi2;
VorFeld[60] div 2+Feld[110]<=Maxi2 Then.... Hier möchte ich einfach wenn diese 2 Bedingungen erfüllt sind soll dies ausgeführt werden. |
Re: If Anweisung mit 2 Bedingungen?
and und oder or sind deine Freunde!
Kidix |
Re: If Anweisung mit 2 Bedingungen?
Zitat:
Delphi-Quellcode:
if (VorFeld[60] div 2+Feld[98]<=Maxi2) and
(VorFeld[60] div 2+Feld[110]<=Maxi2) Then.... |
Re: If Anweisung mit 2 Bedingungen?
Hai Hallo_Thomas,
Du musst in diesem Fall deine beiden Bedinugung mit einem AND verknüpfen.
Delphi-Quellcode:
if (VorFeld[60] div 2+Feld[98] < =Maxi2) AND
(VorFeld[60] div 2+Feld[110] <= Maxi2) Then.... |
Re: If Anweisung mit 2 Bedingungen?
Zitat:
Mit logischen Verknüpfungen ist das machbar.
Delphi-Quellcode:
Wenn beide zu treffen müssen
if Bedinung1 AND Bedinung2 then ...
Delphi-Quellcode:
Wenn nur eine der beiden zutreffen muss ..
if Bedinung1 OR Bedinung2 then ...
und in deinem Fall brauchst du AND
Delphi-Quellcode:
rantanplan
if (VorFeld[60] div 2+Feld[98]<=Maxi2) and (VorFeld[60] div 2+Feld[110]<=Maxi2) Then....
|
Re: If Anweisung mit 2 Bedingungen?
Mit if kann man keine Schleifen, sondern nur Abfragen machen ;)
Delphi-Quellcode:
Oder so:
if (VorFeld[60] div 2+Feld[98]<=Maxi2) and (VorFeld[60] div 2+Feld[110]<=Maxi2) Then....
Delphi-Quellcode:
Ersteres ist zwar imho schöner, aber manchmal kommt man um die zweite Methode nicht umher ;)
if VorFeld[60] div 2+Feld[98]<=Maxi2 then
if VorFeld[60] div 2+Feld[110]<=Maxi2 then... |
Re: If Anweisung mit 2 Bedingungen?
Dankeschön, das hat echt weitergeholfen
|
Re: If Anweisung mit 2 Bedingungen?
Warum nicht mit while, wenn es schon ne Schleife sein soll? Etwa so:
Delphi-Quellcode:
Ein besonders hübscher Trick besteht bei mehreren Bedingungen darin, ein Zuweisung zu einem boolean zu benutzen. Erleichter die Übersicht wenn das ein Haufen Zeugs wird. Etwa so:
.
while Expression1 and Expression2 do begin . end; // of while Expression1 and Expression2 do begin .
Delphi-Quellcode:
Sieht im Code auch etwas hübscher aus oder nicht?
var
Exp1, Exp2 : boolean; begin Exp1:= (VorFeld[60] div (2 + Feld[98])) <= Maxi2 ; // Ergebnis ist boolscher Wert Exp2:= ...; {*** und nun los ***} while Exp1 and Exp2 do begin end; // of while Exp1 and Exp2 do begin end; |
Re: If Anweisung mit 2 Bedingungen?
@hardy1234: Wegen den Schleifen: Es waren bestimmt die if-Abfragen gemeint ;)
Bei der ersten Variante fehlen jedoch die Klammern. Die zweite Variante halte ich (besonders für Anfänger) viel zu kompliziert. Was mich bei Schleifen in diesem Fall stört: Der Code wird IMMER WIEDER ausgeführt. Deshalb sind es auch Schleifen. Man müsste künstlich die Bedingung unterbrechen oder ein Break einbauen, was nicht so schön ist. |
Re: If Anweisung mit 2 Bedingungen?
Zitat:
(XOR = die Schleife wird nur ausgeführt, wenn die eine Bedingung true und die andere false ist. Wenn beide true sind, oder beide false, dann wirds nicht gemacht.) |
Re: If Anweisung mit 2 Bedingungen?
Zitat:
Zitat:
|
Re: If Anweisung mit 2 Bedingungen?
Zitat:
Delphi-Quellcode:
If true xor false Then
|
Re: If Anweisung mit 2 Bedingungen?
Zitat:
Dankeschön :) edit: Auch danke an Khabarakh... Ich hatte eben kein Delphi da ums nachzukucken, kam mir nur, als ich den Thread gelesen habe... |
Re: If Anweisung mit 2 Bedingungen?
Zitat:
Delphi-Quellcode:
Der charme der geschichte dürfte klar sein. die schleife läuft genauso lange bis etwas bestimmtes gefunden wurde und dann ist schluß. da man die expression in der mitte der schleife jeweils neu setzt steuert diese die schleife und sorgt für die Abbruchbedingung. Wie man sieht kein "break". Da hab ich schon richtig komplexe tests damit duchgeführt und das klappt immer. Nebenbei ist es äußerst elegant programmiert. Die Abbruchbedingungen lassen sich ja genauso gut auch mit weiteren funktionen auslagern, die dürfen ja auch lokal vereinbart sein. Hätte ich solche dinger wie break oder noch schlimmer goto verwendet, hätte ich nicht mal das 1ste Semester überstanden. Derlei schweinereien sind den Basic- und Script-Programmierern vorbehalten...
function TestIrgendwas(var i: integer;...): boolean;
var good: boolean; begin i:= 0; good:= false; while (i <= maxloop) and not(good) do begin good:= {*** hier irgendeine expression ***} if not(good) then inc(i); end; if good then begin {*** hier die nachverarbeitung im Erfolgsfall, wenn nötig ***} {*** falls das ne Liste ist, hat man nun auch den richtigen index. ***} {*** was will man mehr? ***} end; {*** falls boolean-function, wie hier ***} Result:= good; end; |
Re: If Anweisung mit 2 Bedingungen?
Es ist nichts Verwerfliches an einem 'break', im Gegenteil: Es macht den Code i.a. wesentlich lesbarer. Die Diskussion um break, exit und goto ist so alt wie die Konstrukte selbst. Da das sehr viel mit Glauben zu tun hat, sollte jeder selbst entscheiden, was er wie einsetzt: Selbst goto's haben ihre Berechtigung.
Einzige Voraussetzung: Die Lesbarkeit und m.E. die Performance sind entscheidend. Natürlich kommt man ohne break und goto aus, aber es geht ja auch ohne prozeduren, funktionen, units und die VCL. Nur, wieso sollte ich auf etwas verzichten? Und das erste Semester hättest Du auch mit gotos und breaks überstanden... Sofern Du sie richtig einsetzt. |
Re: If Anweisung mit 2 Bedingungen?
Zitat:
Wer goto, break und Konsorten verwendet, hat über seinen Programmcode nicht genügend nachgedacht. (Punkt) Aus eigener Erfahrung, speziell nach der Durchsicht von fremden Code kann ich diese Aufassung nur teilen. Der Spagetti-Code entsteht meist aus dem einfachen Grund, das man drauflos proggt und dann erst nachdenkt. Irgendwo in der Mitte schlägt dann die Logik gnadenlos zu und es bleibt nur noch der "Notausstieg" per goto und ähnlichem. Und erzähle mir keiner, er wäre nicht gelegentlich versucht, sich auf diese Weise aus der Affäre zu ziehen. Wie das allerdings zur Lesbarkeit beitragen soll, bleibt wohl dein Geheimnis. Das kenn ich aus BASIC-Zeiten anders. Lesbarkeit erzeugt man durch sprechende Variablen-Namen und Remarks, mit GOTO sicher nicht. Ich hab selbst mal mit BASIC angefangen, da ging es nun garnicht anders. Ich habe 3 Kreuze gemacht, als es Turbo-PASCAL zu erschwinglichen Preisen gab. Endlich diesen Goto-Scheiß und die globalen Variablen weg... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz