Seite 2 von 3
Verfasst: 05.11.2004 19:22
von Ynnus
Nur, in einer For-Schleife ist die Variable integriert und wird von der Schleife selbstständig erhöht. Bei der While-Schleife ist die Variable eine normale Variabel welche durch While nicht beeinflusst wird. Da ist das Risiko, dass etwas passiert mit der Zähler-Variable wesentlich geringer.
Verfasst: 05.11.2004 23:05
von MLK
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.
Verfasst: 05.11.2004 23:43
von Falko
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!
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
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
Vor allem kann man auch dann noch innerhalb der Schleife die Variable trotzdem ändern und dadurch den STEP beeinflussen.
MfG Falko
Verfasst: 06.11.2004 00:23
von GPI
Falko hat geschrieben:Vor allem kann man auch dann noch innerhalb der Schleife die Variable trotzdem ändern und dadurch den STEP beeinflussen.
Du meinst, wenn die die Variable Besucher in obrigen Beispiel ändert, ändert sich auch der Step beim nächsten durchlauf?
DAS würde ich bei einer sauberen Programmierung sein lassen...
Verfasst: 06.11.2004 00:30
von Ynnus
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.
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.
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.

Verfasst: 06.11.2004 00:33
von Falko
@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
Verfasst: 06.11.2004 03:28
von Andre
@Falko: habe Fred heute nachmittag nochmal per Mail angefragt, ob eine (zukünftige) Unterstützung von Variablen als Step-Parameter geplant ist. Gebe Bescheid, wenn ich näheres weiß...
Verfasst: 06.11.2004 03:37
von Falko
@Andre
Das wäre prima, wenn Fred das anpassen würde.
Danke Andre.
Gruß Falko
Verfasst: 06.11.2004 04:55
von MARTIN
GPI hat geschrieben:Weil das Pfusch ist und eine unsaubere Methode.
Das ist kein Pfusch. Auch in C ist sowas zulässig:
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++;
}
}
PureBasic unterstüzt das einfach nicht.
Verfasst: 06.11.2004 06:21
von honk
hm dazu fällt mir jetzt ein genau umgekehrtes Beispiel ein:
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
aber C nur Konstanten?

(was extrem unkomfortabel ist)
Code: Alles auswählen
switch ( was_machen )
{
case 123 : // Mach 123
case 456 : // Mach 456
}
Hoffentlich erzähle ich keinen Unsinn, denn sonst ist da was an mir vorbei gegangen und/oder ich benutze den falschen Compiler
