Seite 1 von 2

For To Step

Verfasst: 09.10.2006 01:23
von Peloka
Da hab ich doch mal ne bloede Frage.
Warum funktioniert folgender Code nicht ?

Code: Alles auswählen

line2 = 387
...
linedist1 =21
For i =line2 To 690 Step linedist1
...
Next i
21 ist ja wohl 'ne Zahl oder was meckert der Rechner

Pb3.94

Verfasst: 09.10.2006 01:26
von STARGÅTE
Nach STEP muss immer eine KONSTANTE stehen (#Zahl)

Verfasst: 09.10.2006 01:32
von Peloka
Mit der Konstante geht's
warum aber nicht mit der Variabel

Verfasst: 09.10.2006 01:38
von STARGÅTE
Das ist glaube ich eine sicherheitsfrage ^^

Was soll PB machen wenn du die Varialble änderst Z.B.

Code: Alles auswählen

for n = 1 to 100 step Z
 z + 1
next n
ändert dann PB automatisch das Step? k.A.

Konstanten deshalb weil ja normalerweise immer Zahlen dahinter stehen.

Wenn du wirklich das Step wärend des durchlaufes verändern willst dann nimm lieber 2 For To schleifen oder einer 2 Schleifen in einander.

Was willst du denn machen ?

Verfasst: 09.10.2006 03:16
von #NULL
schleifen mit variablem schritt kannst du auch mit while umsetzten:

Code: Alles auswählen

max=5000
stp=2

While i<=max
  Debug i
  i+stp
  stp*3
Wend

Verfasst: 09.10.2006 03:57
von Kaeru Gaman
eine for-next schleife ist die rudimentärste schleife von allen.
eigentlich widerspricht es dem wesen des "nächsten in einer reihe",
wenn die abstände variabel sein könnten.

aber wie #NULL schon sagte, es wird auch garnicht benötigt,
man kann while-wend nehmen, oder repeat-until

Code: Alles auswählen

; For var = START To ENDE Step DIST

var = START
Repeat
  ;...
  var + DIST
Until var > ENDE

Verfasst: 09.10.2006 05:11
von STARGÅTE
ich würde es lieber Kopfgesteuert machen weil du sonst bei START=1 und ENDE=0 einen Durchlauf hast, was bei FOR TO nicht ist ,also:

Code: Alles auswählen

; For var = START To ENDE Step DIST 

var = START 
While var <= ENDE
  ;... 
  var + DIST 
Wend 

Verfasst: 09.10.2006 07:44
von #NULL
mal davon abgesehen, dass man ja auch in einer for-next schleife den zaehler, und damit den step beeinflussen kann:

Code: Alles auswählen

stp=2
For i=0 To 1000
  Debug "i="+Str(i)+"        stp="+Str(stp)
  i-1+stp
  stp*2
Next
..was äußerst hässlich ist,


kannst du dir den step auch in jedem durchgang selbst ableiten:

Code: Alles auswählen

max=100

stp=5
For i=0 To max/stp
  Debug i*stp
Next

Debug ""

stp=10
For i=0 To max/stp
  Debug i*stp
Next
den step während der schleife zu ändern ist ja seltener nötig, aber manchmal will man den step für die schleife eben zu laufzeit festlegen.

Verfasst: 09.10.2006 10:37
von Peloka
Problem scheinbar erkannt.
Da die Variabel geändert in der Schlaufe werden kann verbietet Pb dies.
Andere Basic's interpretieren das anders.
Dort wird der Step-wert erst zu beginn der Schlaufe ausgelesen und bis zum Ende der Schlaufe beibehalten.

Da Pb den Step-wert scheinbar aus dem Speicher direkt holt, kann man theoretisch den Speicherort lokalisieren, dort den Wert ändern und erhält so eine Schleife mit unterschiedlicher Stepgröße.

Das ist ja wohl auch nicht im Sinne des Erfinders, aber auch nicht mein Problem.
Ich löse die Aufgabe also mit WHILE oder UNTIL.

Verfasst: 09.10.2006 12:07
von NicTheQuick
Zwar ein bisschen langsamer, aber einfacher handzuhaben:

Code: Alles auswählen

Macro For_(Var, Start, Ende, Steps)
  Var = Start - Steps
  While Var + Steps < Ende
    Var + Steps
EndMacro

Macro Next_()
  Wend
EndMacro


For_(a, 1, 100, b)
  Debug a
  b + 1
Next_()