Seite 3 von 3
Verfasst: 06.11.2004 11:55
von GPI
MARTIN hat geschrieben:Das ist kein Pfusch. Auch in C ist sowas zulässig:
Schön, aber man sollte da gewaltig aufpassen, da es eine ungeheure Gefahrenquelle ist.
Die Variablen in For-Next sollte nach möglichkeit nicht manipuliert werden, da es bei späterer Fehlersuche erhebliche Probleme machen kann.
Erlaubt ist es natürlich, aber man sollte nicht alles machen, was erlaubt ist.
Verfasst: 06.11.2004 13:56
von MARTIN
@GPI
Es kommt sicher mehr auf den Programierer an, ob ein variabler Schritt in einer For-Schleife eine Gefahrenquelle ist.
Also ich habe solche konstruktion nie benutzt , (ausser für rekursive Folgen wie in meinem Beispiel) aber ich erkenne da eigentlich keine grosse Gefahren bei richtiger Handhabung.
Meinst vielleicht Du dass die For-Schleife dann unerwartete Werte liefern kann ?
Oder welche Problemme sind da zu erwarten ?
@honk
Habe auch daran gedacht. Warum akzeptiert PureBasic in Select-Case Anweisung eine Variable und in For-Next Schleife nicht.
Und in C ist es genau andersrum. Zufall ?
Verfasst: 06.11.2004 14:18
von Falko
MARTIN hat geschrieben:@honk
Habe auch daran gedacht. Warum akzeptiert PureBasic in Select-Case Anweisung eine Variable und in For-Next Schleife nicht.
Und in C ist es genau andersrum. Zufall ?
Auch in GFA ist es nicht viel anders wie in C/C++
GB32-Hilfe hat geschrieben:Select iexp
Case intConst
Case intConst To intConst
Case To intConst
Case intConst To
Case = intConst
Case > intConst
Case < intConst
Case >= intConst
Case <= intConst
Case <> intConst
EndSelect
Select Case exp
Case Const
Case Const To Const
Case To Const
Case Const To
Case = Const
Case > Const
Case < Const
Case >= Const
Case <= Const
Case <> Const
EndSelect
weitgehend wie 16 Bit GFA-BASIC
und hier noch mal aus der Hilfe
GB32-Hilfe hat geschrieben:For var = startwert To endwert
For var = startwert UpTo endwert
For var = startwert DownTo endwert
For var = startwert To endwert Step schrittweite
For var = startwert UpTo endwert Step schrittweite
For var = startwert DownTo endwert Step schrittweite
Next var
Next
Die Zählschleife weist einer Variablen var einen startwert zu. Nach jedem Durchlauf der Schleife, gebildet von For und Next, wird diese Variable erhöht (um Step bzw. um 1), dann wird var mit dem endwert verglichen. Bis der endwert überschritten wird, wird die Schleife durchlaufen. Bei Angabe von negativem Step (bzw. Downto ohne Step) gilt der endwert als überschritten, wenn der Schleifenzähler var den endwert unterschreitet. Einige Beispiele:
For i = 1 To 10 : Print i; : Next // 1 2 3 4 5 6 7 8 9 10
For i = 10 DownTo 1 : Print i; : Next // 10 9 8 7 6 5 4 3 2 1
For i = 1 UpTo 10 : Print i; : Next // 1 2 3 4 5 6 7 8 9 10
For i = 1 To 10 Step 1: Print i; : Next // 1 2 3 4 5 6 7 8 9 10
For i = 10 To 1 Step -1: Print i; : Next // 10 9 8 7 6 5 4 3 2 1
For i = 1 UpTo 10 Step 1: Print i; : Next // 1 2 3 4 5 6 7 8 9 10
For i = 10 DownTo 1 Step -1: Print i; : Next // 10 9 8 7 6 5 4 3 2 1
For i = 1 To 10 Step 2: Print i; : Next // 1 3 5 7 9
For i = 10 To 1 Step -2: Print i; : Next // 10 8 6 4 2
For i = 1 UpTo 10 Step 2: Print i; : Next // 1 3 5 7 9
For i = 10 DownTo 1 Step -2: Print i; : Next // 10 8 6 4 2
Zwischen For - To - Step und For - UpTo - Step bzw. For - DownTo - Step gibt es nur einen kleinen Unterschied. Da bei For - To - Step die Schleifenzählrichtung nicht bekannt ist (jedenfalls wenn der Wert hinter Step keine Konstante ist), muß das GFA-BASIC 32 abhängig vom Vorzeichen der Schrittweite zwei verschiedene Vergleiche zwischen var und endwert durchführen, und zwar var > endwert für schrittweite >= 0 und var < endwert für schrittweite < 0. Mit UpTo bzw. DownTo kann man angeben, welcher dieser Vergleiche tatsächlich notwendig ist. Der andere, nie ausgeführte Vergleich, erzeugt so auch keinen extra Programmcode. Dies führt neben der Platzersparnis zu einer geringfügigen Beschleunigung des Programmes. Außerdem sind UpTo x Step y und DownTo x Step y auch ein klein wenig leichter verständlich.
Die For-Next Schleife ist eine abweisende Schleife, d. h. wenn startwert den endwert überschreitet, wird die Schleife kein einziges Mal durchlaufen.
Verfasst: 06.11.2004 16:21
von honk
Jedenfalls wollte ich sagen, wenn PB bei CASE Variablen akzeptiert,
dann sollte das meiner Meinung nach auch bei STEP so sein,
da das einer "Basic"-Sprache ja wohl eher entspricht.
Man soll ja schließlich
weniger und
verständlicheren Code schreiben können als bsw. in C.
Hat sonst noch niemand von dem CASE-VAR Feature von PB gebrauch gemacht?
Als ich sowas in C machen wollte war ich mehr als enttäuscht, weil eine
der einfachsten Sachen der Welt nicht funktioniert, eine die in PB funzt
Um eine berechnete Variable mit 4 anderen berechneten Vars zu
vergleichen musste ich dann IF-ELSE-Schachteln basteln,
3mal längerer Code... dauert 3mal länger zu lesen/verstehen... geiles Feature

Ich Frage mich ernsthaft wozu SWITCH-CASE in C gut sein soll ...
natürlich für "konstanten", statischen und unflexiblen Code LOL
Mein persönliches FAZIT:
CASE mit Variablen rult!!!
STEP mit Variablen würde ganz genauso rulen!!!
Verfasst: 09.11.2004 01:30
von Andre
Rückinfo von Fred: die (zukünftige) Unterstützung von Variablen als Step-Parameter ist vorgesehen...

Verfasst: 09.11.2004 02:43
von honk
ah trés bien

Verfasst: 09.11.2004 14:42
von redacid
Andre hat geschrieben:Rückinfo von Fred: die (zukünftige) Unterstützung von Variablen als Step-Parameter ist vorgesehen...

Für V4 oder erst V5?

Verfasst: 11.11.2004 00:35
von Andre
redacid hat geschrieben:Andre hat geschrieben:Rückinfo von Fred: die (zukünftige) Unterstützung von Variablen als Step-Parameter ist vorgesehen...

Für V4 oder erst V5?

Naja, nichts genaues weiß man nicht...
(weiß zu diesem Punkt wirklich nichts genaues, für v4 müsste man halt etwas drängeln

)
Verfasst: 11.11.2004 13:59
von Kaeru Gaman
also, ich möchte mich hier der "konservativen" linie anschliessen...
... die step innnerhalb der schleife zu verändern war vielleicht auf dem C64 notwendig, wo es einfach keine anderen schleifen GAB (ausser man machte sowas mit if..goto)
für veränderliche stepgrössen in EINEM durchlauf bevorzuge ich hier auch While/Wend oder Repeat/Until
... und ich finde das andere auch unübersichtlich und irgendwie fishy...
ANDERERSEITS mag es notwendig sein, die step-grösse VOR dem schleifendurchlauf festzulegen und nicht zur programmierzeit... dafür ist eine implementierung von Step Var wünschenswert.