For-Schleifen-Abbruch funzt nicht mit "<" und &

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
wolle212
Beiträge: 31
Registriert: 23.04.2005 21:39
Wohnort: Leipzig
Kontaktdaten:

For-Schleifen-Abbruch funzt nicht mit "<" und &

Beitrag 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

Code: Alles auswählen

n=6
For i=0 To i<n  
  Debug i
Next
das gleiche Ergebnis wie

Code: Alles auswählen

n=6
For i=0 To i=n  
  Debug i
Next
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.
Es gibt 10 Arten von Menschen: Jene, die das Binärsystem verstehen und jene, bei denen das nicht der Fall ist.

PB_4.20
WinXP_Pro_x32_SP3
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

es ist ganz einfach syntaktisch falsch!

das dritte argument der for-schleife ist die obergrenze

Code: Alles auswählen

n=6 
For i=0 To n  
  Debug i 
Next 
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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
wolle212
Beiträge: 31
Registriert: 23.04.2005 21:39
Wohnort: Leipzig
Kontaktdaten:

Beitrag 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.
Es gibt 10 Arten von Menschen: Jene, die das Binärsystem verstehen und jene, bei denen das nicht der Fall ist.

PB_4.20
WinXP_Pro_x32_SP3
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Der Ausdruck müßte ja extra zur Laufzeit ausgewertet werden, wäre mit
unnötigen Performanceeinbussen verbunden, also unerwünscht :wink:

java und PB vergleichen bringt sowieso nicht viel, 2 total unterschiedliche Welten
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag 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
Zuletzt geändert von Leonhard am 10.11.2006 20:37, insgesamt 1-mal geändert.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

...hast du das mal getestet? /:->
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag 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 <) >
my pb stuff..
Bild..jedenfalls war das mal so.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Gesperrt