For To Step

Anfängerfragen zum Programmieren mit PureBasic.
Peloka
Beiträge: 34
Registriert: 16.01.2005 11:28

For To Step

Beitrag 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
Ein Bit ist die kleinste Software-einheit, ein falsches Bit macht aus Software Bugware...
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Nach STEP muss immer eine KONSTANTE stehen (#Zahl)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Peloka
Beiträge: 34
Registriert: 16.01.2005 11:28

Beitrag von Peloka »

Mit der Konstante geht's
warum aber nicht mit der Variabel
Ein Bit ist die kleinste Software-einheit, ein falsches Bit macht aus Software Bugware...
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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 ?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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
my pb stuff..
Bild..jedenfalls war das mal so.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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 
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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.
my pb stuff..
Bild..jedenfalls war das mal so.
Peloka
Beiträge: 34
Registriert: 16.01.2005 11:28

Beitrag 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.
Ein Bit ist die kleinste Software-einheit, ein falsches Bit macht aus Software Bugware...
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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_()
Antworten