Quick Basic: For-Next
Grundlagen und Syntax
[Bearbeiten]Bei einer FOR
-Schleife wird ein Anweisungsblock eine bestimmte Anzahl mal ausgeführt.
Syntax:
FOR Laufvariable = Untergrenze TO Obergrenze [ STEP Schrittweite ] Anweisungen [ EXIT FOR ] Anweisungen NEXT Laufvariable
Dabei wird eine Variable verändert:
FOR x = 0 TO 5 Anweisungen NEXT x
Hier würden die Anweisungen insgesamt 6x ausgeführt werden. Beim ersten Durchlauf würde die Variable x
0 sein, beim zweiten 1, beim dritten 2, beim vierten 3, beim fünften 4 und beim sechten 5. Man kann durch das optionale STEP
-Schlüsselwort festlegen, in welchen Schritten sich die Zählervariable - hier x
- verändern soll:
FOR zaehler = 1 TO 7 STEP 2 Anweisungen Next zaehler
Hier würde zaehler
im ersten Durchlauf 1, im zweiten 3, im dritten 5 und im vierten 7 sein. Die Schrittweite kann auch Werte kleiner 1 annehmen oder negativ werden: Bei For c=2 to 0 step -1
nimmt c nacheinander die Werte 2, 1 und 0 an.
EXIT FOR-Anweisung
[Bearbeiten]Mit der EXIT FOR
-Anweisung ist es möglich eine FOR-NEXT
-Schleife zu beenden.
FOR i = 1 TO 100
IF i > 10 THEN EXIT FOR
PRINT i
NEXT i
Dieses Beispiel wird nur die Zahlen von 1 bis 10 ausgeben. Beim 11. Durchlauf (wenn i = 11 ist) ist die Bedingung i > 10 erfüllt und die die EXIT FOR
-Anweisung wird ausgeführt. Somit wird hier die FOR-Scheife verlassen.
Beispiele
[Bearbeiten]Quadratzahlen
[Bearbeiten]Im folgenden Programmbeispiel sollen die Quadratzahlen von 1 bis 5 berechnet werden. Hier wird zuerst eine Kopfzeile geschrieben, und darunter eine Liste der Zahlen 1, 2, 3, 4, 5 und den dazugehörigen Quadratzahlen 1, 4, 9, 16, 25.
Dim i As Integer
Print "Zahl", "Quadratzahl" '''Kopfzeile''
For i = 1 To 5
Print i, i*i '''Liste mit den Quadratzahlen erstellen''
Next i
Primzahlen
[Bearbeiten]Das nächste Beispiel soll zeigen, wie du mit Hilfe einer FOR
-Schleife überprüfen kannst ob eine gegebene Zahl eine Primzahl ist. (zur Erinnerung: eine Primzahl ist eine Zahl, die nur durch eins und sich selbst teilbar ist.)
Idee: wenn n unsere Zahl ist wollen wir einfach der Reihe nach ausprobieren ob n durch alle Zahlen von 2 bis n-1 teilbar ist. n ist durch eine Zahl i (ohne Rest) teilbar, genau dann wenn n MOD i = 0
Und nun zu unserem kleinen Programm:
DIM i AS INTEGER, n AS INTEGER, nichtPrim AS INTEGER
n = 12 'die Zahl die wir überprüfen wollen
nichtPrim = 0 'hier wird gespeichert ob ein Teiler gefunden wurde
FOR i = 2 TO n - 1
IF n MOD i = 0 THEN 'wenn Teiler gefunden..
nichtPrim = 1 '..merken und..
EXIT FOR '..Schleife verlassen
END IF
NEXT i
IF nichtPrim = 0 THEN 'und zum Schluss wollen wir das Ergebnis auf dem Bildschirm ausgeben
PRINT n, "ist eine Primzahl!"
ELSE
PRINT n, "ist KEINE Primzahl!! - Gefundener Teiler:", i
END IF
Primzahlen, Teil 2
[Bearbeiten]Hier wollen wir den Code des vorigen Beispiels noch etwas optimieren.
Bekanntlich sind alle geraden Zahlen (2, 4, 6, etc.) durch 2 teilbar. Deshalb reicht es völlig aus die Teilbarkeit nur für ungerade Zahlen zu überprüfen.
Darüber hinaus ist der größte Teiler einer Zahl n maximal gleich der Wurzel aus n. Also reicht es als Obergrenze der Schleife die Wurzel aus n, also SQR(n)
anzugeben.
DIM i AS INTEGER, n AS INTEGER, nichtPrim AS INTEGER
n = 377 'die Zahl die wir überprüfen wollen
IF n MOD 2 = 0 THEN 'Zahl ist durch 2 teilbar
PRINT n, "ist durch 2 Teilbar."
ELSE 'falls nicht durch 2 teilbar
nichtPrim = 0
FOR i = 3 TO SQR(n) STEP 2 'neue Grenzen und Schrittweite
IF n MOD i = 0 THEN
nichtPrim = 1
EXIT FOR
END IF
NEXT i
IF nichtPrim = 0 THEN
PRINT n, "ist eine Primzahl!"
ELSE
PRINT n, "ist KEINE Primzahl!! - Gefundener Teiler:", i
END IF
END IF
Im Vergleich zur ersten Version ist unser neuer Algorithmus um einiges schneller als der vorherige, das liegt insbesondere daran, dass die Schleife wesentlich enger bei einanderliegende Grenzen hat und dass wir in größeren Schritten die Schleife durchlaufen.