For-Schleife - variables Step?
das etwas "passiert" ?
schau dir mal den ASM output einer FOR schleife an. da passiert nix anderes, als das am ende der schleife die zählvariable um den jeweiligen stepwert erhöht wird. wenn man da noch was drauf packt, dann ist es das selbe was PB auch machen würde. wenn du meinen code nicht magst - ok, aber schreib doch keinen unsinn.
schau dir mal den ASM output einer FOR schleife an. da passiert nix anderes, als das am ende der schleife die zählvariable um den jeweiligen stepwert erhöht wird. wenn man da noch was drauf packt, dann ist es das selbe was PB auch machen würde. wenn du meinen code nicht magst - ok, aber schreib doch keinen unsinn.
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
sorry, wäre es nicht besser Fred nocheinmal nachzufragen,
ob er den STEP auch als Variable einbauen kann. Vor einem Jahr
war schon mal diese Diskusion (siehe englisches Forum). Ob man das
so oder so machen kann ist eigendlich egal. Hauptsache es ist in "Basic als auch PureBasic" ohne irgendwelche Umwege einfach einzusetzen.
Ich glaube, Andre hatte Fred vor einem Jahr darauf hingewiesen. Finde leider den Thread nicht auf die schnelle
In GFA-Basic brauchte man wegen variablen STEP nicht Diskutieren.
Das läuft und ist übersichtlicher!
MfG Falko
ob er den STEP auch als Variable einbauen kann. Vor einem Jahr
war schon mal diese Diskusion (siehe englisches Forum). Ob man das
so oder so machen kann ist eigendlich egal. Hauptsache es ist in "Basic als auch PureBasic" ohne irgendwelche Umwege einfach einzusetzen.
Ich glaube, Andre hatte Fred vor einem Jahr darauf hingewiesen. Finde leider den Thread nicht auf die schnelle

In GFA-Basic brauchte man wegen variablen STEP nicht Diskutieren.
Das läuft und ist übersichtlicher!
GFA-Basic (16-Bit) hat geschrieben:Besucher = 100 /* z.B jeder hundertste Besucher
FOR i = 1 TO 2000 STEP Besucher
PRINT "Besuchernr: ";i
NEXT i
Vor allem kann man auch dann noch innerhalb der Schleife die Variable trotzdem ändern und dadurch den STEP beeinflussen.GB32 (32-Bit) hat geschrieben:OpenW Top 1, 100, 100, 600, 400
Local x%, i%, Besucher%
Besucher% = 100 /* z.B jeder hundertste Besucher
For i% = 1 To 2000 Step Besucher%
Print "Besuchernr: " + Str$(i%)
Next i%
KeyGet x%
CloseW 1
MfG Falko
Du meinst, wenn die die Variable Besucher in obrigen Beispiel ändert, ändert sich auch der Step beim nächsten durchlauf?Falko hat geschrieben:Vor allem kann man auch dann noch innerhalb der Schleife die Variable trotzdem ändern und dadurch den STEP beeinflussen.
DAS würde ich bei einer sauberen Programmierung sein lassen...
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Ich weiß wirklich nicht wie der ASM Code letzten Endes bei einer For-Schleife aussieht, aber vor ein paar Versionen war es in PureBasic noch versagt, (beabsichtigt) dass der User die Zählervariable der For-Schleife ändern kann. Also da kam es zu einem Absturz bzw. einer Fehlermeldung bei eingeschaltetem Debugger wodurch ich darauf schloss, dass die Variable irgendwie involviert ist und dieser Speicherbereich nicht geändert werden darf. In wie fern man nun den Zähler ändern kann wie man will weiß ich nicht, nur wer weiß, ob sich dieses Verhalten in PB nicht nochmal ändert. Ich hab im Hinterkopf, dass man mal die Zählervariable ändern konnte, dann das Update daraufhin nicht mehr, und jetzt wieder (wobei ich es so wie jetzt gut finde). Bei einer While ist die Variable zu 100% nicht an die Schleife gebunden und somit unabhängig von Updates und Änderungen im Schleifenverhalten.schau dir mal den ASM output einer FOR schleife an. da passiert nix anderes, als das am ende der schleife die zählvariable um den jeweiligen stepwert erhöht wird. wenn man da noch was drauf packt, dann ist es das selbe was PB auch machen würde. wenn du meinen code nicht magst - ok, aber schreib doch keinen unsinn.
Wie auch immer, beide Varianten stehen zur Wahl und man möge sich diejenige aussuchen welche einem besser gefällt. Warten wir ab was sich in Sachen For noch tun wird.

- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
@GPI
Genau das meinte ich. Wenn ich mit einer simplen FOR/NEXT/STEP - Schleife nur Ausgaben machen will, wo jeder 10'te, 100'te oder
x'te Besucher entweder Ausgedruckt bzw. in der Bildschirmausgabe angezeigt werden soll. Diese Schleife käme dann in einer Procedure hinein.
Warum ist das keine saubere Programmierung?
Ich sähe im Moment keine Nachteile dadurch.
MfG Falko
Genau das meinte ich. Wenn ich mit einer simplen FOR/NEXT/STEP - Schleife nur Ausgaben machen will, wo jeder 10'te, 100'te oder
x'te Besucher entweder Ausgedruckt bzw. in der Bildschirmausgabe angezeigt werden soll. Diese Schleife käme dann in einer Procedure hinein.
Warum ist das keine saubere Programmierung?
Ich sähe im Moment keine Nachteile dadurch.
MfG Falko
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Das ist kein Pfusch. Auch in C ist sowas zulässig:GPI hat geschrieben:Weil das Pfusch ist und eine unsaubere Methode.
Code: Alles auswählen
#include <stdio.h>
main()
{
int a,b=0;
for(a=0;a<100;a=a+b)/*<<--Variabler Schritt*/
{
printf("a=%d b=%d\n",a,b);
b++;
}
}
Amilo 1667|Suse Linux 10.1_64bit/WinXP |PB 4.00/3.94
hm dazu fällt mir jetzt ein genau umgekehrtes Beispiel ein:
PB akzeptiert Variablen fürs CASE (was sehr komfortabel ist)
aber C nur Konstanten?
(was extrem unkomfortabel ist)
Hoffentlich erzähle ich keinen Unsinn, denn sonst ist da was an mir vorbei gegangen und/oder ich benutze den falschen Compiler 
PB akzeptiert Variablen fürs CASE (was sehr komfortabel ist)
Code: Alles auswählen
Select was_machen.l
Case dies.l
; Mach dieses
Case jenes.l
; Mach jenes
EndSelect

Code: Alles auswählen
switch ( was_machen )
{
case 123 : // Mach 123
case 456 : // Mach 456
}
