Seite 1 von 2
For-Schleifen-Abbruch funzt nicht mit "<" und &
Verfasst: 10.11.2006 20:02
von wolle212
Hallo Leute,
ich wollte, um eine eine Info-Übungsaufgabe schnell zu lösen, statt mit Java mit PB_4.01 arbeiten. Dabei ist mir aufgefallen, dass bei einer For-Schleife der Abbruch nicht mit den Größer- und Kleiner-als-Operator zusammenarbeitet.
So liefert der Code
das gleiche Ergebnis wie
Das ganze ist jetzt nicht sonderlich schwerwiegend und die Frage mag berechtigt sein, wer wohl in einer for-Schleife mit "<" und ">" arbeitet

, verwirrt hat es mich aber trotzdem.
Verfasst: 10.11.2006 20:05
von Kaeru Gaman
es ist ganz einfach syntaktisch falsch!
das dritte argument der for-schleife ist die obergrenze
irgendwelche ausdrücke sind dort nicht erlaubt, sind auch in keiner weise sinnvoll.
wenn du die end-bedingung mit einem vergleichsoperator versehen willst,
dann nimm eine while-schleife, oder eine repeat-schleife.
Verfasst: 10.11.2006 20:10
von wolle212
@Kaeru Gaman:
Ich finde es selbst syntaktisch nicht optimal, aber als falsch würde ich es nicht bezeichnen.
Ist zwar jetzt ein blödes Argument, aber "in Java geht es doch auch mit <"
Von selbst wäre ich nie auf die Idee gekommen, in For-Schleifen solche Operatoren zu verwenden.
Verfasst: 10.11.2006 20:14
von Kiffi
> Ist zwar jetzt ein blödes Argument, aber "in Java geht es doch auch mit <"
in der Tat: PB != Java
Grüße ... Kiffi
Verfasst: 10.11.2006 20:18
von ts-soft
Der Ausdruck müßte ja extra zur Laufzeit ausgewertet werden, wäre mit
unnötigen Performanceeinbussen verbunden, also unerwünscht
java und PB vergleichen bringt sowieso nicht viel, 2 total unterschiedliche Welten
Verfasst: 10.11.2006 20:19
von Kaeru Gaman
nuja... JAVA is nunmal kein BASIC.
JAVA ist eine sehr junge sprache, grad mal 10 jahre alt oder so...
dass dort für ein neues Schleifenkonstrukt alte begriffe verwendet wurden,
würde ich sogar eher als designfehler bezeichnen,
aber vielleicht ist den entwicklern einfach nix anderes eingefallen.
die For-Schleife ist eine der ältesten schleifenkonstrukte überhaupt, und gehorcht ziemlich klaren regeln.
die abbruchbedingung ist immer ">=" bei positivem step und "<=" bei negativem step,
wobei sogar der "step" an sich noch eine "neuere" erfindung ist.
das ursprüngliche konstrukt sah lediglich eine regelmaßige aufwärtsschleife mit einer schrittweite von 1 vor.
Verfasst: 10.11.2006 20:26
von Leonhard
Das ist eventuell nützlicher:
Code: Alles auswählen
Macro _For (Var, StartWert, EndWert, Operator = =)
Var = StartWert
While Not Var Operator EndWert
EndMacro
Macro _Next (Var, SchrittWert = 1)
i = i+Schrittwert
Wend
EndMacro
Verfasst: 10.11.2006 20:33
von Kaeru Gaman
...hast du das mal getestet?

Verfasst: 10.11.2006 20:33
von #NULL
java ist java. pb ist pb.
in java wird die abbruchbedingung ja vollständig von dir definiert (in negativer form, also als 'continue-bedingung')
in pb ist die operation schon vordefiniert: i<n ..und du gibst nur n an, kannst dies aber dennoch als ausdruck machen, aber nur als arithmetischen und nicht als boolschen.
<edit: geht ja wieder flot hier

>
Verfasst: 10.11.2006 20:35
von DarkDragon
Ich hab auch mal so zwei Makros gemacht, für diejenigen, die lieber 3 Ausdrücke anstelle von einer Syntaxvorgegebener For-Schleife benutzen:
Code: Alles auswählen
Macro ForEx(Expression1, Expression2)
Expression1
While (Expression2) Or #False
EndMacro
Macro NextEx(Expression3)
Expression3
Wend
EndMacro
i.l
ForEx(i=0, i<10)
Debug i
NextEx(i + 1)
Normalerweise sollte das Expression3 im letzten Parameter des ForEx sein, dann wärs Java/PHP/C++ ähnlicher.