For-Next gibt falschen Wert zurück?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Triton

Betreff: For-Next gibt falschen Wert zurück?

BeitragSa, Apr 25, 2015 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hätte nicht gedacht, dass so ein Problem bei mir nochmal eine Frage aufwerfen würde:

Code: [AUSKLAPPEN]

For x2 = 0 To 100
Next
Print x2
WaitKey
End



Warum zur Hölle gibt das 101 aus?
Ich kanns mir nicht erklären.
Coding: silizium-net.de | Portfolio: Triton.ch.vu

Thunder

BeitragSa, Apr 25, 2015 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei dem For-To von Blitz sind beide Werte inklusive, d.h. wenn du ein "Print x2" in die schleife schreibst, würde der Befehl als letztes noch 100 ausgeben. Und erst mit dem Erhöhen auf 101 terminiert die Schleife.
Rätsel gelöst Very Happy


Java bzw. C++ Äquivalent:
Zitat:
int x2;
for(x2 = 0; x2 <= 100; x2++);
System.out.println(x2);
//bzw.
std::cout << x2 << endl;

(ist also nichts ungewöhnliches, wenn die letzte Stelle inklusive ist - deswegen gibts in BMax For-Until)
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Triton

BeitragSa, Apr 25, 2015 23:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm. Aber es wird nirgends angewiesen dass es über 100 gehen soll. Erscheint mir nicht logisch und nicht sauber geschrieben...

Klar, man findet einfach einen anderen Weg, dennoch finde ich es unlogisch.
Coding: silizium-net.de | Portfolio: Triton.ch.vu

Thunder

BeitragSa, Apr 25, 2015 23:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, im Prinzip ist ja, wenn wir jetzt bei Basic-Stil bleiben, eine For-Schleife sowas:

BlitzBasic: [AUSKLAPPEN]
x2 = 0
While x2 <= 100 ; Äquivalent zu For x2 = 0 To 100
; Schleifeninhalt

x2 = x2 + 1
Wend
Print x2


So funktionieren alle For-Schleifen in den großen Sprachen. Vor dem Ende der Schleife wird erhöht und erst wenn der Wert die Grenze übersteigt (d.h. wenn die Schleifenbedingung nicht mehr stimmt), wird terminiert.

Es wäre eher unlogisch, wenn die Schleife wissen würde, dass genau beim nächsten Durchlauf die Schleifenbedingung nicht mehr stimmen wird, und dann einfach einen Schritt vorher terminiert.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Triton

BeitragSa, Apr 25, 2015 23:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, so ist es.

Aber logisch wäre für mich,
- dass am Anfang der der Schleife die Bedingung die dort steht geprüft wird
- die Schleife ausgeführt wird
- sie wieder zum Anfang springt und eben erneut geprüft wird ob die Bedingung noch stimmt

Falls nein, abbrechen und nächster Befehl nach der Schleife.

Also ich hätte das nicht so geschrieben, sass bei "Next" der Zählwert erhöht wird. Schließlich sagt next
im Wortsinn nur dass der nächste Durchlauf kommt, nicht dass irgendein Wert geändert werden soll.
Das müsste bei "For" getan - und geprüft werden und ggf. halt abgebrochen werden.

Nun ja, komisch. Ich dachte schon ich spinne.

Danke jedenfalls Smile
Coding: silizium-net.de | Portfolio: Triton.ch.vu

Mathias-Kwiatkowski

BeitragDo, Apr 30, 2015 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
du das ist ganz normal

... weil auch eine zahl ist

wenn du folgendes machst

local A%=-1

for X=0 to 100
a=a+1
print a
next

kommst du ebenfalls aufs richtige ergebniss. weil for X=0 to 100 geht er 100 schritte plus einen mehr (die null)

du kannst for x=1 to 100 machen ...

übrigends gehen auch negativ zahlen

for X=-100 to 100

usw...
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group