Seite 2 von 2

Verfasst: 10.11.2006 20:39
von Leonhard
Kaeru Gaman hat geschrieben:...hast du das mal getestet? /:->
hab den Code jetzt verbessert!

Verfasst: 10.11.2006 20:42
von Kaeru Gaman
gehen verschachtelte macro-definitionen?
(hab didis mal umgestrickt, keine ahnung, ob das funktionieren würde...)

Code: Alles auswählen

Macro ForEx(Expression1, Expression2,Expression3) 
  Macro NextEx() 
      Expression3 
    Wend 
  EndMacro 
  Expression1 
  While (Expression2) Or #False 
EndMacro 

i.l 

ForEx(i=0, i<10,i + 1) 
  Debug i 
NextEx()
[edit]
ne, funktionieren wahrscheinlich nicht, weil macros zur compilezeit ersetzt werden...
oder gehts doch? *grübel* ...is eigentlich auch egal...

PS:
@Leonhart
das i hat da nix zu suchen, du musst dann schon "Var" schreiben..
und obs funktioniert, kann man so blind auch nich sagen...

im grunde ist das doch alles flickwerk.
die schleifentypen die vorhanden sind, reichen völlig,
und wer lieber JAVA konstrukte möchte, soll halt in JAVA programmieren...

Verfasst: 10.11.2006 21:22
von wolle212
Erst einmal danke für die vielen Antworten. Ich hatte eigentlich nicht gedacht, dass innerhalb so kurzer Zeit so viele Posts zusammenkommen werden.

Zuerst einmal:
Ich weiß durchaus, dass JAVA kein BASIC ist. Andererseits ist es ja gerade das besondere an PureBasic, dass es über "einfaches" Basic hinausgeht.
Mir ging es nur um die grundsätzliche For-Schleifenstruktur. Mich hat es einfach nur gewundert, dass es hierbei zu Differenzen kam, wo ich sie eigentlich nicht erwartet hätte. Das ist alles.

Und einmal ganz nebenbei bemerkt: Freiwillig nutze ich JAVA nicht oder meint ihr, ich würde sonst imperativ lösbare Java-Aufgaben mit PB angehen <)

Verfasst: 10.11.2006 21:25
von #NULL
dann kann man es ja gleich so machen:

Code: Alles auswählen

i=2:While i<100
  Debug i
i*2:Wend
oder notfalls noch mit den For/Next schlüsselpförtern:

Code: Alles auswählen

FOR_.l :: i=0 :: While i<6
  Debug i
NEXT_.l :: i+1 :: Wend

Code: Alles auswählen

FOR_.l :: i=2:n=0 :: While (i<1025 And n<=4)
  Debug Str(i)+"  "+Str(n)
NEXT_.l :: i*2:n+1 :: Wend
da is dann auch sichergestellt, dass man nichts mehr erkennt. :mrgreen:

Verfasst: 10.11.2006 21:31
von AND51
Nur zur Information:

Die FOR-Schleife ist gegenüber REPEAT und WHILE-Schleifen die schnellste! Bei mir im Test folgte dann auf Platz 2 REPEAT dicht gefolgt von WHILE.

Ich würde also FOR-Schleifen nehmen, wo es möglich ist und auf den Ausdruck FOR n=1 to i<n beispielsweise verzichten.

Verfasst: 11.11.2006 12:04
von Froggerprogger
Achja, von mir auch noch eine Portion Senf: PB's

Code: Alles auswählen

For i=0 To n
ist dasselbe wie

Code: Alles auswählen

for (i=0; i<=n; i++)
in einigen anderen Programmiersprachen.

Und bei beiden hat i nach regulärer Beendigung der Schleife den Wert n+1

Verfasst: 11.11.2006 17:04
von ts-soft
AND51 hat geschrieben:Nur zur Information:

Die FOR-Schleife ist gegenüber REPEAT und WHILE-Schleifen die schnellste! Bei mir im Test folgte dann auf Platz 2 REPEAT dicht gefolgt von WHILE.

Ich würde also FOR-Schleifen nehmen, wo es möglich ist und auf den Ausdruck FOR n=1 to i<n beispielsweise verzichten.
Da stimm so, ist aber in der Praxis einfach nur Quatsch :mrgreen:
Dauern tut der Schleifeninhalt, nicht die Schleife selber. For Next Schleifen
sind nur Sinnvoll, wenn die Anzahl der Durchläufe sich niemals ändert und
der Zähler gebraucht wird.
Wenn man den Inhalt der Schleife optimiert, wird man die Daten direkt im
Speicher manipulieren, weils am schnellsten ist. Dabei werden sogar einige
Schleifendurchläufe überflüssig. Somit ist meist die While-Wend Schleife die
schnellste.

Diese komischen falschen Pauschalaussagen ärgern mich langsam.
PS: Speedoptimierter Code ist fast immer länger als normaller Code.
Weniger Codezeilen <> Speed

yust my 2 cent