Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : .



Merovinger
17.08.2008, 12:08
.

Crash-Override
17.08.2008, 12:34
Abgesehen von break nicht, hab aber auch selbigen niemals gebraucht, da man auch einfach while bzw. repeat Schleifen nutzen kann und die dann sehr viel eleganter sind. Du kannst auch im Prinzip eine boolische Variable definieren und es so loesen:


var
SExit: Boolean;
i: Integer;
begin
SExit := False;
for i := 0 to 99 do
begin
if not SExit then
begin
if i > 10 then
SExit := True;
end;
end;
end;

Aber in 100% der Faelle laesst es sich mit while besser loesen. Siehe auch hier:


var
i: Integer;
begin
I := 0;
while ((I <= 99) OR not (I > 10)) do
// bzw. <, ich wollte aber die Bedingung von oben kopieren
begin

end;
end;

dead_orc
17.08.2008, 12:59
Abgesehen von break nicht, hab aber auch selbigen niemals gebraucht, da man auch einfach while bzw. repeat Schleifen nutzen kann und die dann sehr viel eleganter sind. Du kannst auch im Prinzip eine boolische Variable definieren und es so loesen:


var
SExit: Boolean;
i: Integer;
begin
SExit := False;
for i := 0 to 99 do
begin
if not SExit then
begin
if i > 10 then
SExit := True;
end;
end;
end;

Aber in 100% der Faelle laesst es sich mit while besser loesen. Siehe auch hier:


var
i: Integer;
begin
I := 0;
while ((I <= 99) OR not (I > 10)) do
// bzw. <, ich wollte aber die Bedingung von oben kopieren
begin

end;
end;

Hat Delphi ein so krass unterschiedliches Verständnis von Logik? o_O
Für mich sieht es so aus, als würde die while-Schleife in jedem Fall bis I = 99 laufen. Wenn I > 10 ist zwar not (I > 10) false, aber da dazwischen ein OR steht ist das egal, da ((I <= 99)) ja immer noch true ist. Habe ich da jetzt nen Denkfehler drin?

Auf jeden Fall inkrementierst du aber I nicht. Wenn die Code Snippets identisch sein sollen, muss das auch mit rein. :p

Crash-Override
17.08.2008, 14:40
Hat Delphi ein so krass unterschiedliches Verständnis von Logik? o_O
while ((I <= 99) OR not (I > 10)) do

Mache weiter, solange eine der folgenden Bedingungen gegeben ist:
a) I ist kleiner oder gleich 99
b) I ist nicht groesser als 10

while ((I <= 99) AND not (I > 10)) do
wuerde heissen das beide Bedingungen erfuellt sein muessen und

while ((I <= 99) XOR not (I > 10)) do
das Entweder die eine oder die andere true sein darf, aber nicht beide, was bei OR durchaus geht.

@Merovinger: Die Schleife wird beim ersten Beispiel nicht abgebrochen. Sie lauft durch bis zum bitteren Ende, aber ohne irgendwas zu tun. Wenn du nicht grad bis x-Millionen durchzaehlen laesst macht das keinen grossen Unterschied.

edit: lol, jetzt wo ich es mir durchlese muesste es tatsaechlich AND sein. damn.