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

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

Kaeru Gaman hat geschrieben:...hast du das mal getestet? /:->
hab den Code jetzt verbessert!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
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 »

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 <)
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
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag 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:
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag 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
!UD2
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 »

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
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
Gesperrt